gnash-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gnash-commit] [SCM] Gnash branch, master, updated. 68c6bfc69aeda6d360d1


From: Benjamin Wolsey
Subject: [Gnash-commit] [SCM] Gnash branch, master, updated. 68c6bfc69aeda6d360d1885c0e4d1786c1dcf371
Date: Tue, 23 Nov 2010 16:37:09 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Gnash".

The branch, master has been updated
       via  68c6bfc69aeda6d360d1885c0e4d1786c1dcf371 (commit)
       via  f5f0b2f03bad6e2eaf4c61232cb5c1599bd0c6c2 (commit)
       via  67f058b9254a1e3682c82f86cab1f1d847298f5e (commit)
       via  1124d9010adb5ae4cc888b7cfda6b191365c2913 (commit)
       via  7c4bef5e21c5e977261109aae1e176727ae4576a (commit)
       via  03d792c09d6c5635403329d8cc14aef023cd208b (commit)
       via  93b2df07a908645f0718852cf17cd37ae93f1064 (commit)
       via  c07c359f8144229f4d3a941da7dc33991b2b1843 (commit)
       via  f771d8e8c61fd25a0b9f6bd3948f450d24223d7d (commit)
       via  4d9df08b5ba68594928d2369a8a13a7ca4a1e9a3 (commit)
      from  2aa24667a8a18feaa12d9261d0ad000f62375b57 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.savannah.gnu.org/cgit//commit/?id=68c6bfc69aeda6d360d1885c0e4d1786c1dcf371


commit 68c6bfc69aeda6d360d1885c0e4d1786c1dcf371
Author: Benjamin Wolsey <address@hidden>
Date:   Tue Nov 23 17:25:21 2010 +0100

    Minor cleanup.

diff --git a/libcore/asobj/String_as.cpp b/libcore/asobj/String_as.cpp
index 332aa1c..ac75012 100644
--- a/libcore/asobj/String_as.cpp
+++ b/libcore/asobj/String_as.cpp
@@ -634,9 +634,8 @@ string_toUpperCase(const fn_call& fn)
 
     std::wstring wstr = utf8::decodeCanonicalString(str, version);
 
-    static const std::locale swfLocale((std::locale()), new SWFCtype());
-
 #if !defined(__HAIKU__) && !defined(__amigaos4__)
+    static const std::locale swfLocale((std::locale()), new SWFCtype());
     boost::to_upper(wstr, swfLocale);
 #else
     size_t l = wstr.size();
@@ -661,12 +660,8 @@ string_toLowerCase(const fn_call& fn)
 
     std::wstring wstr = utf8::decodeCanonicalString(str, version);
 
-    // If this is the C locale, the conversion will be wrong.
-    // Most other locales are correct. FIXME: get this to
-    // work regardless of user's current settings.
-    static const std::locale swfLocale((std::locale()), new SWFCtype());
-
 #if !defined(__HAIKU__) && !defined(__amigaos4__)
+    static const std::locale swfLocale((std::locale()), new SWFCtype());
     boost::to_lower(wstr, swfLocale);
 #else
     size_t l = wstr.size();

http://git.savannah.gnu.org/cgit//commit/?id=f5f0b2f03bad6e2eaf4c61232cb5c1599bd0c6c2


commit f5f0b2f03bad6e2eaf4c61232cb5c1599bd0c6c2
Author: Benjamin Wolsey <address@hidden>
Date:   Tue Nov 23 17:16:44 2010 +0100

    Sort map assignments for fun.

diff --git a/libbase/SWFCtype.cpp b/libbase/SWFCtype.cpp
index cd1a883..8526fd2 100644
--- a/libbase/SWFCtype.cpp
+++ b/libbase/SWFCtype.cpp
@@ -178,89 +178,89 @@ const CharMap&
 upperMap()
 {
     static const CharMap upper = boost::assign::map_list_of
-        (8179, 8188)
-        (8165, 8172)
-        (8161, 8169)
-        (8160, 8168)
-        (8145, 8153)
-        (8144, 8152)
-        (8131, 8140)
-        (8126, 921)
-        (8115, 8124)
-        (8113, 8121)
-        (8112, 8120)
-        (8061, 8187)
-        (8060, 8186)
-        (8059, 8171)
-        (8058, 8170)
-        (8057, 8185)
-        (8056, 8184)
-        (8055, 8155)
-        (8054, 8154)
-        (8049, 8123)
-        (8048, 8122)
-        (7835, 7776)
-        (1273, 1272)
-        (1228, 1227)
-        (1224, 1223)
-        (1013, 917)
-        (1010, 931)
-        (1009, 929)
-        (1008, 922)
-        (982, 928)
-        (981, 934)
-        (977, 920)
-        (976, 914)
-        (974, 911)
-        (973, 910)
-        (972, 908)
-        (962, 931)
-        (940, 902)
-        (837, 921)
-        (658, 439)
-        (651, 434)
-        (650, 433)
-        (648, 430)
-        (643, 425)
-        (640, 422)
-        (629, 415)
-        (626, 413)
-        (623, 412)
-        (617, 406)
-        (616, 407)
-        (611, 404)
-        (608, 403)
-        (603, 400)
-        (601, 399)
-        (599, 394)
-        (598, 393)
-        (596, 390)
-        (595, 385)
-        (501, 500)
-        (499, 497)
-        (498, 497)
-        (477, 398)
-        (460, 458)
-        (459, 458)
-        (457, 455)
-        (456, 455)
-        (454, 452)
-        (453, 452)
-        (447, 503)
-        (445, 444)
-        (441, 440)
-        (432, 431)
-        (429, 428)
-        (424, 423)
-        (409, 408)
-        (405, 502)
-        (402, 401)
-        (396, 395)
-        (392, 391)
-        (383, 83)
-        (305, 73)
+        (181, 924)
         (255, 376)
-        (181, 924);
+        (305, 73)
+        (383, 83)
+        (392, 391)
+        (396, 395)
+        (402, 401)
+        (405, 502)
+        (409, 408)
+        (424, 423)
+        (429, 428)
+        (432, 431)
+        (441, 440)
+        (445, 444)
+        (447, 503)
+        (453, 452)
+        (454, 452)
+        (456, 455)
+        (457, 455)
+        (459, 458)
+        (460, 458)
+        (477, 398)
+        (498, 497)
+        (499, 497)
+        (501, 500)
+        (595, 385)
+        (596, 390)
+        (598, 393)
+        (599, 394)
+        (601, 399)
+        (603, 400)
+        (608, 403)
+        (611, 404)
+        (616, 407)
+        (617, 406)
+        (623, 412)
+        (626, 413)
+        (629, 415)
+        (640, 422)
+        (643, 425)
+        (648, 430)
+        (650, 433)
+        (651, 434)
+        (658, 439)
+        (837, 921)
+        (940, 902)
+        (962, 931)
+        (972, 908)
+        (973, 910)
+        (974, 911)
+        (976, 914)
+        (977, 920)
+        (981, 934)
+        (982, 928)
+        (1008, 922)
+        (1009, 929)
+        (1010, 931)
+        (1013, 917)
+        (1224, 1223)
+        (1228, 1227)
+        (1273, 1272)
+        (7835, 7776)
+        (8048, 8122)
+        (8049, 8123)
+        (8054, 8154)
+        (8055, 8155)
+        (8056, 8184)
+        (8057, 8185)
+        (8058, 8170)
+        (8059, 8171)
+        (8060, 8186)
+        (8061, 8187)
+        (8112, 8120)
+        (8113, 8121)
+        (8115, 8124)
+        (8126, 921)
+        (8131, 8140)
+        (8144, 8152)
+        (8145, 8153)
+        (8160, 8168)
+        (8161, 8169)
+        (8165, 8172)
+        (8179, 8188);
 
     return upper;
 }
@@ -269,76 +269,76 @@ const CharMap&
 lowerMap()
 {
     static const CharMap lower = boost::assign::map_list_of
-        (8491, 229)
-        (8490, 107)
-        (8486, 969)
-        (8188, 8179)
-        (8187, 8061)
-        (8186, 8060)
-        (8185, 8057)
-        (8184, 8056)
-        (8172, 8165)
-        (8171, 8059)
-        (8170, 8058)
-        (8169, 8161)
-        (8168, 8160)
-        (8155, 8055)
-        (8154, 8054)
-        (8153, 8145)
-        (8152, 8144)
-        (8140, 8131)
-        (8124, 8115)
-        (8123, 8049)
-        (8122, 8048)
-        (8121, 8113)
-        (8120, 8112)
-        (1272, 1273)
-        (1227, 1228)
-        (1223, 1224)
-        (1012, 952)
-        (911, 974)
-        (910, 973)
-        (908, 972)
-        (902, 940)
-        (503, 447)
-        (502, 405)
-        (497, 499)
-        (458, 460)
-        (456, 457)
-        (455, 457)
-        (453, 454)
-        (452, 454)
-        (444, 445)
-        (440, 441)
-        (439, 658)
-        (434, 651)
-        (433, 650)
-        (431, 432)
-        (430, 648)
-        (428, 429)
-        (425, 643)
-        (423, 424)
-        (422, 640)
-        (415, 629)
-        (413, 626)
-        (412, 623)
-        (408, 409)
-        (407, 616)
-        (406, 617)
-        (404, 611)
-        (403, 608)
-        (401, 402)
-        (400, 603)
-        (399, 601)
-        (398, 477)
-        (395, 396)
-        (394, 599)
-        (393, 598)
-        (391, 392)
-        (390, 596)
-        (385, 595)
+        (304, 105)
         (376, 255)
-        (304, 105);
+        (385, 595)
+        (390, 596)
+        (391, 392)
+        (393, 598)
+        (394, 599)
+        (395, 396)
+        (398, 477)
+        (399, 601)
+        (400, 603)
+        (401, 402)
+        (403, 608)
+        (404, 611)
+        (406, 617)
+        (407, 616)
+        (408, 409)
+        (412, 623)
+        (413, 626)
+        (415, 629)
+        (422, 640)
+        (423, 424)
+        (425, 643)
+        (428, 429)
+        (430, 648)
+        (431, 432)
+        (433, 650)
+        (434, 651)
+        (439, 658)
+        (440, 441)
+        (444, 445)
+        (452, 454)
+        (453, 454)
+        (455, 457)
+        (456, 457)
+        (458, 460)
+        (497, 499)
+        (502, 405)
+        (503, 447)
+        (902, 940)
+        (908, 972)
+        (910, 973)
+        (911, 974)
+        (1012, 952)
+        (1223, 1224)
+        (1227, 1228)
+        (1272, 1273)
+        (8120, 8112)
+        (8121, 8113)
+        (8122, 8048)
+        (8123, 8049)
+        (8124, 8115)
+        (8140, 8131)
+        (8152, 8144)
+        (8153, 8145)
+        (8154, 8054)
+        (8155, 8055)
+        (8168, 8160)
+        (8169, 8161)
+        (8170, 8058)
+        (8171, 8059)
+        (8172, 8165)
+        (8184, 8056)
+        (8185, 8057)
+        (8186, 8060)
+        (8187, 8061)
+        (8188, 8179)
+        (8486, 969)
+        (8490, 107)
+        (8491, 229);
 
     return lower;
 }

http://git.savannah.gnu.org/cgit//commit/?id=67f058b9254a1e3682c82f86cab1f1d847298f5e


commit 67f058b9254a1e3682c82f86cab1f1d847298f5e
Author: Benjamin Wolsey <address@hidden>
Date:   Tue Nov 23 17:11:09 2010 +0100

    Drop left-over code.

diff --git a/testsuite/actionscript.all/caseconv.as 
b/testsuite/actionscript.all/caseconv.as
index 63c5994..622581a 100644
--- a/testsuite/actionscript.all/caseconv.as
+++ b/testsuite/actionscript.all/caseconv.as
@@ -1472,12 +1472,10 @@ check_equals(testlower.length, 65339);
 check_equals(testupper.length, 65371);
 
 for (i = 0; i < 65536; ++i) {
-    //if ((upperToLower[i] == undefined && testlower[i] != undefined) || 
(testlower[i] != upperToLower[i])) {
     if ((testlower[i] != upperToLower[i])) {
         fail("To lower: " + i + "(expected " +
             (upperToLower[i] == undefined ? i : upperToLower[i]) + ", got " + 
testlower[i] + ")");
     }
-    //if ((lowerToUpper[i] == undefined && testupper[i] == undefined) || 
testupper[i] != lowerToUpper[i]) {
     if (testupper[i] != lowerToUpper[i]) {
         fail("To upper: " + i + "(expected " +
             (lowerToUpper[i] == undefined ? i : lowerToUpper[i]) + ", got " + 
testupper[i] + ")");

http://git.savannah.gnu.org/cgit//commit/?id=1124d9010adb5ae4cc888b7cfda6b191365c2913


commit 1124d9010adb5ae4cc888b7cfda6b191365c2913
Author: Benjamin Wolsey <address@hidden>
Date:   Tue Nov 23 17:04:16 2010 +0100

    Add boilerplate and an else.

diff --git a/libbase/SWFCtype.cpp b/libbase/SWFCtype.cpp
index 876cbe5..cd1a883 100644
--- a/libbase/SWFCtype.cpp
+++ b/libbase/SWFCtype.cpp
@@ -1,3 +1,22 @@
+// SWFCtype.cpp: Case conversion code for SWF strings.
+// 
+//   Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+//   Foundation, Inc
+// 
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+// 
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+// 
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
 
 #include "SWFCtype.h"
 
@@ -48,7 +67,7 @@ SWFCtype::do_toupper(char_type c) const
         if (c >= 462 && c <= 476) return c - 1;
         if (c >= 1218 && c <= 1220) return c - 1;
     }
-    if (c & 1) {
+    else if (c & 1) {
         if (c >= 257 && c <= 303) return c - 1;
         if (c >= 307 && c <= 311) return c - 1;
         if (c >= 331 && c <= 375) return c - 1;
@@ -127,7 +146,7 @@ SWFCtype::do_tolower(char_type c) const
         if (c >= 7680 && c <= 7828) return c + 1;
         if (c >= 7840 && c <= 7928) return c + 1;
     }
-    if (c & 1) {
+    else if (c & 1) {
         if (c >= 313 && c <= 327) return c + 1;
         if (c >= 377 && c <= 381) return c + 1;
         if (c >= 435 && c <= 437) return c + 1;
diff --git a/libbase/SWFCtype.h b/libbase/SWFCtype.h
index 19e5ad4..37223b6 100644
--- a/libbase/SWFCtype.h
+++ b/libbase/SWFCtype.h
@@ -1,19 +1,36 @@
+// SWFCtype.h: Case conversion code for SWF strings.
+// 
+//   Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+//   Foundation, Inc
+// 
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+// 
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+// 
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
 
 #ifndef GNASH_SWF_CTYPE_H
 #define GNASH_SWF_CTYPE_H
 
-
 #include <locale>
 
 namespace gnash {
 
+/// Facet for SWF-compatible case conversion.
 class SWFCtype : public std::ctype<wchar_t>
 {
 public:
-
     SWFCtype(size_t refs = 0) : std::ctype<wchar_t>(refs) {}
     typedef std::ctype<wchar_t>::char_type char_type;
-
 protected:
     virtual char_type do_toupper(char_type) const;
     virtual const char_type* do_toupper(char_type* low, const char_type* high) 
const;

http://git.savannah.gnu.org/cgit//commit/?id=7c4bef5e21c5e977261109aae1e176727ae4576a


commit 7c4bef5e21c5e977261109aae1e176727ae4576a
Author: Benjamin Wolsey <address@hidden>
Date:   Tue Nov 23 17:01:53 2010 +0100

    Simplify SWCtype mapping.

diff --git a/libbase/SWFCtype.cpp b/libbase/SWFCtype.cpp
index 5835701..876cbe5 100644
--- a/libbase/SWFCtype.cpp
+++ b/libbase/SWFCtype.cpp
@@ -19,11 +19,11 @@ namespace {
 SWFCtype::char_type
 SWFCtype::do_toupper(char_type c) const
 {
-    // a-z
     if (c >= 97 && c <= 122) return c - 32;
     if (c >= 224 && c <= 246) return c - 32;
-    if (c >= 249 && c <= 254) return c - 32;
-    if (c >= 946 && c <= 961) return c - 32;
+    if (c >= 248 && c <= 254) return c - 32;
+    if (c >= 941 && c <= 943) return c - 37;
+    if (c >= 945 && c <= 961) return c - 32;
     if (c >= 963 && c <= 971) return c - 32;
     if (c >= 1072 && c <= 1103) return c - 32;
     if (c >= 1104 && c <= 1119) return c - 80;
@@ -33,18 +33,27 @@ SWFCtype::do_toupper(char_type c) const
     if (c >= 7968 && c <= 7975) return c + 8;
     if (c >= 7984 && c <= 7991) return c + 8;
     if (c >= 8000 && c <= 8005) return c + 8;
-    if (c >= 8033 && c <= 8039) return c + 8;
+    if (c >= 8032 && c <= 8039) return c + 8;
+    if (c >= 8050 && c <= 8053) return c + 86;
     if (c >= 8064 && c <= 8071) return c + 8;
     if (c >= 8080 && c <= 8087) return c + 8;
-    if (c >= 8560 && c <= 8569) return c - 16;
+    if (c >= 8096 && c <= 8103) return c + 8;
+    if (c >= 8560 && c <= 8575) return c - 16;
     if (c >= 9424 && c <= 9449) return c - 26;
     if (c >= 65345 && c <= 65370) return c - 32;
-
-    if ((c & 1)) {
+    if (!(c & 1)) {
+        if (c >= 314 && c <= 328) return c - 1;
+        if (c >= 378 && c <= 382) return c - 1;
+        if (c >= 436 && c <= 438) return c - 1;
+        if (c >= 462 && c <= 476) return c - 1;
+        if (c >= 1218 && c <= 1220) return c - 1;
+    }
+    if (c & 1) {
         if (c >= 257 && c <= 303) return c - 1;
         if (c >= 307 && c <= 311) return c - 1;
         if (c >= 331 && c <= 375) return c - 1;
         if (c >= 387 && c <= 389) return c - 1;
+        if (c >= 417 && c <= 421) return c - 1;
         if (c >= 479 && c <= 495) return c - 1;
         if (c >= 505 && c <= 543) return c - 1;
         if (c >= 547 && c <= 563) return c - 1;
@@ -54,11 +63,7 @@ SWFCtype::do_toupper(char_type c) const
         if (c >= 1233 && c <= 1269) return c - 1;
         if (c >= 7681 && c <= 7829) return c - 1;
         if (c >= 7841 && c <= 7929) return c - 1;
-    }
-    else if (!(c & 1)) {
-        if (c >= 314 && c <= 328) return c - 1;
-        if (c >= 378 && c <= 382) return c - 1;
-        if (c >= 462 && c <= 476) return c - 1;
+        if (c >= 8017 && c <= 8023) return c + 8;
     }
 
     // Search the remaining map.
@@ -85,19 +90,50 @@ SWFCtype::do_tolower(char_type c) const
     if (c >= 65 && c <= 90) return c + 32;
     if (c >= 192 && c <= 214) return c + 32;
     if (c >= 216 && c <= 222) return c + 32;
+    if (c >= 904 && c <= 906) return c + 37;
+    if (c >= 913 && c <= 929) return c + 32;
+    if (c >= 931 && c <= 939) return c + 32;
+    if (c >= 1024 && c <= 1039) return c + 80;
     if (c >= 1040 && c <= 1071) return c + 32;
+    if (c >= 1329 && c <= 1366) return c + 48;
+    if (c >= 4256 && c <= 4293) return c + 48;
+    if (c >= 7944 && c <= 7951) return c - 8;
+    if (c >= 7960 && c <= 7965) return c - 8;
+    if (c >= 7976 && c <= 7983) return c - 8;
+    if (c >= 7992 && c <= 7999) return c - 8;
+    if (c >= 8008 && c <= 8013) return c - 8;
+    if (c >= 8040 && c <= 8047) return c - 8;
+    if (c >= 8072 && c <= 8079) return c - 8;
+    if (c >= 8088 && c <= 8095) return c - 8;
+    if (c >= 8104 && c <= 8111) return c - 8;
+    if (c >= 8136 && c <= 8139) return c - 86;
+    if (c >= 8544 && c <= 8559) return c + 16;
     if (c >= 9398 && c <= 9423) return c + 26;
-
     if (c >= 65313 && c <= 65338) return c + 32;
-    
-    if ((c & 1)) {
-    }
-
     if (!(c & 1)) {
-        if (c >= 329 && c <= 374) return c + 1;
+        if (c >= 256 && c <= 302) return c + 1;
+        if (c >= 306 && c <= 310) return c + 1;
+        if (c >= 330 && c <= 374) return c + 1;
+        if (c >= 386 && c <= 388) return c + 1;
+        if (c >= 416 && c <= 420) return c + 1;
+        if (c >= 478 && c <= 494) return c + 1;
+        if (c >= 498 && c <= 500) return c + 1;
         if (c >= 504 && c <= 542) return c + 1;
         if (c >= 546 && c <= 562) return c + 1;
-        if (c >= 256 && c <= 302) return c + 1;
+        if (c >= 986 && c <= 1006) return c + 1;
+        if (c >= 1120 && c <= 1152) return c + 1;
+        if (c >= 1164 && c <= 1214) return c + 1;
+        if (c >= 1232 && c <= 1268) return c + 1;
+        if (c >= 7680 && c <= 7828) return c + 1;
+        if (c >= 7840 && c <= 7928) return c + 1;
+    }
+    if (c & 1) {
+        if (c >= 313 && c <= 327) return c + 1;
+        if (c >= 377 && c <= 381) return c + 1;
+        if (c >= 435 && c <= 437) return c + 1;
+        if (c >= 459 && c <= 475) return c + 1;
+        if (c >= 1217 && c <= 1219) return c + 1;
+        if (c >= 8025 && c <= 8031) return c - 8;
     }
 
     const CharMap& m = lowerMap();
@@ -123,136 +159,89 @@ const CharMap&
 upperMap()
 {
     static const CharMap upper = boost::assign::map_list_of
-        (181, 924)
-        (248, 216)
-        (255, 376)
-        (305, 73)
-        (383, 83)
-        (392, 391)
-        (396, 395)
-        (402, 401)
-        (405, 502)
-        (409, 408)
-        (417, 416)
-        (419, 418)
-        (421, 420)
-        (424, 423)
-        (429, 428)
-        (432, 431)
-        (436, 435)
-        (438, 437)
-        (441, 440)
-        (445, 444)
-        (447, 503)
-        (453, 452)
-        (454, 452)
-        (456, 455)
-        (457, 455)
-        (459, 458)
-        (460, 458)
-        (477, 398)
-        (498, 497)
-        (499, 497)
-        (501, 500)
-        (595, 385)
-        (596, 390)
-        (598, 393)
-        (599, 394)
-        (601, 399)
-        (603, 400)
-        (608, 403)
-        (611, 404)
-        (616, 407)
-        (617, 406)
-        (623, 412)
-        (626, 413)
-        (629, 415)
-        (640, 422)
-        (643, 425)
-        (648, 430)
-        (650, 433)
-        (651, 434)
-        (658, 439)
-        (837, 921)
-        (940, 902)
-        (941, 904)
-        (942, 905)
-        (943, 906)
-        (945, 913)
-        (962, 931)
-        (972, 908)
-        (973, 910)
-        (974, 911)
-        (976, 914)
-        (977, 920)
-        (981, 934)
-        (982, 928)
-        (1008, 922)
-        (1009, 929)
-        (1010, 931)
-        (1013, 917)
-        (1218, 1217)
-        (1220, 1219)
-        (1224, 1223)
-        (1228, 1227)
-        (1273, 1272)
-        (7835, 7776)
-        (8017, 8025)
-        (8019, 8027)
-        (8021, 8029)
-        (8023, 8031)
-        (8032, 8040)
-        (8048, 8122)
-        (8049, 8123)
-        (8050, 8136)
-        (8051, 8137)
-        (8052, 8138)
-        (8053, 8139)
-        (8054, 8154)
-        (8055, 8155)
-        (8056, 8184)
-        (8057, 8185)
-        (8058, 8170)
-        (8059, 8171)
-        (8060, 8186)
-        (8061, 8187)
-        (8096, 8104)
-        (8097, 8105)
-        (8098, 8106)
-        (8099, 8107)
-        (8100, 8108)
-        (8101, 8109)
-        (8102, 8110)
-        (8103, 8111)
-        (8112, 8120)
-        (8113, 8121)
-        (8115, 8124)
-        (8126, 921)
-        (8131, 8140)
-        (8144, 8152)
-        (8145, 8153)
-        (8160, 8168)
-        (8161, 8169)
-        (8165, 8172)
         (8179, 8188)
-
-        (8560, 8544)
-        (8561, 8545)
-        (8562, 8546)
-        (8563, 8547)
-        (8564, 8548)
-        (8565, 8549)
-        (8566, 8550)
-        (8567, 8551)
-        (8568, 8552)
-        (8569, 8553)
-
-        (8570, 8554)
-        (8571, 8555)
-        (8572, 8556)
-        (8573, 8557)
-        (8574, 8558)
-        (8575, 8559);
+        (8165, 8172)
+        (8161, 8169)
+        (8160, 8168)
+        (8145, 8153)
+        (8144, 8152)
+        (8131, 8140)
+        (8126, 921)
+        (8115, 8124)
+        (8113, 8121)
+        (8112, 8120)
+        (8061, 8187)
+        (8060, 8186)
+        (8059, 8171)
+        (8058, 8170)
+        (8057, 8185)
+        (8056, 8184)
+        (8055, 8155)
+        (8054, 8154)
+        (8049, 8123)
+        (8048, 8122)
+        (7835, 7776)
+        (1273, 1272)
+        (1228, 1227)
+        (1224, 1223)
+        (1013, 917)
+        (1010, 931)
+        (1009, 929)
+        (1008, 922)
+        (982, 928)
+        (981, 934)
+        (977, 920)
+        (976, 914)
+        (974, 911)
+        (973, 910)
+        (972, 908)
+        (962, 931)
+        (940, 902)
+        (837, 921)
+        (658, 439)
+        (651, 434)
+        (650, 433)
+        (648, 430)
+        (643, 425)
+        (640, 422)
+        (629, 415)
+        (626, 413)
+        (623, 412)
+        (617, 406)
+        (616, 407)
+        (611, 404)
+        (608, 403)
+        (603, 400)
+        (601, 399)
+        (599, 394)
+        (598, 393)
+        (596, 390)
+        (595, 385)
+        (501, 500)
+        (499, 497)
+        (498, 497)
+        (477, 398)
+        (460, 458)
+        (459, 458)
+        (457, 455)
+        (456, 455)
+        (454, 452)
+        (453, 452)
+        (447, 503)
+        (445, 444)
+        (441, 440)
+        (432, 431)
+        (429, 428)
+        (424, 423)
+        (409, 408)
+        (405, 502)
+        (402, 401)
+        (396, 395)
+        (392, 391)
+        (383, 83)
+        (305, 73)
+        (255, 376)
+        (181, 924);
 
     return upper;
 }
@@ -261,525 +250,76 @@ const CharMap&
 lowerMap()
 {
     static const CharMap lower = boost::assign::map_list_of
-        (304, 105)
-        (306, 307)
-        (308, 309)
-        (310, 311)
-        (313, 314)
-        (315, 316)
-        (317, 318)
-        (319, 320)
-        (321, 322)
-        (323, 324)
-        (325, 326)
-        (327, 328)
-        (376, 255)
-        (377, 378)
-        (379, 380)
-        (381, 382)
-        (385, 595)
-        (386, 387)
-        (388, 389)
-        (390, 596)
-        (391, 392)
-        (393, 598)
-        (394, 599)
-        (395, 396)
-        (398, 477)
-        (399, 601)
-        (400, 603)
-        (401, 402)
-        (403, 608)
-        (404, 611)
-        (406, 617)
-        (407, 616)
-        (408, 409)
-        (412, 623)
-        (413, 626)
-        (415, 629)
-        (416, 417)
-        (418, 419)
-        (420, 421)
-        (422, 640)
-        (423, 424)
-        (425, 643)
-        (428, 429)
-        (430, 648)
-        (431, 432)
-        (433, 650)
-        (434, 651)
-        (435, 436)
-        (437, 438)
-        (439, 658)
-        (440, 441)
-        (444, 445)
-        (452, 454)
-        (453, 454)
-        (455, 457)
-        (456, 457)
-        (458, 460)
-        (459, 460)
-        (461, 462)
-        (463, 464)
-        (465, 466)
-        (467, 468)
-        (469, 470)
-        (471, 472)
-        (473, 474)
-        (475, 476)
-        (478, 479)
-        (480, 481)
-        (482, 483)
-        (484, 485)
-        (486, 487)
-        (488, 489)
-        (490, 491)
-        (492, 493)
-        (494, 495)
-        (497, 499)
-        (498, 499)
-        (500, 501)
-        (502, 405)
-        (503, 447)
-        (902, 940)
-        (904, 941)
-        (905, 942)
-        (906, 943)
-        (908, 972)
-        (910, 973)
-        (911, 974)
-        (913, 945)
-        (914, 946)
-        (915, 947)
-        (916, 948)
-        (917, 949)
-        (918, 950)
-        (919, 951)
-        (920, 952)
-        (921, 953)
-        (922, 954)
-        (923, 955)
-        (924, 956)
-        (925, 957)
-        (926, 958)
-        (927, 959)
-        (928, 960)
-        (929, 961)
-        (931, 963)
-        (932, 964)
-        (933, 965)
-        (934, 966)
-        (935, 967)
-        (936, 968)
-        (937, 969)
-        (938, 970)
-        (939, 971)
-        (986, 987)
-        (988, 989)
-        (990, 991)
-        (992, 993)
-        (994, 995)
-        (996, 997)
-        (998, 999)
-        (1000, 1001)
-        (1002, 1003)
-        (1004, 1005)
-        (1006, 1007)
-        (1012, 952)
-        (1024, 1104)
-        (1025, 1105)
-        (1026, 1106)
-        (1027, 1107)
-        (1028, 1108)
-        (1029, 1109)
-        (1030, 1110)
-        (1031, 1111)
-        (1032, 1112)
-        (1033, 1113)
-        (1034, 1114)
-        (1035, 1115)
-        (1036, 1116)
-        (1037, 1117)
-        (1038, 1118)
-        (1039, 1119)
-        (1120, 1121)
-        (1122, 1123)
-        (1124, 1125)
-        (1126, 1127)
-        (1128, 1129)
-        (1130, 1131)
-        (1132, 1133)
-        (1134, 1135)
-        (1136, 1137)
-        (1138, 1139)
-        (1140, 1141)
-        (1142, 1143)
-        (1144, 1145)
-        (1146, 1147)
-        (1148, 1149)
-        (1150, 1151)
-        (1152, 1153)
-        (1164, 1165)
-        (1166, 1167)
-        (1168, 1169)
-        (1170, 1171)
-        (1172, 1173)
-        (1174, 1175)
-        (1176, 1177)
-        (1178, 1179)
-        (1180, 1181)
-        (1182, 1183)
-        (1184, 1185)
-        (1186, 1187)
-        (1188, 1189)
-        (1190, 1191)
-        (1192, 1193)
-        (1194, 1195)
-        (1196, 1197)
-        (1198, 1199)
-        (1200, 1201)
-        (1202, 1203)
-        (1204, 1205)
-        (1206, 1207)
-        (1208, 1209)
-        (1210, 1211)
-        (1212, 1213)
-        (1214, 1215)
-        (1217, 1218)
-        (1219, 1220)
-        (1223, 1224)
-        (1227, 1228)
-        (1232, 1233)
-        (1234, 1235)
-        (1236, 1237)
-        (1238, 1239)
-        (1240, 1241)
-        (1242, 1243)
-        (1244, 1245)
-        (1246, 1247)
-        (1248, 1249)
-        (1250, 1251)
-        (1252, 1253)
-        (1254, 1255)
-        (1256, 1257)
-        (1258, 1259)
-        (1260, 1261)
-        (1262, 1263)
-        (1264, 1265)
-        (1266, 1267)
-        (1268, 1269)
-        (1272, 1273)
-        (1329, 1377)
-        (1330, 1378)
-        (1331, 1379)
-        (1332, 1380)
-        (1333, 1381)
-        (1334, 1382)
-        (1335, 1383)
-        (1336, 1384)
-        (1337, 1385)
-        (1338, 1386)
-        (1339, 1387)
-        (1340, 1388)
-        (1341, 1389)
-        (1342, 1390)
-        (1343, 1391)
-        (1344, 1392)
-        (1345, 1393)
-        (1346, 1394)
-        (1347, 1395)
-        (1348, 1396)
-        (1349, 1397)
-        (1350, 1398)
-        (1351, 1399)
-        (1352, 1400)
-        (1353, 1401)
-        (1354, 1402)
-        (1355, 1403)
-        (1356, 1404)
-        (1357, 1405)
-        (1358, 1406)
-        (1359, 1407)
-        (1360, 1408)
-        (1361, 1409)
-        (1362, 1410)
-        (1363, 1411)
-        (1364, 1412)
-        (1365, 1413)
-        (1366, 1414)
-        (4256, 4304)
-        (4257, 4305)
-        (4258, 4306)
-        (4259, 4307)
-        (4260, 4308)
-        (4261, 4309)
-        (4262, 4310)
-        (4263, 4311)
-        (4264, 4312)
-        (4265, 4313)
-        (4266, 4314)
-        (4267, 4315)
-        (4268, 4316)
-        (4269, 4317)
-        (4270, 4318)
-        (4271, 4319)
-        (4272, 4320)
-        (4273, 4321)
-        (4274, 4322)
-        (4275, 4323)
-        (4276, 4324)
-        (4277, 4325)
-        (4278, 4326)
-        (4279, 4327)
-        (4280, 4328)
-        (4281, 4329)
-        (4282, 4330)
-        (4283, 4331)
-        (4284, 4332)
-        (4285, 4333)
-        (4286, 4334)
-        (4287, 4335)
-        (4288, 4336)
-        (4289, 4337)
-        (4290, 4338)
-        (4291, 4339)
-        (4292, 4340)
-        (4293, 4341)
-        (7680, 7681)
-        (7682, 7683)
-        (7684, 7685)
-        (7686, 7687)
-        (7688, 7689)
-        (7690, 7691)
-        (7692, 7693)
-        (7694, 7695)
-        (7696, 7697)
-        (7698, 7699)
-        (7700, 7701)
-        (7702, 7703)
-        (7704, 7705)
-        (7706, 7707)
-        (7708, 7709)
-        (7710, 7711)
-        (7712, 7713)
-        (7714, 7715)
-        (7716, 7717)
-        (7718, 7719)
-        (7720, 7721)
-        (7722, 7723)
-        (7724, 7725)
-        (7726, 7727)
-        (7728, 7729)
-        (7730, 7731)
-        (7732, 7733)
-        (7734, 7735)
-        (7736, 7737)
-        (7738, 7739)
-        (7740, 7741)
-        (7742, 7743)
-        (7744, 7745)
-        (7746, 7747)
-        (7748, 7749)
-        (7750, 7751)
-        (7752, 7753)
-        (7754, 7755)
-        (7756, 7757)
-        (7758, 7759)
-        (7760, 7761)
-        (7762, 7763)
-        (7764, 7765)
-        (7766, 7767)
-        (7768, 7769)
-        (7770, 7771)
-        (7772, 7773)
-        (7774, 7775)
-        (7776, 7777)
-        (7778, 7779)
-        (7780, 7781)
-        (7782, 7783)
-        (7784, 7785)
-        (7786, 7787)
-        (7788, 7789)
-        (7790, 7791)
-        (7792, 7793)
-        (7794, 7795)
-        (7796, 7797)
-        (7798, 7799)
-        (7800, 7801)
-        (7802, 7803)
-        (7804, 7805)
-        (7806, 7807)
-        (7808, 7809)
-        (7810, 7811)
-        (7812, 7813)
-        (7814, 7815)
-        (7816, 7817)
-        (7818, 7819)
-        (7820, 7821)
-        (7822, 7823)
-        (7824, 7825)
-        (7826, 7827)
-        (7828, 7829)
-        (7840, 7841)
-        (7842, 7843)
-        (7844, 7845)
-        (7846, 7847)
-        (7848, 7849)
-        (7850, 7851)
-        (7852, 7853)
-        (7854, 7855)
-        (7856, 7857)
-        (7858, 7859)
-        (7860, 7861)
-        (7862, 7863)
-        (7864, 7865)
-        (7866, 7867)
-        (7868, 7869)
-        (7870, 7871)
-        (7872, 7873)
-        (7874, 7875)
-        (7876, 7877)
-        (7878, 7879)
-        (7880, 7881)
-        (7882, 7883)
-        (7884, 7885)
-        (7886, 7887)
-        (7888, 7889)
-        (7890, 7891)
-        (7892, 7893)
-        (7894, 7895)
-        (7896, 7897)
-        (7898, 7899)
-        (7900, 7901)
-        (7902, 7903)
-        (7904, 7905)
-        (7906, 7907)
-        (7908, 7909)
-        (7910, 7911)
-        (7912, 7913)
-        (7914, 7915)
-        (7916, 7917)
-        (7918, 7919)
-        (7920, 7921)
-        (7922, 7923)
-        (7924, 7925)
-        (7926, 7927)
-        (7928, 7929)
-        (7944, 7936)
-        (7945, 7937)
-        (7946, 7938)
-        (7947, 7939)
-        (7948, 7940)
-        (7949, 7941)
-        (7950, 7942)
-        (7951, 7943)
-        (7960, 7952)
-        (7961, 7953)
-        (7962, 7954)
-        (7963, 7955)
-        (7964, 7956)
-        (7965, 7957)
-        (7976, 7968)
-        (7977, 7969)
-        (7978, 7970)
-        (7979, 7971)
-        (7980, 7972)
-        (7981, 7973)
-        (7982, 7974)
-        (7983, 7975)
-        (7992, 7984)
-        (7993, 7985)
-        (7994, 7986)
-        (7995, 7987)
-        (7996, 7988)
-        (7997, 7989)
-        (7998, 7990)
-        (7999, 7991)
-        (8008, 8000)
-        (8009, 8001)
-        (8010, 8002)
-        (8011, 8003)
-        (8012, 8004)
-        (8013, 8005)
-        (8025, 8017)
-        (8027, 8019)
-        (8029, 8021)
-        (8031, 8023)
-        (8040, 8032)
-        (8041, 8033)
-        (8042, 8034)
-        (8043, 8035)
-        (8044, 8036)
-        (8045, 8037)
-        (8046, 8038)
-        (8047, 8039)
-        (8072, 8064)
-        (8073, 8065)
-        (8074, 8066)
-        (8075, 8067)
-        (8076, 8068)
-        (8077, 8069)
-        (8078, 8070)
-        (8079, 8071)
-        (8088, 8080)
-        (8089, 8081)
-        (8090, 8082)
-        (8091, 8083)
-        (8092, 8084)
-        (8093, 8085)
-        (8094, 8086)
-        (8095, 8087)
-        (8104, 8096)
-        (8105, 8097)
-        (8106, 8098)
-        (8107, 8099)
-        (8108, 8100)
-        (8109, 8101)
-        (8110, 8102)
-        (8111, 8103)
-        (8120, 8112)
-        (8121, 8113)
-        (8122, 8048)
-        (8123, 8049)
-        (8124, 8115)
-        (8136, 8050)
-        (8137, 8051)
-        (8138, 8052)
-        (8139, 8053)
-        (8140, 8131)
-        (8152, 8144)
-        (8153, 8145)
-        (8154, 8054)
-        (8155, 8055)
-        (8168, 8160)
-        (8169, 8161)
-        (8170, 8058)
-        (8171, 8059)
-        (8172, 8165)
-        (8184, 8056)
-        (8185, 8057)
-        (8186, 8060)
-        (8187, 8061)
-        (8188, 8179)
-        (8486, 969)
-        (8490, 107)
         (8491, 229)
-        (8544, 8560)
-        (8545, 8561)
-        (8546, 8562)
-        (8547, 8563)
-        (8548, 8564)
-        (8549, 8565)
-        (8550, 8566)
-        (8551, 8567)
-        (8552, 8568)
-        (8553, 8569)
-        (8554, 8570)
-        (8555, 8571)
-        (8556, 8572)
-        (8557, 8573)
-        (8558, 8574)
-        (8559, 8575);
+        (8490, 107)
+        (8486, 969)
+        (8188, 8179)
+        (8187, 8061)
+        (8186, 8060)
+        (8185, 8057)
+        (8184, 8056)
+        (8172, 8165)
+        (8171, 8059)
+        (8170, 8058)
+        (8169, 8161)
+        (8168, 8160)
+        (8155, 8055)
+        (8154, 8054)
+        (8153, 8145)
+        (8152, 8144)
+        (8140, 8131)
+        (8124, 8115)
+        (8123, 8049)
+        (8122, 8048)
+        (8121, 8113)
+        (8120, 8112)
+        (1272, 1273)
+        (1227, 1228)
+        (1223, 1224)
+        (1012, 952)
+        (911, 974)
+        (910, 973)
+        (908, 972)
+        (902, 940)
+        (503, 447)
+        (502, 405)
+        (497, 499)
+        (458, 460)
+        (456, 457)
+        (455, 457)
+        (453, 454)
+        (452, 454)
+        (444, 445)
+        (440, 441)
+        (439, 658)
+        (434, 651)
+        (433, 650)
+        (431, 432)
+        (430, 648)
+        (428, 429)
+        (425, 643)
+        (423, 424)
+        (422, 640)
+        (415, 629)
+        (413, 626)
+        (412, 623)
+        (408, 409)
+        (407, 616)
+        (406, 617)
+        (404, 611)
+        (403, 608)
+        (401, 402)
+        (400, 603)
+        (399, 601)
+        (398, 477)
+        (395, 396)
+        (394, 599)
+        (393, 598)
+        (391, 392)
+        (390, 596)
+        (385, 595)
+        (376, 255)
+        (304, 105);
 
     return lower;
 }

http://git.savannah.gnu.org/cgit//commit/?id=03d792c09d6c5635403329d8cc14aef023cd208b


commit 03d792c09d6c5635403329d8cc14aef023cd208b
Author: Benjamin Wolsey <address@hidden>
Date:   Tue Nov 23 15:54:13 2010 +0100

    Don't run tests for version 5.

diff --git a/testsuite/actionscript.all/caseconv.as 
b/testsuite/actionscript.all/caseconv.as
index 1a8b28b..63c5994 100644
--- a/testsuite/actionscript.all/caseconv.as
+++ b/testsuite/actionscript.all/caseconv.as
@@ -3,6 +3,10 @@
 
 #include "check.as"
 
+#if OUTPUT_VERSION < 6
+totals(0);
+#else
+
 upperToLower = [];
 lowerToUpper = [];
 
@@ -1482,3 +1486,5 @@ for (i = 0; i < 65536; ++i) {
 
 
 totals();
+
+#endif

http://git.savannah.gnu.org/cgit//commit/?id=93b2df07a908645f0718852cf17cd37ae93f1064


commit 93b2df07a908645f0718852cf17cd37ae93f1064
Author: Benjamin Wolsey <address@hidden>
Date:   Tue Nov 23 14:43:54 2010 +0100

    Add a ctype facet for Flash case conversion.

diff --git a/libbase/Makefile.am b/libbase/Makefile.am
index 44ec61a..9428602 100644
--- a/libbase/Makefile.am
+++ b/libbase/Makefile.am
@@ -64,6 +64,7 @@ libgnashbase_la_SOURCES = \
        extension.cpp \
        $(MALLOC) \
        GnashImage.cpp \
+       SWFCtype.cpp \
        GnashImageJpeg.cpp \
        GnashFileUtilities.cpp \
        AMF.cpp \
@@ -221,6 +222,7 @@ EXTENSIONS_API = \
        CachedBitmap.h \
        GnashImage.h \
        ImageIterators.h \
+       SWFCtype.h \
        $(NULL)
 
 instdir = $(includedir)/gnash
diff --git a/libbase/SWFCtype.cpp b/libbase/SWFCtype.cpp
new file mode 100644
index 0000000..5835701
--- /dev/null
+++ b/libbase/SWFCtype.cpp
@@ -0,0 +1,788 @@
+
+#include "SWFCtype.h"
+
+#include <locale>
+#include <boost/assign/list_of.hpp>
+#include <map>
+#include <boost/cstdint.hpp>
+
+#include "log.h"
+
+namespace gnash {
+
+namespace {
+    typedef std::map<boost::uint16_t, boost::uint16_t> CharMap;
+    const CharMap& lowerMap();
+    const CharMap& upperMap();
+}
+
+SWFCtype::char_type
+SWFCtype::do_toupper(char_type c) const
+{
+    // a-z
+    if (c >= 97 && c <= 122) return c - 32;
+    if (c >= 224 && c <= 246) return c - 32;
+    if (c >= 249 && c <= 254) return c - 32;
+    if (c >= 946 && c <= 961) return c - 32;
+    if (c >= 963 && c <= 971) return c - 32;
+    if (c >= 1072 && c <= 1103) return c - 32;
+    if (c >= 1104 && c <= 1119) return c - 80;
+    if (c >= 1377 && c <= 1414) return c - 48;
+    if (c >= 7936 && c <= 7943) return c + 8;
+    if (c >= 7952 && c <= 7957) return c + 8;
+    if (c >= 7968 && c <= 7975) return c + 8;
+    if (c >= 7984 && c <= 7991) return c + 8;
+    if (c >= 8000 && c <= 8005) return c + 8;
+    if (c >= 8033 && c <= 8039) return c + 8;
+    if (c >= 8064 && c <= 8071) return c + 8;
+    if (c >= 8080 && c <= 8087) return c + 8;
+    if (c >= 8560 && c <= 8569) return c - 16;
+    if (c >= 9424 && c <= 9449) return c - 26;
+    if (c >= 65345 && c <= 65370) return c - 32;
+
+    if ((c & 1)) {
+        if (c >= 257 && c <= 303) return c - 1;
+        if (c >= 307 && c <= 311) return c - 1;
+        if (c >= 331 && c <= 375) return c - 1;
+        if (c >= 387 && c <= 389) return c - 1;
+        if (c >= 479 && c <= 495) return c - 1;
+        if (c >= 505 && c <= 543) return c - 1;
+        if (c >= 547 && c <= 563) return c - 1;
+        if (c >= 987 && c <= 1007) return c - 1;
+        if (c >= 1121 && c <= 1153) return c - 1;
+        if (c >= 1165 && c <= 1215) return c - 1;
+        if (c >= 1233 && c <= 1269) return c - 1;
+        if (c >= 7681 && c <= 7829) return c - 1;
+        if (c >= 7841 && c <= 7929) return c - 1;
+    }
+    else if (!(c & 1)) {
+        if (c >= 314 && c <= 328) return c - 1;
+        if (c >= 378 && c <= 382) return c - 1;
+        if (c >= 462 && c <= 476) return c - 1;
+    }
+
+    // Search the remaining map.
+    const CharMap& m = upperMap();
+    const CharMap::const_iterator it = m.find(c);
+    if (it == m.end()) return c;
+    return it->second;
+}
+
+const SWFCtype::char_type*
+SWFCtype::do_toupper(char_type* low, const char_type* high) const
+{
+    char_type* pos = low;
+    while (pos != high) {
+        *pos = do_toupper(*pos);
+        ++pos;
+    }
+    return low;
+}
+
+SWFCtype::char_type
+SWFCtype::do_tolower(char_type c) const
+{
+    if (c >= 65 && c <= 90) return c + 32;
+    if (c >= 192 && c <= 214) return c + 32;
+    if (c >= 216 && c <= 222) return c + 32;
+    if (c >= 1040 && c <= 1071) return c + 32;
+    if (c >= 9398 && c <= 9423) return c + 26;
+
+    if (c >= 65313 && c <= 65338) return c + 32;
+    
+    if ((c & 1)) {
+    }
+
+    if (!(c & 1)) {
+        if (c >= 329 && c <= 374) return c + 1;
+        if (c >= 504 && c <= 542) return c + 1;
+        if (c >= 546 && c <= 562) return c + 1;
+        if (c >= 256 && c <= 302) return c + 1;
+    }
+
+    const CharMap& m = lowerMap();
+    const CharMap::const_iterator it = m.find(c);
+    if (it == m.end()) return c;
+    return it->second;
+}
+
+const SWFCtype::char_type*
+SWFCtype::do_tolower(char_type* low, const char_type* high) const
+{
+    char_type* pos = low;
+    while (pos != high) {
+        *pos = do_tolower(*pos);
+        ++pos;
+    }
+    return low;
+}
+
+namespace {
+
+const CharMap&
+upperMap()
+{
+    static const CharMap upper = boost::assign::map_list_of
+        (181, 924)
+        (248, 216)
+        (255, 376)
+        (305, 73)
+        (383, 83)
+        (392, 391)
+        (396, 395)
+        (402, 401)
+        (405, 502)
+        (409, 408)
+        (417, 416)
+        (419, 418)
+        (421, 420)
+        (424, 423)
+        (429, 428)
+        (432, 431)
+        (436, 435)
+        (438, 437)
+        (441, 440)
+        (445, 444)
+        (447, 503)
+        (453, 452)
+        (454, 452)
+        (456, 455)
+        (457, 455)
+        (459, 458)
+        (460, 458)
+        (477, 398)
+        (498, 497)
+        (499, 497)
+        (501, 500)
+        (595, 385)
+        (596, 390)
+        (598, 393)
+        (599, 394)
+        (601, 399)
+        (603, 400)
+        (608, 403)
+        (611, 404)
+        (616, 407)
+        (617, 406)
+        (623, 412)
+        (626, 413)
+        (629, 415)
+        (640, 422)
+        (643, 425)
+        (648, 430)
+        (650, 433)
+        (651, 434)
+        (658, 439)
+        (837, 921)
+        (940, 902)
+        (941, 904)
+        (942, 905)
+        (943, 906)
+        (945, 913)
+        (962, 931)
+        (972, 908)
+        (973, 910)
+        (974, 911)
+        (976, 914)
+        (977, 920)
+        (981, 934)
+        (982, 928)
+        (1008, 922)
+        (1009, 929)
+        (1010, 931)
+        (1013, 917)
+        (1218, 1217)
+        (1220, 1219)
+        (1224, 1223)
+        (1228, 1227)
+        (1273, 1272)
+        (7835, 7776)
+        (8017, 8025)
+        (8019, 8027)
+        (8021, 8029)
+        (8023, 8031)
+        (8032, 8040)
+        (8048, 8122)
+        (8049, 8123)
+        (8050, 8136)
+        (8051, 8137)
+        (8052, 8138)
+        (8053, 8139)
+        (8054, 8154)
+        (8055, 8155)
+        (8056, 8184)
+        (8057, 8185)
+        (8058, 8170)
+        (8059, 8171)
+        (8060, 8186)
+        (8061, 8187)
+        (8096, 8104)
+        (8097, 8105)
+        (8098, 8106)
+        (8099, 8107)
+        (8100, 8108)
+        (8101, 8109)
+        (8102, 8110)
+        (8103, 8111)
+        (8112, 8120)
+        (8113, 8121)
+        (8115, 8124)
+        (8126, 921)
+        (8131, 8140)
+        (8144, 8152)
+        (8145, 8153)
+        (8160, 8168)
+        (8161, 8169)
+        (8165, 8172)
+        (8179, 8188)
+
+        (8560, 8544)
+        (8561, 8545)
+        (8562, 8546)
+        (8563, 8547)
+        (8564, 8548)
+        (8565, 8549)
+        (8566, 8550)
+        (8567, 8551)
+        (8568, 8552)
+        (8569, 8553)
+
+        (8570, 8554)
+        (8571, 8555)
+        (8572, 8556)
+        (8573, 8557)
+        (8574, 8558)
+        (8575, 8559);
+
+    return upper;
+}
+
+const CharMap&
+lowerMap()
+{
+    static const CharMap lower = boost::assign::map_list_of
+        (304, 105)
+        (306, 307)
+        (308, 309)
+        (310, 311)
+        (313, 314)
+        (315, 316)
+        (317, 318)
+        (319, 320)
+        (321, 322)
+        (323, 324)
+        (325, 326)
+        (327, 328)
+        (376, 255)
+        (377, 378)
+        (379, 380)
+        (381, 382)
+        (385, 595)
+        (386, 387)
+        (388, 389)
+        (390, 596)
+        (391, 392)
+        (393, 598)
+        (394, 599)
+        (395, 396)
+        (398, 477)
+        (399, 601)
+        (400, 603)
+        (401, 402)
+        (403, 608)
+        (404, 611)
+        (406, 617)
+        (407, 616)
+        (408, 409)
+        (412, 623)
+        (413, 626)
+        (415, 629)
+        (416, 417)
+        (418, 419)
+        (420, 421)
+        (422, 640)
+        (423, 424)
+        (425, 643)
+        (428, 429)
+        (430, 648)
+        (431, 432)
+        (433, 650)
+        (434, 651)
+        (435, 436)
+        (437, 438)
+        (439, 658)
+        (440, 441)
+        (444, 445)
+        (452, 454)
+        (453, 454)
+        (455, 457)
+        (456, 457)
+        (458, 460)
+        (459, 460)
+        (461, 462)
+        (463, 464)
+        (465, 466)
+        (467, 468)
+        (469, 470)
+        (471, 472)
+        (473, 474)
+        (475, 476)
+        (478, 479)
+        (480, 481)
+        (482, 483)
+        (484, 485)
+        (486, 487)
+        (488, 489)
+        (490, 491)
+        (492, 493)
+        (494, 495)
+        (497, 499)
+        (498, 499)
+        (500, 501)
+        (502, 405)
+        (503, 447)
+        (902, 940)
+        (904, 941)
+        (905, 942)
+        (906, 943)
+        (908, 972)
+        (910, 973)
+        (911, 974)
+        (913, 945)
+        (914, 946)
+        (915, 947)
+        (916, 948)
+        (917, 949)
+        (918, 950)
+        (919, 951)
+        (920, 952)
+        (921, 953)
+        (922, 954)
+        (923, 955)
+        (924, 956)
+        (925, 957)
+        (926, 958)
+        (927, 959)
+        (928, 960)
+        (929, 961)
+        (931, 963)
+        (932, 964)
+        (933, 965)
+        (934, 966)
+        (935, 967)
+        (936, 968)
+        (937, 969)
+        (938, 970)
+        (939, 971)
+        (986, 987)
+        (988, 989)
+        (990, 991)
+        (992, 993)
+        (994, 995)
+        (996, 997)
+        (998, 999)
+        (1000, 1001)
+        (1002, 1003)
+        (1004, 1005)
+        (1006, 1007)
+        (1012, 952)
+        (1024, 1104)
+        (1025, 1105)
+        (1026, 1106)
+        (1027, 1107)
+        (1028, 1108)
+        (1029, 1109)
+        (1030, 1110)
+        (1031, 1111)
+        (1032, 1112)
+        (1033, 1113)
+        (1034, 1114)
+        (1035, 1115)
+        (1036, 1116)
+        (1037, 1117)
+        (1038, 1118)
+        (1039, 1119)
+        (1120, 1121)
+        (1122, 1123)
+        (1124, 1125)
+        (1126, 1127)
+        (1128, 1129)
+        (1130, 1131)
+        (1132, 1133)
+        (1134, 1135)
+        (1136, 1137)
+        (1138, 1139)
+        (1140, 1141)
+        (1142, 1143)
+        (1144, 1145)
+        (1146, 1147)
+        (1148, 1149)
+        (1150, 1151)
+        (1152, 1153)
+        (1164, 1165)
+        (1166, 1167)
+        (1168, 1169)
+        (1170, 1171)
+        (1172, 1173)
+        (1174, 1175)
+        (1176, 1177)
+        (1178, 1179)
+        (1180, 1181)
+        (1182, 1183)
+        (1184, 1185)
+        (1186, 1187)
+        (1188, 1189)
+        (1190, 1191)
+        (1192, 1193)
+        (1194, 1195)
+        (1196, 1197)
+        (1198, 1199)
+        (1200, 1201)
+        (1202, 1203)
+        (1204, 1205)
+        (1206, 1207)
+        (1208, 1209)
+        (1210, 1211)
+        (1212, 1213)
+        (1214, 1215)
+        (1217, 1218)
+        (1219, 1220)
+        (1223, 1224)
+        (1227, 1228)
+        (1232, 1233)
+        (1234, 1235)
+        (1236, 1237)
+        (1238, 1239)
+        (1240, 1241)
+        (1242, 1243)
+        (1244, 1245)
+        (1246, 1247)
+        (1248, 1249)
+        (1250, 1251)
+        (1252, 1253)
+        (1254, 1255)
+        (1256, 1257)
+        (1258, 1259)
+        (1260, 1261)
+        (1262, 1263)
+        (1264, 1265)
+        (1266, 1267)
+        (1268, 1269)
+        (1272, 1273)
+        (1329, 1377)
+        (1330, 1378)
+        (1331, 1379)
+        (1332, 1380)
+        (1333, 1381)
+        (1334, 1382)
+        (1335, 1383)
+        (1336, 1384)
+        (1337, 1385)
+        (1338, 1386)
+        (1339, 1387)
+        (1340, 1388)
+        (1341, 1389)
+        (1342, 1390)
+        (1343, 1391)
+        (1344, 1392)
+        (1345, 1393)
+        (1346, 1394)
+        (1347, 1395)
+        (1348, 1396)
+        (1349, 1397)
+        (1350, 1398)
+        (1351, 1399)
+        (1352, 1400)
+        (1353, 1401)
+        (1354, 1402)
+        (1355, 1403)
+        (1356, 1404)
+        (1357, 1405)
+        (1358, 1406)
+        (1359, 1407)
+        (1360, 1408)
+        (1361, 1409)
+        (1362, 1410)
+        (1363, 1411)
+        (1364, 1412)
+        (1365, 1413)
+        (1366, 1414)
+        (4256, 4304)
+        (4257, 4305)
+        (4258, 4306)
+        (4259, 4307)
+        (4260, 4308)
+        (4261, 4309)
+        (4262, 4310)
+        (4263, 4311)
+        (4264, 4312)
+        (4265, 4313)
+        (4266, 4314)
+        (4267, 4315)
+        (4268, 4316)
+        (4269, 4317)
+        (4270, 4318)
+        (4271, 4319)
+        (4272, 4320)
+        (4273, 4321)
+        (4274, 4322)
+        (4275, 4323)
+        (4276, 4324)
+        (4277, 4325)
+        (4278, 4326)
+        (4279, 4327)
+        (4280, 4328)
+        (4281, 4329)
+        (4282, 4330)
+        (4283, 4331)
+        (4284, 4332)
+        (4285, 4333)
+        (4286, 4334)
+        (4287, 4335)
+        (4288, 4336)
+        (4289, 4337)
+        (4290, 4338)
+        (4291, 4339)
+        (4292, 4340)
+        (4293, 4341)
+        (7680, 7681)
+        (7682, 7683)
+        (7684, 7685)
+        (7686, 7687)
+        (7688, 7689)
+        (7690, 7691)
+        (7692, 7693)
+        (7694, 7695)
+        (7696, 7697)
+        (7698, 7699)
+        (7700, 7701)
+        (7702, 7703)
+        (7704, 7705)
+        (7706, 7707)
+        (7708, 7709)
+        (7710, 7711)
+        (7712, 7713)
+        (7714, 7715)
+        (7716, 7717)
+        (7718, 7719)
+        (7720, 7721)
+        (7722, 7723)
+        (7724, 7725)
+        (7726, 7727)
+        (7728, 7729)
+        (7730, 7731)
+        (7732, 7733)
+        (7734, 7735)
+        (7736, 7737)
+        (7738, 7739)
+        (7740, 7741)
+        (7742, 7743)
+        (7744, 7745)
+        (7746, 7747)
+        (7748, 7749)
+        (7750, 7751)
+        (7752, 7753)
+        (7754, 7755)
+        (7756, 7757)
+        (7758, 7759)
+        (7760, 7761)
+        (7762, 7763)
+        (7764, 7765)
+        (7766, 7767)
+        (7768, 7769)
+        (7770, 7771)
+        (7772, 7773)
+        (7774, 7775)
+        (7776, 7777)
+        (7778, 7779)
+        (7780, 7781)
+        (7782, 7783)
+        (7784, 7785)
+        (7786, 7787)
+        (7788, 7789)
+        (7790, 7791)
+        (7792, 7793)
+        (7794, 7795)
+        (7796, 7797)
+        (7798, 7799)
+        (7800, 7801)
+        (7802, 7803)
+        (7804, 7805)
+        (7806, 7807)
+        (7808, 7809)
+        (7810, 7811)
+        (7812, 7813)
+        (7814, 7815)
+        (7816, 7817)
+        (7818, 7819)
+        (7820, 7821)
+        (7822, 7823)
+        (7824, 7825)
+        (7826, 7827)
+        (7828, 7829)
+        (7840, 7841)
+        (7842, 7843)
+        (7844, 7845)
+        (7846, 7847)
+        (7848, 7849)
+        (7850, 7851)
+        (7852, 7853)
+        (7854, 7855)
+        (7856, 7857)
+        (7858, 7859)
+        (7860, 7861)
+        (7862, 7863)
+        (7864, 7865)
+        (7866, 7867)
+        (7868, 7869)
+        (7870, 7871)
+        (7872, 7873)
+        (7874, 7875)
+        (7876, 7877)
+        (7878, 7879)
+        (7880, 7881)
+        (7882, 7883)
+        (7884, 7885)
+        (7886, 7887)
+        (7888, 7889)
+        (7890, 7891)
+        (7892, 7893)
+        (7894, 7895)
+        (7896, 7897)
+        (7898, 7899)
+        (7900, 7901)
+        (7902, 7903)
+        (7904, 7905)
+        (7906, 7907)
+        (7908, 7909)
+        (7910, 7911)
+        (7912, 7913)
+        (7914, 7915)
+        (7916, 7917)
+        (7918, 7919)
+        (7920, 7921)
+        (7922, 7923)
+        (7924, 7925)
+        (7926, 7927)
+        (7928, 7929)
+        (7944, 7936)
+        (7945, 7937)
+        (7946, 7938)
+        (7947, 7939)
+        (7948, 7940)
+        (7949, 7941)
+        (7950, 7942)
+        (7951, 7943)
+        (7960, 7952)
+        (7961, 7953)
+        (7962, 7954)
+        (7963, 7955)
+        (7964, 7956)
+        (7965, 7957)
+        (7976, 7968)
+        (7977, 7969)
+        (7978, 7970)
+        (7979, 7971)
+        (7980, 7972)
+        (7981, 7973)
+        (7982, 7974)
+        (7983, 7975)
+        (7992, 7984)
+        (7993, 7985)
+        (7994, 7986)
+        (7995, 7987)
+        (7996, 7988)
+        (7997, 7989)
+        (7998, 7990)
+        (7999, 7991)
+        (8008, 8000)
+        (8009, 8001)
+        (8010, 8002)
+        (8011, 8003)
+        (8012, 8004)
+        (8013, 8005)
+        (8025, 8017)
+        (8027, 8019)
+        (8029, 8021)
+        (8031, 8023)
+        (8040, 8032)
+        (8041, 8033)
+        (8042, 8034)
+        (8043, 8035)
+        (8044, 8036)
+        (8045, 8037)
+        (8046, 8038)
+        (8047, 8039)
+        (8072, 8064)
+        (8073, 8065)
+        (8074, 8066)
+        (8075, 8067)
+        (8076, 8068)
+        (8077, 8069)
+        (8078, 8070)
+        (8079, 8071)
+        (8088, 8080)
+        (8089, 8081)
+        (8090, 8082)
+        (8091, 8083)
+        (8092, 8084)
+        (8093, 8085)
+        (8094, 8086)
+        (8095, 8087)
+        (8104, 8096)
+        (8105, 8097)
+        (8106, 8098)
+        (8107, 8099)
+        (8108, 8100)
+        (8109, 8101)
+        (8110, 8102)
+        (8111, 8103)
+        (8120, 8112)
+        (8121, 8113)
+        (8122, 8048)
+        (8123, 8049)
+        (8124, 8115)
+        (8136, 8050)
+        (8137, 8051)
+        (8138, 8052)
+        (8139, 8053)
+        (8140, 8131)
+        (8152, 8144)
+        (8153, 8145)
+        (8154, 8054)
+        (8155, 8055)
+        (8168, 8160)
+        (8169, 8161)
+        (8170, 8058)
+        (8171, 8059)
+        (8172, 8165)
+        (8184, 8056)
+        (8185, 8057)
+        (8186, 8060)
+        (8187, 8061)
+        (8188, 8179)
+        (8486, 969)
+        (8490, 107)
+        (8491, 229)
+        (8544, 8560)
+        (8545, 8561)
+        (8546, 8562)
+        (8547, 8563)
+        (8548, 8564)
+        (8549, 8565)
+        (8550, 8566)
+        (8551, 8567)
+        (8552, 8568)
+        (8553, 8569)
+        (8554, 8570)
+        (8555, 8571)
+        (8556, 8572)
+        (8557, 8573)
+        (8558, 8574)
+        (8559, 8575);
+
+    return lower;
+}
+
+} // unnamed namespace
+} // namespace gnash
diff --git a/libbase/SWFCtype.h b/libbase/SWFCtype.h
new file mode 100644
index 0000000..19e5ad4
--- /dev/null
+++ b/libbase/SWFCtype.h
@@ -0,0 +1,26 @@
+
+#ifndef GNASH_SWF_CTYPE_H
+#define GNASH_SWF_CTYPE_H
+
+
+#include <locale>
+
+namespace gnash {
+
+class SWFCtype : public std::ctype<wchar_t>
+{
+public:
+
+    SWFCtype(size_t refs = 0) : std::ctype<wchar_t>(refs) {}
+    typedef std::ctype<wchar_t>::char_type char_type;
+
+protected:
+    virtual char_type do_toupper(char_type) const;
+    virtual const char_type* do_toupper(char_type* low, const char_type* high) 
const;
+    virtual char_type do_tolower(char_type) const;
+    virtual const char_type* do_tolower(char_type* low, const char_type* high) 
const;
+};
+
+} // namespace gnash
+
+#endif
diff --git a/libbase/utf8.h b/libbase/utf8.h
index 98210fa..982d316 100644
--- a/libbase/utf8.h
+++ b/libbase/utf8.h
@@ -51,9 +51,10 @@
 ///
 /// It is important that SWF5 can distinguish between the two encodings,
 /// so we cannot convert all strings to UTF-8.
-///
-/// Presently, this code is used for the AS String object,
-/// gnash::edit_text_character, ord() and chr().
+//
+/// Please note that, although this is called utf8, what the Adobe
+/// player uses is only loosely related to real unicode, so the
+/// encoding support here is correspondingly non-standard.
 namespace utf8
 {
     static const boost::uint32_t invalid = 
std::numeric_limits<boost::uint32_t>::max();
diff --git a/libcore/asobj/String_as.cpp b/libcore/asobj/String_as.cpp
index 00cc368..332aa1c 100644
--- a/libcore/asobj/String_as.cpp
+++ b/libcore/asobj/String_as.cpp
@@ -17,6 +17,14 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+#include "String_as.h"
+
+#include <boost/algorithm/string/case_conv.hpp>
+#include <algorithm>
+#include <locale>
+#include <stdexcept>
+
+#include "SWFCtype.h"
 #include "smart_ptr.h"
 #include "fn_call.h"
 #include "Global_as.h"
@@ -30,15 +38,9 @@
 #include "VM.h" 
 #include "namedStrings.h"
 #include "utf8.h"
-#include "String_as.h"
 #include "GnashNumeric.h"
 #include "Global_as.h"
 
-#include <boost/algorithm/string/case_conv.hpp>
-#include <algorithm>
-#include <locale>
-#include <stdexcept>
-
 namespace gnash {
 
 // Forward declarations
@@ -632,34 +634,10 @@ string_toUpperCase(const fn_call& fn)
 
     std::wstring wstr = utf8::decodeCanonicalString(str, version);
 
-    // If this is the C locale, the conversion will be wrong.
-    // Most other locales are correct. FIXME: get this to
-    // work regardless of user's current settings.
-    std::locale currentLocale;
-    try {
-        currentLocale = std::locale("");
-    }
-    catch (const std::runtime_error& e) {
-        currentLocale = std::locale::classic();
-    }
-
-    if (currentLocale == std::locale::classic()) {
-        LOG_ONCE(
-            log_error(_("Your locale probably can't convert non-ascii "
-            "strings to upper case. Using a UTF8 locale may fix this."));
-        );
-    }
+    static const std::locale swfLocale((std::locale()), new SWFCtype());
 
 #if !defined(__HAIKU__) && !defined(__amigaos4__)
-    try {
-        boost::to_upper(wstr, currentLocale);
-    }
-    catch (const std::bad_cast&) {
-        // std::use_facet<wchar_t>(currentLocale) called from
-        // boost::to_upper may throw std::bad_cast
-        log_error(_("bad_cast caught"));
-        std::abort();
-    }
+    boost::to_upper(wstr, swfLocale);
 #else
     size_t l = wstr.size();
     for (size_t i = 0; i < l; ++i) {
@@ -686,35 +664,10 @@ string_toLowerCase(const fn_call& fn)
     // If this is the C locale, the conversion will be wrong.
     // Most other locales are correct. FIXME: get this to
     // work regardless of user's current settings.
-    std::locale currentLocale;
-    try
-    {
-        currentLocale = std::locale("");
-    }
-    catch (std::runtime_error& e)
-    {
-        currentLocale = std::locale::classic();
-    }
-
-    if (currentLocale == std::locale::classic())
-    {
-        LOG_ONCE( 
-            log_error(_("Your locale probably can't convert non-ascii "
-                "strings to lower case. Using a UTF8 locale may fix this"));
-        );
-    }
+    static const std::locale swfLocale((std::locale()), new SWFCtype());
 
 #if !defined(__HAIKU__) && !defined(__amigaos4__)
-    try {
-        boost::to_lower(wstr, currentLocale);
-    }
-    catch (std::bad_cast&)
-    {
-        // std::use_facet<wchar_t>(currentLocale) called from
-        // boost::to_lower may throw std::bad_cast
-        log_error(_("bad_cast caught"));
-        std::abort();
-    }
+    boost::to_lower(wstr, swfLocale);
 #else
     size_t l = wstr.size();
     for (size_t i = 0; i < l; ++i) {

http://git.savannah.gnu.org/cgit//commit/?id=c07c359f8144229f4d3a941da7dc33991b2b1843


commit c07c359f8144229f4d3a941da7dc33991b2b1843
Author: Benjamin Wolsey <address@hidden>
Date:   Tue Nov 23 14:43:21 2010 +0100

    For Adobe, some invalid unicode is valid.

diff --git a/libbase/utf8.cpp b/libbase/utf8.cpp
index f39d86f..27d0175 100644
--- a/libbase/utf8.cpp
+++ b/libbase/utf8.cpp
@@ -23,10 +23,6 @@
 
 #include "utf8.h"
 
-// This isn't actually an invalid character; it's a valid char that
-// looks like an inverted question mark.
-#define INVALID_CHAR 0x0FFFD
-
 std::wstring
 utf8::decodeCanonicalString(const std::string& str, int version)
 {
@@ -35,22 +31,16 @@ utf8::decodeCanonicalString(const std::string& str, int 
version)
     
     std::string::const_iterator it = str.begin(), e = str.end();
     
-    if (version > 5)
-    {
-        while (boost::uint32_t code = decodeNextUnicodeCharacter(it, e))
-        {
-            if (code == utf8::invalid)
-            {
-                wstr.push_back(static_cast<wchar_t>(INVALID_CHAR));
+    if (version > 5) {
+        while (boost::uint32_t code = decodeNextUnicodeCharacter(it, e)) {
+            if (code == utf8::invalid) {
                 continue;        
             }
             wstr.push_back(static_cast<wchar_t>(code));
         }
     }
-    else
-    {
-        while (it != str.end())
-        {
+    else {
+        while (it != str.end()) {
             // This mangles UTF-8 (UCS4) strings, but is what is
             // wanted for SWF5.
             wstr.push_back(static_cast<unsigned char>(*it++));
@@ -136,9 +126,9 @@ 
utf8::decodeNextUnicodeCharacter(std::string::const_iterator& it,
         FIRST_BYTE(0x0F, 12);
         NEXT_BYTE(6);
         NEXT_BYTE(0);
-        if (uc < 0x800) return utf8::invalid;
-        if (uc >= 0x0D800 && uc <= 0x0DFFF) return utf8::invalid;
-        if (uc == 0x0FFFE || uc == 0x0FFFF) return utf8::invalid;
+        if (uc < 0x800) {
+            return utf8::invalid;
+        }
         return uc;
     }
     else if ((*it & 0xF8) == 0xF0) {
@@ -211,8 +201,7 @@ utf8::stripBOM(char* in, size_t& size, TextEncoding& 
encoding)
         // need *ptr to be unsigned or cast all 0xNN
         unsigned char* ptr = reinterpret_cast<unsigned char*>(in);
 
-        if ( *ptr == 0xFF && *(ptr+1) == 0xFE )
-        {
+        if (*ptr == 0xFF && *(ptr+1) == 0xFE) {
             // Text is UTF-16 LE
             encoding = encUTF16LE;
             in+=2;

http://git.savannah.gnu.org/cgit//commit/?id=f771d8e8c61fd25a0b9f6bd3948f450d24223d7d


commit f771d8e8c61fd25a0b9f6bd3948f450d24223d7d
Author: Benjamin Wolsey <address@hidden>
Date:   Tue Nov 23 14:28:25 2010 +0100

    Add a test for all case conversions.

diff --git a/testsuite/actionscript.all/Makefile.am 
b/testsuite/actionscript.all/Makefile.am
index d830ee6..a41d308 100644
--- a/testsuite/actionscript.all/Makefile.am
+++ b/testsuite/actionscript.all/Makefile.am
@@ -128,6 +128,7 @@ ASTESTS =                   \
        LocalConnection.as      \
        enumerate.as    \
        case.as                 \
+       caseconv.as                     \
        ops.as                  \
        toString_valueOf.as     \
        Rectangle.as            \
diff --git a/testsuite/actionscript.all/caseconv.as 
b/testsuite/actionscript.all/caseconv.as
new file mode 100644
index 0000000..1a8b28b
--- /dev/null
+++ b/testsuite/actionscript.all/caseconv.as
@@ -0,0 +1,1484 @@
+
+
+
+#include "check.as"
+
+upperToLower = [];
+lowerToUpper = [];
+
+lowerToUpper[65370] = 65338;
+lowerToUpper[65369] = 65337;
+lowerToUpper[65368] = 65336;
+lowerToUpper[65367] = 65335;
+lowerToUpper[65366] = 65334;
+lowerToUpper[65365] = 65333;
+lowerToUpper[65364] = 65332;
+lowerToUpper[65363] = 65331;
+lowerToUpper[65362] = 65330;
+lowerToUpper[65361] = 65329;
+lowerToUpper[65360] = 65328;
+lowerToUpper[65359] = 65327;
+lowerToUpper[65358] = 65326;
+lowerToUpper[65357] = 65325;
+lowerToUpper[65356] = 65324;
+lowerToUpper[65355] = 65323;
+lowerToUpper[65354] = 65322;
+lowerToUpper[65353] = 65321;
+lowerToUpper[65352] = 65320;
+lowerToUpper[65351] = 65319;
+lowerToUpper[65350] = 65318;
+lowerToUpper[65349] = 65317;
+lowerToUpper[65348] = 65316;
+lowerToUpper[65347] = 65315;
+lowerToUpper[65346] = 65314;
+lowerToUpper[65345] = 65313;
+lowerToUpper[9449] = 9423;
+lowerToUpper[9448] = 9422;
+lowerToUpper[9447] = 9421;
+lowerToUpper[9446] = 9420;
+lowerToUpper[9445] = 9419;
+lowerToUpper[9444] = 9418;
+lowerToUpper[9443] = 9417;
+lowerToUpper[9442] = 9416;
+lowerToUpper[9441] = 9415;
+lowerToUpper[9440] = 9414;
+lowerToUpper[9439] = 9413;
+lowerToUpper[9438] = 9412;
+lowerToUpper[9437] = 9411;
+lowerToUpper[9436] = 9410;
+lowerToUpper[9435] = 9409;
+lowerToUpper[9434] = 9408;
+lowerToUpper[9433] = 9407;
+lowerToUpper[9432] = 9406;
+lowerToUpper[9431] = 9405;
+lowerToUpper[9430] = 9404;
+lowerToUpper[9429] = 9403;
+lowerToUpper[9428] = 9402;
+lowerToUpper[9427] = 9401;
+lowerToUpper[9426] = 9400;
+lowerToUpper[9425] = 9399;
+lowerToUpper[9424] = 9398;
+lowerToUpper[8575] = 8559;
+lowerToUpper[8574] = 8558;
+lowerToUpper[8573] = 8557;
+lowerToUpper[8572] = 8556;
+lowerToUpper[8571] = 8555;
+lowerToUpper[8570] = 8554;
+lowerToUpper[8569] = 8553;
+lowerToUpper[8568] = 8552;
+lowerToUpper[8567] = 8551;
+lowerToUpper[8566] = 8550;
+lowerToUpper[8565] = 8549;
+lowerToUpper[8564] = 8548;
+lowerToUpper[8563] = 8547;
+lowerToUpper[8562] = 8546;
+lowerToUpper[8561] = 8545;
+lowerToUpper[8560] = 8544;
+lowerToUpper[8179] = 8188;
+lowerToUpper[8165] = 8172;
+lowerToUpper[8161] = 8169;
+lowerToUpper[8160] = 8168;
+lowerToUpper[8145] = 8153;
+lowerToUpper[8144] = 8152;
+lowerToUpper[8131] = 8140;
+lowerToUpper[8126] = 921;
+lowerToUpper[8115] = 8124;
+lowerToUpper[8113] = 8121;
+lowerToUpper[8112] = 8120;
+lowerToUpper[8103] = 8111;
+lowerToUpper[8102] = 8110;
+lowerToUpper[8101] = 8109;
+lowerToUpper[8100] = 8108;
+lowerToUpper[8099] = 8107;
+lowerToUpper[8098] = 8106;
+lowerToUpper[8097] = 8105;
+lowerToUpper[8096] = 8104;
+lowerToUpper[8087] = 8095;
+lowerToUpper[8086] = 8094;
+lowerToUpper[8085] = 8093;
+lowerToUpper[8084] = 8092;
+lowerToUpper[8083] = 8091;
+lowerToUpper[8082] = 8090;
+lowerToUpper[8081] = 8089;
+lowerToUpper[8080] = 8088;
+lowerToUpper[8071] = 8079;
+lowerToUpper[8070] = 8078;
+lowerToUpper[8069] = 8077;
+lowerToUpper[8068] = 8076;
+lowerToUpper[8067] = 8075;
+lowerToUpper[8066] = 8074;
+lowerToUpper[8065] = 8073;
+lowerToUpper[8064] = 8072;
+lowerToUpper[8061] = 8187;
+lowerToUpper[8060] = 8186;
+lowerToUpper[8059] = 8171;
+lowerToUpper[8058] = 8170;
+lowerToUpper[8057] = 8185;
+lowerToUpper[8056] = 8184;
+lowerToUpper[8055] = 8155;
+lowerToUpper[8054] = 8154;
+lowerToUpper[8053] = 8139;
+lowerToUpper[8052] = 8138;
+lowerToUpper[8051] = 8137;
+lowerToUpper[8050] = 8136;
+lowerToUpper[8049] = 8123;
+lowerToUpper[8048] = 8122;
+lowerToUpper[8039] = 8047;
+lowerToUpper[8038] = 8046;
+lowerToUpper[8037] = 8045;
+lowerToUpper[8036] = 8044;
+lowerToUpper[8035] = 8043;
+lowerToUpper[8034] = 8042;
+lowerToUpper[8033] = 8041;
+lowerToUpper[8032] = 8040;
+lowerToUpper[8023] = 8031;
+lowerToUpper[8021] = 8029;
+lowerToUpper[8019] = 8027;
+lowerToUpper[8017] = 8025;
+lowerToUpper[8005] = 8013;
+lowerToUpper[8004] = 8012;
+lowerToUpper[8003] = 8011;
+lowerToUpper[8002] = 8010;
+lowerToUpper[8001] = 8009;
+lowerToUpper[8000] = 8008;
+lowerToUpper[7991] = 7999;
+lowerToUpper[7990] = 7998;
+lowerToUpper[7989] = 7997;
+lowerToUpper[7988] = 7996;
+lowerToUpper[7987] = 7995;
+lowerToUpper[7986] = 7994;
+lowerToUpper[7985] = 7993;
+lowerToUpper[7984] = 7992;
+lowerToUpper[7975] = 7983;
+lowerToUpper[7974] = 7982;
+lowerToUpper[7973] = 7981;
+lowerToUpper[7972] = 7980;
+lowerToUpper[7971] = 7979;
+lowerToUpper[7970] = 7978;
+lowerToUpper[7969] = 7977;
+lowerToUpper[7968] = 7976;
+lowerToUpper[7957] = 7965;
+lowerToUpper[7956] = 7964;
+lowerToUpper[7955] = 7963;
+lowerToUpper[7954] = 7962;
+lowerToUpper[7953] = 7961;
+lowerToUpper[7952] = 7960;
+lowerToUpper[7943] = 7951;
+lowerToUpper[7942] = 7950;
+lowerToUpper[7941] = 7949;
+lowerToUpper[7940] = 7948;
+lowerToUpper[7939] = 7947;
+lowerToUpper[7938] = 7946;
+lowerToUpper[7937] = 7945;
+lowerToUpper[7936] = 7944;
+lowerToUpper[7929] = 7928;
+lowerToUpper[7927] = 7926;
+lowerToUpper[7925] = 7924;
+lowerToUpper[7923] = 7922;
+lowerToUpper[7921] = 7920;
+lowerToUpper[7919] = 7918;
+lowerToUpper[7917] = 7916;
+lowerToUpper[7915] = 7914;
+lowerToUpper[7913] = 7912;
+lowerToUpper[7911] = 7910;
+lowerToUpper[7909] = 7908;
+lowerToUpper[7907] = 7906;
+lowerToUpper[7905] = 7904;
+lowerToUpper[7903] = 7902;
+lowerToUpper[7901] = 7900;
+lowerToUpper[7899] = 7898;
+lowerToUpper[7897] = 7896;
+lowerToUpper[7895] = 7894;
+lowerToUpper[7893] = 7892;
+lowerToUpper[7891] = 7890;
+lowerToUpper[7889] = 7888;
+lowerToUpper[7887] = 7886;
+lowerToUpper[7885] = 7884;
+lowerToUpper[7883] = 7882;
+lowerToUpper[7881] = 7880;
+lowerToUpper[7879] = 7878;
+lowerToUpper[7877] = 7876;
+lowerToUpper[7875] = 7874;
+lowerToUpper[7873] = 7872;
+lowerToUpper[7871] = 7870;
+lowerToUpper[7869] = 7868;
+lowerToUpper[7867] = 7866;
+lowerToUpper[7865] = 7864;
+lowerToUpper[7863] = 7862;
+lowerToUpper[7861] = 7860;
+lowerToUpper[7859] = 7858;
+lowerToUpper[7857] = 7856;
+lowerToUpper[7855] = 7854;
+lowerToUpper[7853] = 7852;
+lowerToUpper[7851] = 7850;
+lowerToUpper[7849] = 7848;
+lowerToUpper[7847] = 7846;
+lowerToUpper[7845] = 7844;
+lowerToUpper[7843] = 7842;
+lowerToUpper[7841] = 7840;
+lowerToUpper[7835] = 7776;
+lowerToUpper[7829] = 7828;
+lowerToUpper[7827] = 7826;
+lowerToUpper[7825] = 7824;
+lowerToUpper[7823] = 7822;
+lowerToUpper[7821] = 7820;
+lowerToUpper[7819] = 7818;
+lowerToUpper[7817] = 7816;
+lowerToUpper[7815] = 7814;
+lowerToUpper[7813] = 7812;
+lowerToUpper[7811] = 7810;
+lowerToUpper[7809] = 7808;
+lowerToUpper[7807] = 7806;
+lowerToUpper[7805] = 7804;
+lowerToUpper[7803] = 7802;
+lowerToUpper[7801] = 7800;
+lowerToUpper[7799] = 7798;
+lowerToUpper[7797] = 7796;
+lowerToUpper[7795] = 7794;
+lowerToUpper[7793] = 7792;
+lowerToUpper[7791] = 7790;
+lowerToUpper[7789] = 7788;
+lowerToUpper[7787] = 7786;
+lowerToUpper[7785] = 7784;
+lowerToUpper[7783] = 7782;
+lowerToUpper[7781] = 7780;
+lowerToUpper[7779] = 7778;
+lowerToUpper[7777] = 7776;
+lowerToUpper[7775] = 7774;
+lowerToUpper[7773] = 7772;
+lowerToUpper[7771] = 7770;
+lowerToUpper[7769] = 7768;
+lowerToUpper[7767] = 7766;
+lowerToUpper[7765] = 7764;
+lowerToUpper[7763] = 7762;
+lowerToUpper[7761] = 7760;
+lowerToUpper[7759] = 7758;
+lowerToUpper[7757] = 7756;
+lowerToUpper[7755] = 7754;
+lowerToUpper[7753] = 7752;
+lowerToUpper[7751] = 7750;
+lowerToUpper[7749] = 7748;
+lowerToUpper[7747] = 7746;
+lowerToUpper[7745] = 7744;
+lowerToUpper[7743] = 7742;
+lowerToUpper[7741] = 7740;
+lowerToUpper[7739] = 7738;
+lowerToUpper[7737] = 7736;
+lowerToUpper[7735] = 7734;
+lowerToUpper[7733] = 7732;
+lowerToUpper[7731] = 7730;
+lowerToUpper[7729] = 7728;
+lowerToUpper[7727] = 7726;
+lowerToUpper[7725] = 7724;
+lowerToUpper[7723] = 7722;
+lowerToUpper[7721] = 7720;
+lowerToUpper[7719] = 7718;
+lowerToUpper[7717] = 7716;
+lowerToUpper[7715] = 7714;
+lowerToUpper[7713] = 7712;
+lowerToUpper[7711] = 7710;
+lowerToUpper[7709] = 7708;
+lowerToUpper[7707] = 7706;
+lowerToUpper[7705] = 7704;
+lowerToUpper[7703] = 7702;
+lowerToUpper[7701] = 7700;
+lowerToUpper[7699] = 7698;
+lowerToUpper[7697] = 7696;
+lowerToUpper[7695] = 7694;
+lowerToUpper[7693] = 7692;
+lowerToUpper[7691] = 7690;
+lowerToUpper[7689] = 7688;
+lowerToUpper[7687] = 7686;
+lowerToUpper[7685] = 7684;
+lowerToUpper[7683] = 7682;
+lowerToUpper[7681] = 7680;
+lowerToUpper[1414] = 1366;
+lowerToUpper[1413] = 1365;
+lowerToUpper[1412] = 1364;
+lowerToUpper[1411] = 1363;
+lowerToUpper[1410] = 1362;
+lowerToUpper[1409] = 1361;
+lowerToUpper[1408] = 1360;
+lowerToUpper[1407] = 1359;
+lowerToUpper[1406] = 1358;
+lowerToUpper[1405] = 1357;
+lowerToUpper[1404] = 1356;
+lowerToUpper[1403] = 1355;
+lowerToUpper[1402] = 1354;
+lowerToUpper[1401] = 1353;
+lowerToUpper[1400] = 1352;
+lowerToUpper[1399] = 1351;
+lowerToUpper[1398] = 1350;
+lowerToUpper[1397] = 1349;
+lowerToUpper[1396] = 1348;
+lowerToUpper[1395] = 1347;
+lowerToUpper[1394] = 1346;
+lowerToUpper[1393] = 1345;
+lowerToUpper[1392] = 1344;
+lowerToUpper[1391] = 1343;
+lowerToUpper[1390] = 1342;
+lowerToUpper[1389] = 1341;
+lowerToUpper[1388] = 1340;
+lowerToUpper[1387] = 1339;
+lowerToUpper[1386] = 1338;
+lowerToUpper[1385] = 1337;
+lowerToUpper[1384] = 1336;
+lowerToUpper[1383] = 1335;
+lowerToUpper[1382] = 1334;
+lowerToUpper[1381] = 1333;
+lowerToUpper[1380] = 1332;
+lowerToUpper[1379] = 1331;
+lowerToUpper[1378] = 1330;
+lowerToUpper[1377] = 1329;
+lowerToUpper[1273] = 1272;
+lowerToUpper[1269] = 1268;
+lowerToUpper[1267] = 1266;
+lowerToUpper[1265] = 1264;
+lowerToUpper[1263] = 1262;
+lowerToUpper[1261] = 1260;
+lowerToUpper[1259] = 1258;
+lowerToUpper[1257] = 1256;
+lowerToUpper[1255] = 1254;
+lowerToUpper[1253] = 1252;
+lowerToUpper[1251] = 1250;
+lowerToUpper[1249] = 1248;
+lowerToUpper[1247] = 1246;
+lowerToUpper[1245] = 1244;
+lowerToUpper[1243] = 1242;
+lowerToUpper[1241] = 1240;
+lowerToUpper[1239] = 1238;
+lowerToUpper[1237] = 1236;
+lowerToUpper[1235] = 1234;
+lowerToUpper[1233] = 1232;
+lowerToUpper[1228] = 1227;
+lowerToUpper[1224] = 1223;
+lowerToUpper[1220] = 1219;
+lowerToUpper[1218] = 1217;
+lowerToUpper[1215] = 1214;
+lowerToUpper[1213] = 1212;
+lowerToUpper[1211] = 1210;
+lowerToUpper[1209] = 1208;
+lowerToUpper[1207] = 1206;
+lowerToUpper[1205] = 1204;
+lowerToUpper[1203] = 1202;
+lowerToUpper[1201] = 1200;
+lowerToUpper[1199] = 1198;
+lowerToUpper[1197] = 1196;
+lowerToUpper[1195] = 1194;
+lowerToUpper[1193] = 1192;
+lowerToUpper[1191] = 1190;
+lowerToUpper[1189] = 1188;
+lowerToUpper[1187] = 1186;
+lowerToUpper[1185] = 1184;
+lowerToUpper[1183] = 1182;
+lowerToUpper[1181] = 1180;
+lowerToUpper[1179] = 1178;
+lowerToUpper[1177] = 1176;
+lowerToUpper[1175] = 1174;
+lowerToUpper[1173] = 1172;
+lowerToUpper[1171] = 1170;
+lowerToUpper[1169] = 1168;
+lowerToUpper[1167] = 1166;
+lowerToUpper[1165] = 1164;
+lowerToUpper[1153] = 1152;
+lowerToUpper[1151] = 1150;
+lowerToUpper[1149] = 1148;
+lowerToUpper[1147] = 1146;
+lowerToUpper[1145] = 1144;
+lowerToUpper[1143] = 1142;
+lowerToUpper[1141] = 1140;
+lowerToUpper[1139] = 1138;
+lowerToUpper[1137] = 1136;
+lowerToUpper[1135] = 1134;
+lowerToUpper[1133] = 1132;
+lowerToUpper[1131] = 1130;
+lowerToUpper[1129] = 1128;
+lowerToUpper[1127] = 1126;
+lowerToUpper[1125] = 1124;
+lowerToUpper[1123] = 1122;
+lowerToUpper[1121] = 1120;
+lowerToUpper[1119] = 1039;
+lowerToUpper[1118] = 1038;
+lowerToUpper[1117] = 1037;
+lowerToUpper[1116] = 1036;
+lowerToUpper[1115] = 1035;
+lowerToUpper[1114] = 1034;
+lowerToUpper[1113] = 1033;
+lowerToUpper[1112] = 1032;
+lowerToUpper[1111] = 1031;
+lowerToUpper[1110] = 1030;
+lowerToUpper[1109] = 1029;
+lowerToUpper[1108] = 1028;
+lowerToUpper[1107] = 1027;
+lowerToUpper[1106] = 1026;
+lowerToUpper[1105] = 1025;
+lowerToUpper[1104] = 1024;
+lowerToUpper[1103] = 1071;
+lowerToUpper[1102] = 1070;
+lowerToUpper[1101] = 1069;
+lowerToUpper[1100] = 1068;
+lowerToUpper[1099] = 1067;
+lowerToUpper[1098] = 1066;
+lowerToUpper[1097] = 1065;
+lowerToUpper[1096] = 1064;
+lowerToUpper[1095] = 1063;
+lowerToUpper[1094] = 1062;
+lowerToUpper[1093] = 1061;
+lowerToUpper[1092] = 1060;
+lowerToUpper[1091] = 1059;
+lowerToUpper[1090] = 1058;
+lowerToUpper[1089] = 1057;
+lowerToUpper[1088] = 1056;
+lowerToUpper[1087] = 1055;
+lowerToUpper[1086] = 1054;
+lowerToUpper[1085] = 1053;
+lowerToUpper[1084] = 1052;
+lowerToUpper[1083] = 1051;
+lowerToUpper[1082] = 1050;
+lowerToUpper[1081] = 1049;
+lowerToUpper[1080] = 1048;
+lowerToUpper[1079] = 1047;
+lowerToUpper[1078] = 1046;
+lowerToUpper[1077] = 1045;
+lowerToUpper[1076] = 1044;
+lowerToUpper[1075] = 1043;
+lowerToUpper[1074] = 1042;
+lowerToUpper[1073] = 1041;
+lowerToUpper[1072] = 1040;
+lowerToUpper[1013] = 917;
+lowerToUpper[1010] = 931;
+lowerToUpper[1009] = 929;
+lowerToUpper[1008] = 922;
+lowerToUpper[1007] = 1006;
+lowerToUpper[1005] = 1004;
+lowerToUpper[1003] = 1002;
+lowerToUpper[1001] = 1000;
+lowerToUpper[999] = 998;
+lowerToUpper[997] = 996;
+lowerToUpper[995] = 994;
+lowerToUpper[993] = 992;
+lowerToUpper[991] = 990;
+lowerToUpper[989] = 988;
+lowerToUpper[987] = 986;
+lowerToUpper[982] = 928;
+lowerToUpper[981] = 934;
+lowerToUpper[977] = 920;
+lowerToUpper[976] = 914;
+lowerToUpper[974] = 911;
+lowerToUpper[973] = 910;
+lowerToUpper[972] = 908;
+lowerToUpper[971] = 939;
+lowerToUpper[970] = 938;
+lowerToUpper[969] = 937;
+lowerToUpper[968] = 936;
+lowerToUpper[967] = 935;
+lowerToUpper[966] = 934;
+lowerToUpper[965] = 933;
+lowerToUpper[964] = 932;
+lowerToUpper[963] = 931;
+lowerToUpper[962] = 931;
+lowerToUpper[961] = 929;
+lowerToUpper[960] = 928;
+lowerToUpper[959] = 927;
+lowerToUpper[958] = 926;
+lowerToUpper[957] = 925;
+lowerToUpper[956] = 924;
+lowerToUpper[955] = 923;
+lowerToUpper[954] = 922;
+lowerToUpper[953] = 921;
+lowerToUpper[952] = 920;
+lowerToUpper[951] = 919;
+lowerToUpper[950] = 918;
+lowerToUpper[949] = 917;
+lowerToUpper[948] = 916;
+lowerToUpper[947] = 915;
+lowerToUpper[946] = 914;
+lowerToUpper[945] = 913;
+lowerToUpper[943] = 906;
+lowerToUpper[942] = 905;
+lowerToUpper[941] = 904;
+lowerToUpper[940] = 902;
+lowerToUpper[837] = 921;
+lowerToUpper[658] = 439;
+lowerToUpper[651] = 434;
+lowerToUpper[650] = 433;
+lowerToUpper[648] = 430;
+lowerToUpper[643] = 425;
+lowerToUpper[640] = 422;
+lowerToUpper[629] = 415;
+lowerToUpper[626] = 413;
+lowerToUpper[623] = 412;
+lowerToUpper[617] = 406;
+lowerToUpper[616] = 407;
+lowerToUpper[611] = 404;
+lowerToUpper[608] = 403;
+lowerToUpper[603] = 400;
+lowerToUpper[601] = 399;
+lowerToUpper[599] = 394;
+lowerToUpper[598] = 393;
+lowerToUpper[596] = 390;
+lowerToUpper[595] = 385;
+lowerToUpper[563] = 562;
+lowerToUpper[561] = 560;
+lowerToUpper[559] = 558;
+lowerToUpper[557] = 556;
+lowerToUpper[555] = 554;
+lowerToUpper[553] = 552;
+lowerToUpper[551] = 550;
+lowerToUpper[549] = 548;
+lowerToUpper[547] = 546;
+lowerToUpper[543] = 542;
+lowerToUpper[541] = 540;
+lowerToUpper[539] = 538;
+lowerToUpper[537] = 536;
+lowerToUpper[535] = 534;
+lowerToUpper[533] = 532;
+lowerToUpper[531] = 530;
+lowerToUpper[529] = 528;
+lowerToUpper[527] = 526;
+lowerToUpper[525] = 524;
+lowerToUpper[523] = 522;
+lowerToUpper[521] = 520;
+lowerToUpper[519] = 518;
+lowerToUpper[517] = 516;
+lowerToUpper[515] = 514;
+lowerToUpper[513] = 512;
+lowerToUpper[511] = 510;
+lowerToUpper[509] = 508;
+lowerToUpper[507] = 506;
+lowerToUpper[505] = 504;
+lowerToUpper[501] = 500;
+lowerToUpper[499] = 497;
+lowerToUpper[498] = 497;
+lowerToUpper[495] = 494;
+lowerToUpper[493] = 492;
+lowerToUpper[491] = 490;
+lowerToUpper[489] = 488;
+lowerToUpper[487] = 486;
+lowerToUpper[485] = 484;
+lowerToUpper[483] = 482;
+lowerToUpper[481] = 480;
+lowerToUpper[479] = 478;
+lowerToUpper[477] = 398;
+lowerToUpper[476] = 475;
+lowerToUpper[474] = 473;
+lowerToUpper[472] = 471;
+lowerToUpper[470] = 469;
+lowerToUpper[468] = 467;
+lowerToUpper[466] = 465;
+lowerToUpper[464] = 463;
+lowerToUpper[462] = 461;
+lowerToUpper[460] = 458;
+lowerToUpper[459] = 458;
+lowerToUpper[457] = 455;
+lowerToUpper[456] = 455;
+lowerToUpper[454] = 452;
+lowerToUpper[453] = 452;
+lowerToUpper[447] = 503;
+lowerToUpper[445] = 444;
+lowerToUpper[441] = 440;
+lowerToUpper[438] = 437;
+lowerToUpper[436] = 435;
+lowerToUpper[432] = 431;
+lowerToUpper[429] = 428;
+lowerToUpper[424] = 423;
+lowerToUpper[421] = 420;
+lowerToUpper[419] = 418;
+lowerToUpper[417] = 416;
+lowerToUpper[409] = 408;
+lowerToUpper[405] = 502;
+lowerToUpper[402] = 401;
+lowerToUpper[396] = 395;
+lowerToUpper[392] = 391;
+lowerToUpper[389] = 388;
+lowerToUpper[387] = 386;
+lowerToUpper[383] = 83;
+lowerToUpper[382] = 381;
+lowerToUpper[380] = 379;
+lowerToUpper[378] = 377;
+lowerToUpper[375] = 374;
+lowerToUpper[373] = 372;
+lowerToUpper[371] = 370;
+lowerToUpper[369] = 368;
+lowerToUpper[367] = 366;
+lowerToUpper[365] = 364;
+lowerToUpper[363] = 362;
+lowerToUpper[361] = 360;
+lowerToUpper[359] = 358;
+lowerToUpper[357] = 356;
+lowerToUpper[355] = 354;
+lowerToUpper[353] = 352;
+lowerToUpper[351] = 350;
+lowerToUpper[349] = 348;
+lowerToUpper[347] = 346;
+lowerToUpper[345] = 344;
+lowerToUpper[343] = 342;
+lowerToUpper[341] = 340;
+lowerToUpper[339] = 338;
+lowerToUpper[337] = 336;
+lowerToUpper[335] = 334;
+lowerToUpper[333] = 332;
+lowerToUpper[331] = 330;
+lowerToUpper[328] = 327;
+lowerToUpper[326] = 325;
+lowerToUpper[324] = 323;
+lowerToUpper[322] = 321;
+lowerToUpper[320] = 319;
+lowerToUpper[318] = 317;
+lowerToUpper[316] = 315;
+lowerToUpper[314] = 313;
+lowerToUpper[311] = 310;
+lowerToUpper[309] = 308;
+lowerToUpper[307] = 306;
+lowerToUpper[305] = 73;
+lowerToUpper[303] = 302;
+lowerToUpper[301] = 300;
+lowerToUpper[299] = 298;
+lowerToUpper[297] = 296;
+lowerToUpper[295] = 294;
+lowerToUpper[293] = 292;
+lowerToUpper[291] = 290;
+lowerToUpper[289] = 288;
+lowerToUpper[287] = 286;
+lowerToUpper[285] = 284;
+lowerToUpper[283] = 282;
+lowerToUpper[281] = 280;
+lowerToUpper[279] = 278;
+lowerToUpper[277] = 276;
+lowerToUpper[275] = 274;
+lowerToUpper[273] = 272;
+lowerToUpper[271] = 270;
+lowerToUpper[269] = 268;
+lowerToUpper[267] = 266;
+lowerToUpper[265] = 264;
+lowerToUpper[263] = 262;
+lowerToUpper[261] = 260;
+lowerToUpper[259] = 258;
+lowerToUpper[257] = 256;
+lowerToUpper[255] = 376;
+lowerToUpper[254] = 222;
+lowerToUpper[253] = 221;
+lowerToUpper[252] = 220;
+lowerToUpper[251] = 219;
+lowerToUpper[250] = 218;
+lowerToUpper[249] = 217;
+lowerToUpper[248] = 216;
+lowerToUpper[246] = 214;
+lowerToUpper[245] = 213;
+lowerToUpper[244] = 212;
+lowerToUpper[243] = 211;
+lowerToUpper[242] = 210;
+lowerToUpper[241] = 209;
+lowerToUpper[240] = 208;
+lowerToUpper[239] = 207;
+lowerToUpper[238] = 206;
+lowerToUpper[237] = 205;
+lowerToUpper[236] = 204;
+lowerToUpper[235] = 203;
+lowerToUpper[234] = 202;
+lowerToUpper[233] = 201;
+lowerToUpper[232] = 200;
+lowerToUpper[231] = 199;
+lowerToUpper[230] = 198;
+lowerToUpper[229] = 197;
+lowerToUpper[228] = 196;
+lowerToUpper[227] = 195;
+lowerToUpper[226] = 194;
+lowerToUpper[225] = 193;
+lowerToUpper[224] = 192;
+lowerToUpper[181] = 924;
+lowerToUpper[122] = 90;
+lowerToUpper[121] = 89;
+lowerToUpper[120] = 88;
+lowerToUpper[119] = 87;
+lowerToUpper[118] = 86;
+lowerToUpper[117] = 85;
+lowerToUpper[116] = 84;
+lowerToUpper[115] = 83;
+lowerToUpper[114] = 82;
+lowerToUpper[113] = 81;
+lowerToUpper[112] = 80;
+lowerToUpper[111] = 79;
+lowerToUpper[110] = 78;
+lowerToUpper[109] = 77;
+lowerToUpper[108] = 76;
+lowerToUpper[107] = 75;
+lowerToUpper[106] = 74;
+lowerToUpper[105] = 73;
+lowerToUpper[104] = 72;
+lowerToUpper[103] = 71;
+lowerToUpper[102] = 70;
+lowerToUpper[101] = 69;
+lowerToUpper[100] = 68;
+lowerToUpper[99] = 67;
+lowerToUpper[98] = 66;
+lowerToUpper[97] = 65;
+upperToLower[65338] = 65370;
+upperToLower[65337] = 65369;
+upperToLower[65336] = 65368;
+upperToLower[65335] = 65367;
+upperToLower[65334] = 65366;
+upperToLower[65333] = 65365;
+upperToLower[65332] = 65364;
+upperToLower[65331] = 65363;
+upperToLower[65330] = 65362;
+upperToLower[65329] = 65361;
+upperToLower[65328] = 65360;
+upperToLower[65327] = 65359;
+upperToLower[65326] = 65358;
+upperToLower[65325] = 65357;
+upperToLower[65324] = 65356;
+upperToLower[65323] = 65355;
+upperToLower[65322] = 65354;
+upperToLower[65321] = 65353;
+upperToLower[65320] = 65352;
+upperToLower[65319] = 65351;
+upperToLower[65318] = 65350;
+upperToLower[65317] = 65349;
+upperToLower[65316] = 65348;
+upperToLower[65315] = 65347;
+upperToLower[65314] = 65346;
+upperToLower[65313] = 65345;
+upperToLower[9423] = 9449;
+upperToLower[9422] = 9448;
+upperToLower[9421] = 9447;
+upperToLower[9420] = 9446;
+upperToLower[9419] = 9445;
+upperToLower[9418] = 9444;
+upperToLower[9417] = 9443;
+upperToLower[9416] = 9442;
+upperToLower[9415] = 9441;
+upperToLower[9414] = 9440;
+upperToLower[9413] = 9439;
+upperToLower[9412] = 9438;
+upperToLower[9411] = 9437;
+upperToLower[9410] = 9436;
+upperToLower[9409] = 9435;
+upperToLower[9408] = 9434;
+upperToLower[9407] = 9433;
+upperToLower[9406] = 9432;
+upperToLower[9405] = 9431;
+upperToLower[9404] = 9430;
+upperToLower[9403] = 9429;
+upperToLower[9402] = 9428;
+upperToLower[9401] = 9427;
+upperToLower[9400] = 9426;
+upperToLower[9399] = 9425;
+upperToLower[9398] = 9424;
+upperToLower[8559] = 8575;
+upperToLower[8558] = 8574;
+upperToLower[8557] = 8573;
+upperToLower[8556] = 8572;
+upperToLower[8555] = 8571;
+upperToLower[8554] = 8570;
+upperToLower[8553] = 8569;
+upperToLower[8552] = 8568;
+upperToLower[8551] = 8567;
+upperToLower[8550] = 8566;
+upperToLower[8549] = 8565;
+upperToLower[8548] = 8564;
+upperToLower[8547] = 8563;
+upperToLower[8546] = 8562;
+upperToLower[8545] = 8561;
+upperToLower[8544] = 8560;
+upperToLower[8491] = 229;
+upperToLower[8490] = 107;
+upperToLower[8486] = 969;
+upperToLower[8188] = 8179;
+upperToLower[8187] = 8061;
+upperToLower[8186] = 8060;
+upperToLower[8185] = 8057;
+upperToLower[8184] = 8056;
+upperToLower[8172] = 8165;
+upperToLower[8171] = 8059;
+upperToLower[8170] = 8058;
+upperToLower[8169] = 8161;
+upperToLower[8168] = 8160;
+upperToLower[8155] = 8055;
+upperToLower[8154] = 8054;
+upperToLower[8153] = 8145;
+upperToLower[8152] = 8144;
+upperToLower[8140] = 8131;
+upperToLower[8139] = 8053;
+upperToLower[8138] = 8052;
+upperToLower[8137] = 8051;
+upperToLower[8136] = 8050;
+upperToLower[8124] = 8115;
+upperToLower[8123] = 8049;
+upperToLower[8122] = 8048;
+upperToLower[8121] = 8113;
+upperToLower[8120] = 8112;
+upperToLower[8111] = 8103;
+upperToLower[8110] = 8102;
+upperToLower[8109] = 8101;
+upperToLower[8108] = 8100;
+upperToLower[8107] = 8099;
+upperToLower[8106] = 8098;
+upperToLower[8105] = 8097;
+upperToLower[8104] = 8096;
+upperToLower[8095] = 8087;
+upperToLower[8094] = 8086;
+upperToLower[8093] = 8085;
+upperToLower[8092] = 8084;
+upperToLower[8091] = 8083;
+upperToLower[8090] = 8082;
+upperToLower[8089] = 8081;
+upperToLower[8088] = 8080;
+upperToLower[8079] = 8071;
+upperToLower[8078] = 8070;
+upperToLower[8077] = 8069;
+upperToLower[8076] = 8068;
+upperToLower[8075] = 8067;
+upperToLower[8074] = 8066;
+upperToLower[8073] = 8065;
+upperToLower[8072] = 8064;
+upperToLower[8047] = 8039;
+upperToLower[8046] = 8038;
+upperToLower[8045] = 8037;
+upperToLower[8044] = 8036;
+upperToLower[8043] = 8035;
+upperToLower[8042] = 8034;
+upperToLower[8041] = 8033;
+upperToLower[8040] = 8032;
+upperToLower[8031] = 8023;
+upperToLower[8029] = 8021;
+upperToLower[8027] = 8019;
+upperToLower[8025] = 8017;
+upperToLower[8013] = 8005;
+upperToLower[8012] = 8004;
+upperToLower[8011] = 8003;
+upperToLower[8010] = 8002;
+upperToLower[8009] = 8001;
+upperToLower[8008] = 8000;
+upperToLower[7999] = 7991;
+upperToLower[7998] = 7990;
+upperToLower[7997] = 7989;
+upperToLower[7996] = 7988;
+upperToLower[7995] = 7987;
+upperToLower[7994] = 7986;
+upperToLower[7993] = 7985;
+upperToLower[7992] = 7984;
+upperToLower[7983] = 7975;
+upperToLower[7982] = 7974;
+upperToLower[7981] = 7973;
+upperToLower[7980] = 7972;
+upperToLower[7979] = 7971;
+upperToLower[7978] = 7970;
+upperToLower[7977] = 7969;
+upperToLower[7976] = 7968;
+upperToLower[7965] = 7957;
+upperToLower[7964] = 7956;
+upperToLower[7963] = 7955;
+upperToLower[7962] = 7954;
+upperToLower[7961] = 7953;
+upperToLower[7960] = 7952;
+upperToLower[7951] = 7943;
+upperToLower[7950] = 7942;
+upperToLower[7949] = 7941;
+upperToLower[7948] = 7940;
+upperToLower[7947] = 7939;
+upperToLower[7946] = 7938;
+upperToLower[7945] = 7937;
+upperToLower[7944] = 7936;
+upperToLower[7928] = 7929;
+upperToLower[7926] = 7927;
+upperToLower[7924] = 7925;
+upperToLower[7922] = 7923;
+upperToLower[7920] = 7921;
+upperToLower[7918] = 7919;
+upperToLower[7916] = 7917;
+upperToLower[7914] = 7915;
+upperToLower[7912] = 7913;
+upperToLower[7910] = 7911;
+upperToLower[7908] = 7909;
+upperToLower[7906] = 7907;
+upperToLower[7904] = 7905;
+upperToLower[7902] = 7903;
+upperToLower[7900] = 7901;
+upperToLower[7898] = 7899;
+upperToLower[7896] = 7897;
+upperToLower[7894] = 7895;
+upperToLower[7892] = 7893;
+upperToLower[7890] = 7891;
+upperToLower[7888] = 7889;
+upperToLower[7886] = 7887;
+upperToLower[7884] = 7885;
+upperToLower[7882] = 7883;
+upperToLower[7880] = 7881;
+upperToLower[7878] = 7879;
+upperToLower[7876] = 7877;
+upperToLower[7874] = 7875;
+upperToLower[7872] = 7873;
+upperToLower[7870] = 7871;
+upperToLower[7868] = 7869;
+upperToLower[7866] = 7867;
+upperToLower[7864] = 7865;
+upperToLower[7862] = 7863;
+upperToLower[7860] = 7861;
+upperToLower[7858] = 7859;
+upperToLower[7856] = 7857;
+upperToLower[7854] = 7855;
+upperToLower[7852] = 7853;
+upperToLower[7850] = 7851;
+upperToLower[7848] = 7849;
+upperToLower[7846] = 7847;
+upperToLower[7844] = 7845;
+upperToLower[7842] = 7843;
+upperToLower[7840] = 7841;
+upperToLower[7828] = 7829;
+upperToLower[7826] = 7827;
+upperToLower[7824] = 7825;
+upperToLower[7822] = 7823;
+upperToLower[7820] = 7821;
+upperToLower[7818] = 7819;
+upperToLower[7816] = 7817;
+upperToLower[7814] = 7815;
+upperToLower[7812] = 7813;
+upperToLower[7810] = 7811;
+upperToLower[7808] = 7809;
+upperToLower[7806] = 7807;
+upperToLower[7804] = 7805;
+upperToLower[7802] = 7803;
+upperToLower[7800] = 7801;
+upperToLower[7798] = 7799;
+upperToLower[7796] = 7797;
+upperToLower[7794] = 7795;
+upperToLower[7792] = 7793;
+upperToLower[7790] = 7791;
+upperToLower[7788] = 7789;
+upperToLower[7786] = 7787;
+upperToLower[7784] = 7785;
+upperToLower[7782] = 7783;
+upperToLower[7780] = 7781;
+upperToLower[7778] = 7779;
+upperToLower[7776] = 7777;
+upperToLower[7774] = 7775;
+upperToLower[7772] = 7773;
+upperToLower[7770] = 7771;
+upperToLower[7768] = 7769;
+upperToLower[7766] = 7767;
+upperToLower[7764] = 7765;
+upperToLower[7762] = 7763;
+upperToLower[7760] = 7761;
+upperToLower[7758] = 7759;
+upperToLower[7756] = 7757;
+upperToLower[7754] = 7755;
+upperToLower[7752] = 7753;
+upperToLower[7750] = 7751;
+upperToLower[7748] = 7749;
+upperToLower[7746] = 7747;
+upperToLower[7744] = 7745;
+upperToLower[7742] = 7743;
+upperToLower[7740] = 7741;
+upperToLower[7738] = 7739;
+upperToLower[7736] = 7737;
+upperToLower[7734] = 7735;
+upperToLower[7732] = 7733;
+upperToLower[7730] = 7731;
+upperToLower[7728] = 7729;
+upperToLower[7726] = 7727;
+upperToLower[7724] = 7725;
+upperToLower[7722] = 7723;
+upperToLower[7720] = 7721;
+upperToLower[7718] = 7719;
+upperToLower[7716] = 7717;
+upperToLower[7714] = 7715;
+upperToLower[7712] = 7713;
+upperToLower[7710] = 7711;
+upperToLower[7708] = 7709;
+upperToLower[7706] = 7707;
+upperToLower[7704] = 7705;
+upperToLower[7702] = 7703;
+upperToLower[7700] = 7701;
+upperToLower[7698] = 7699;
+upperToLower[7696] = 7697;
+upperToLower[7694] = 7695;
+upperToLower[7692] = 7693;
+upperToLower[7690] = 7691;
+upperToLower[7688] = 7689;
+upperToLower[7686] = 7687;
+upperToLower[7684] = 7685;
+upperToLower[7682] = 7683;
+upperToLower[7680] = 7681;
+upperToLower[4293] = 4341;
+upperToLower[4292] = 4340;
+upperToLower[4291] = 4339;
+upperToLower[4290] = 4338;
+upperToLower[4289] = 4337;
+upperToLower[4288] = 4336;
+upperToLower[4287] = 4335;
+upperToLower[4286] = 4334;
+upperToLower[4285] = 4333;
+upperToLower[4284] = 4332;
+upperToLower[4283] = 4331;
+upperToLower[4282] = 4330;
+upperToLower[4281] = 4329;
+upperToLower[4280] = 4328;
+upperToLower[4279] = 4327;
+upperToLower[4278] = 4326;
+upperToLower[4277] = 4325;
+upperToLower[4276] = 4324;
+upperToLower[4275] = 4323;
+upperToLower[4274] = 4322;
+upperToLower[4273] = 4321;
+upperToLower[4272] = 4320;
+upperToLower[4271] = 4319;
+upperToLower[4270] = 4318;
+upperToLower[4269] = 4317;
+upperToLower[4268] = 4316;
+upperToLower[4267] = 4315;
+upperToLower[4266] = 4314;
+upperToLower[4265] = 4313;
+upperToLower[4264] = 4312;
+upperToLower[4263] = 4311;
+upperToLower[4262] = 4310;
+upperToLower[4261] = 4309;
+upperToLower[4260] = 4308;
+upperToLower[4259] = 4307;
+upperToLower[4258] = 4306;
+upperToLower[4257] = 4305;
+upperToLower[4256] = 4304;
+upperToLower[1366] = 1414;
+upperToLower[1365] = 1413;
+upperToLower[1364] = 1412;
+upperToLower[1363] = 1411;
+upperToLower[1362] = 1410;
+upperToLower[1361] = 1409;
+upperToLower[1360] = 1408;
+upperToLower[1359] = 1407;
+upperToLower[1358] = 1406;
+upperToLower[1357] = 1405;
+upperToLower[1356] = 1404;
+upperToLower[1355] = 1403;
+upperToLower[1354] = 1402;
+upperToLower[1353] = 1401;
+upperToLower[1352] = 1400;
+upperToLower[1351] = 1399;
+upperToLower[1350] = 1398;
+upperToLower[1349] = 1397;
+upperToLower[1348] = 1396;
+upperToLower[1347] = 1395;
+upperToLower[1346] = 1394;
+upperToLower[1345] = 1393;
+upperToLower[1344] = 1392;
+upperToLower[1343] = 1391;
+upperToLower[1342] = 1390;
+upperToLower[1341] = 1389;
+upperToLower[1340] = 1388;
+upperToLower[1339] = 1387;
+upperToLower[1338] = 1386;
+upperToLower[1337] = 1385;
+upperToLower[1336] = 1384;
+upperToLower[1335] = 1383;
+upperToLower[1334] = 1382;
+upperToLower[1333] = 1381;
+upperToLower[1332] = 1380;
+upperToLower[1331] = 1379;
+upperToLower[1330] = 1378;
+upperToLower[1329] = 1377;
+upperToLower[1272] = 1273;
+upperToLower[1268] = 1269;
+upperToLower[1266] = 1267;
+upperToLower[1264] = 1265;
+upperToLower[1262] = 1263;
+upperToLower[1260] = 1261;
+upperToLower[1258] = 1259;
+upperToLower[1256] = 1257;
+upperToLower[1254] = 1255;
+upperToLower[1252] = 1253;
+upperToLower[1250] = 1251;
+upperToLower[1248] = 1249;
+upperToLower[1246] = 1247;
+upperToLower[1244] = 1245;
+upperToLower[1242] = 1243;
+upperToLower[1240] = 1241;
+upperToLower[1238] = 1239;
+upperToLower[1236] = 1237;
+upperToLower[1234] = 1235;
+upperToLower[1232] = 1233;
+upperToLower[1227] = 1228;
+upperToLower[1223] = 1224;
+upperToLower[1219] = 1220;
+upperToLower[1217] = 1218;
+upperToLower[1214] = 1215;
+upperToLower[1212] = 1213;
+upperToLower[1210] = 1211;
+upperToLower[1208] = 1209;
+upperToLower[1206] = 1207;
+upperToLower[1204] = 1205;
+upperToLower[1202] = 1203;
+upperToLower[1200] = 1201;
+upperToLower[1198] = 1199;
+upperToLower[1196] = 1197;
+upperToLower[1194] = 1195;
+upperToLower[1192] = 1193;
+upperToLower[1190] = 1191;
+upperToLower[1188] = 1189;
+upperToLower[1186] = 1187;
+upperToLower[1184] = 1185;
+upperToLower[1182] = 1183;
+upperToLower[1180] = 1181;
+upperToLower[1178] = 1179;
+upperToLower[1176] = 1177;
+upperToLower[1174] = 1175;
+upperToLower[1172] = 1173;
+upperToLower[1170] = 1171;
+upperToLower[1168] = 1169;
+upperToLower[1166] = 1167;
+upperToLower[1164] = 1165;
+upperToLower[1152] = 1153;
+upperToLower[1150] = 1151;
+upperToLower[1148] = 1149;
+upperToLower[1146] = 1147;
+upperToLower[1144] = 1145;
+upperToLower[1142] = 1143;
+upperToLower[1140] = 1141;
+upperToLower[1138] = 1139;
+upperToLower[1136] = 1137;
+upperToLower[1134] = 1135;
+upperToLower[1132] = 1133;
+upperToLower[1130] = 1131;
+upperToLower[1128] = 1129;
+upperToLower[1126] = 1127;
+upperToLower[1124] = 1125;
+upperToLower[1122] = 1123;
+upperToLower[1120] = 1121;
+upperToLower[1071] = 1103;
+upperToLower[1070] = 1102;
+upperToLower[1069] = 1101;
+upperToLower[1068] = 1100;
+upperToLower[1067] = 1099;
+upperToLower[1066] = 1098;
+upperToLower[1065] = 1097;
+upperToLower[1064] = 1096;
+upperToLower[1063] = 1095;
+upperToLower[1062] = 1094;
+upperToLower[1061] = 1093;
+upperToLower[1060] = 1092;
+upperToLower[1059] = 1091;
+upperToLower[1058] = 1090;
+upperToLower[1057] = 1089;
+upperToLower[1056] = 1088;
+upperToLower[1055] = 1087;
+upperToLower[1054] = 1086;
+upperToLower[1053] = 1085;
+upperToLower[1052] = 1084;
+upperToLower[1051] = 1083;
+upperToLower[1050] = 1082;
+upperToLower[1049] = 1081;
+upperToLower[1048] = 1080;
+upperToLower[1047] = 1079;
+upperToLower[1046] = 1078;
+upperToLower[1045] = 1077;
+upperToLower[1044] = 1076;
+upperToLower[1043] = 1075;
+upperToLower[1042] = 1074;
+upperToLower[1041] = 1073;
+upperToLower[1040] = 1072;
+upperToLower[1039] = 1119;
+upperToLower[1038] = 1118;
+upperToLower[1037] = 1117;
+upperToLower[1036] = 1116;
+upperToLower[1035] = 1115;
+upperToLower[1034] = 1114;
+upperToLower[1033] = 1113;
+upperToLower[1032] = 1112;
+upperToLower[1031] = 1111;
+upperToLower[1030] = 1110;
+upperToLower[1029] = 1109;
+upperToLower[1028] = 1108;
+upperToLower[1027] = 1107;
+upperToLower[1026] = 1106;
+upperToLower[1025] = 1105;
+upperToLower[1024] = 1104;
+upperToLower[1012] = 952;
+upperToLower[1006] = 1007;
+upperToLower[1004] = 1005;
+upperToLower[1002] = 1003;
+upperToLower[1000] = 1001;
+upperToLower[998] = 999;
+upperToLower[996] = 997;
+upperToLower[994] = 995;
+upperToLower[992] = 993;
+upperToLower[990] = 991;
+upperToLower[988] = 989;
+upperToLower[986] = 987;
+upperToLower[939] = 971;
+upperToLower[938] = 970;
+upperToLower[937] = 969;
+upperToLower[936] = 968;
+upperToLower[935] = 967;
+upperToLower[934] = 966;
+upperToLower[933] = 965;
+upperToLower[932] = 964;
+upperToLower[931] = 963;
+upperToLower[929] = 961;
+upperToLower[928] = 960;
+upperToLower[927] = 959;
+upperToLower[926] = 958;
+upperToLower[925] = 957;
+upperToLower[924] = 956;
+upperToLower[923] = 955;
+upperToLower[922] = 954;
+upperToLower[921] = 953;
+upperToLower[920] = 952;
+upperToLower[919] = 951;
+upperToLower[918] = 950;
+upperToLower[917] = 949;
+upperToLower[916] = 948;
+upperToLower[915] = 947;
+upperToLower[914] = 946;
+upperToLower[913] = 945;
+upperToLower[911] = 974;
+upperToLower[910] = 973;
+upperToLower[908] = 972;
+upperToLower[906] = 943;
+upperToLower[905] = 942;
+upperToLower[904] = 941;
+upperToLower[902] = 940;
+upperToLower[562] = 563;
+upperToLower[560] = 561;
+upperToLower[558] = 559;
+upperToLower[556] = 557;
+upperToLower[554] = 555;
+upperToLower[552] = 553;
+upperToLower[550] = 551;
+upperToLower[548] = 549;
+upperToLower[546] = 547;
+upperToLower[542] = 543;
+upperToLower[540] = 541;
+upperToLower[538] = 539;
+upperToLower[536] = 537;
+upperToLower[534] = 535;
+upperToLower[532] = 533;
+upperToLower[530] = 531;
+upperToLower[528] = 529;
+upperToLower[526] = 527;
+upperToLower[524] = 525;
+upperToLower[522] = 523;
+upperToLower[520] = 521;
+upperToLower[518] = 519;
+upperToLower[516] = 517;
+upperToLower[514] = 515;
+upperToLower[512] = 513;
+upperToLower[510] = 511;
+upperToLower[508] = 509;
+upperToLower[506] = 507;
+upperToLower[504] = 505;
+upperToLower[503] = 447;
+upperToLower[502] = 405;
+upperToLower[500] = 501;
+upperToLower[498] = 499;
+upperToLower[497] = 499;
+upperToLower[494] = 495;
+upperToLower[492] = 493;
+upperToLower[490] = 491;
+upperToLower[488] = 489;
+upperToLower[486] = 487;
+upperToLower[484] = 485;
+upperToLower[482] = 483;
+upperToLower[480] = 481;
+upperToLower[478] = 479;
+upperToLower[475] = 476;
+upperToLower[473] = 474;
+upperToLower[471] = 472;
+upperToLower[469] = 470;
+upperToLower[467] = 468;
+upperToLower[465] = 466;
+upperToLower[463] = 464;
+upperToLower[461] = 462;
+upperToLower[459] = 460;
+upperToLower[458] = 460;
+upperToLower[456] = 457;
+upperToLower[455] = 457;
+upperToLower[453] = 454;
+upperToLower[452] = 454;
+upperToLower[444] = 445;
+upperToLower[440] = 441;
+upperToLower[439] = 658;
+upperToLower[437] = 438;
+upperToLower[435] = 436;
+upperToLower[434] = 651;
+upperToLower[433] = 650;
+upperToLower[431] = 432;
+upperToLower[430] = 648;
+upperToLower[428] = 429;
+upperToLower[425] = 643;
+upperToLower[423] = 424;
+upperToLower[422] = 640;
+upperToLower[420] = 421;
+upperToLower[418] = 419;
+upperToLower[416] = 417;
+upperToLower[415] = 629;
+upperToLower[413] = 626;
+upperToLower[412] = 623;
+upperToLower[408] = 409;
+upperToLower[407] = 616;
+upperToLower[406] = 617;
+upperToLower[404] = 611;
+upperToLower[403] = 608;
+upperToLower[401] = 402;
+upperToLower[400] = 603;
+upperToLower[399] = 601;
+upperToLower[398] = 477;
+upperToLower[395] = 396;
+upperToLower[394] = 599;
+upperToLower[393] = 598;
+upperToLower[391] = 392;
+upperToLower[390] = 596;
+upperToLower[388] = 389;
+upperToLower[386] = 387;
+upperToLower[385] = 595;
+upperToLower[381] = 382;
+upperToLower[379] = 380;
+upperToLower[377] = 378;
+upperToLower[376] = 255;
+upperToLower[374] = 375;
+upperToLower[372] = 373;
+upperToLower[370] = 371;
+upperToLower[368] = 369;
+upperToLower[366] = 367;
+upperToLower[364] = 365;
+upperToLower[362] = 363;
+upperToLower[360] = 361;
+upperToLower[358] = 359;
+upperToLower[356] = 357;
+upperToLower[354] = 355;
+upperToLower[352] = 353;
+upperToLower[350] = 351;
+upperToLower[348] = 349;
+upperToLower[346] = 347;
+upperToLower[344] = 345;
+upperToLower[342] = 343;
+upperToLower[340] = 341;
+upperToLower[338] = 339;
+upperToLower[336] = 337;
+upperToLower[334] = 335;
+upperToLower[332] = 333;
+upperToLower[330] = 331;
+upperToLower[327] = 328;
+upperToLower[325] = 326;
+upperToLower[323] = 324;
+upperToLower[321] = 322;
+upperToLower[319] = 320;
+upperToLower[317] = 318;
+upperToLower[315] = 316;
+upperToLower[313] = 314;
+upperToLower[310] = 311;
+upperToLower[308] = 309;
+upperToLower[306] = 307;
+upperToLower[304] = 105;
+upperToLower[302] = 303;
+upperToLower[300] = 301;
+upperToLower[298] = 299;
+upperToLower[296] = 297;
+upperToLower[294] = 295;
+upperToLower[292] = 293;
+upperToLower[290] = 291;
+upperToLower[288] = 289;
+upperToLower[286] = 287;
+upperToLower[284] = 285;
+upperToLower[282] = 283;
+upperToLower[280] = 281;
+upperToLower[278] = 279;
+upperToLower[276] = 277;
+upperToLower[274] = 275;
+upperToLower[272] = 273;
+upperToLower[270] = 271;
+upperToLower[268] = 269;
+upperToLower[266] = 267;
+upperToLower[264] = 265;
+upperToLower[262] = 263;
+upperToLower[260] = 261;
+upperToLower[258] = 259;
+upperToLower[256] = 257;
+upperToLower[222] = 254;
+upperToLower[221] = 253;
+upperToLower[220] = 252;
+upperToLower[219] = 251;
+upperToLower[218] = 250;
+upperToLower[217] = 249;
+upperToLower[216] = 248;
+upperToLower[214] = 246;
+upperToLower[213] = 245;
+upperToLower[212] = 244;
+upperToLower[211] = 243;
+upperToLower[210] = 242;
+upperToLower[209] = 241;
+upperToLower[208] = 240;
+upperToLower[207] = 239;
+upperToLower[206] = 238;
+upperToLower[205] = 237;
+upperToLower[204] = 236;
+upperToLower[203] = 235;
+upperToLower[202] = 234;
+upperToLower[201] = 233;
+upperToLower[200] = 232;
+upperToLower[199] = 231;
+upperToLower[198] = 230;
+upperToLower[197] = 229;
+upperToLower[196] = 228;
+upperToLower[195] = 227;
+upperToLower[194] = 226;
+upperToLower[193] = 225;
+upperToLower[192] = 224;
+upperToLower[90] = 122;
+upperToLower[89] = 121;
+upperToLower[88] = 120;
+upperToLower[87] = 119;
+upperToLower[86] = 118;
+upperToLower[85] = 117;
+upperToLower[84] = 116;
+upperToLower[83] = 115;
+upperToLower[82] = 114;
+upperToLower[81] = 113;
+upperToLower[80] = 112;
+upperToLower[79] = 111;
+upperToLower[78] = 110;
+upperToLower[77] = 109;
+upperToLower[76] = 108;
+upperToLower[75] = 107;
+upperToLower[74] = 106;
+upperToLower[73] = 105;
+upperToLower[72] = 104;
+upperToLower[71] = 103;
+upperToLower[70] = 102;
+upperToLower[69] = 101;
+upperToLower[68] = 100;
+upperToLower[67] = 99;
+upperToLower[66] = 98;
+upperToLower[65] = 97;
+
+
+testlower = [];
+testupper = [];
+
+for (i = 0; i < 65536; ++i) {
+    cl = i;
+    clu = ord(String.fromCharCode(i).toUpperCase().charAt(0));
+    cll = ord(String.fromCharCode(i).toLowerCase().charAt(0));
+    
+    if (clu != cl) { testupper[cl] = clu; };
+    if (cll != cl) { testlower[cl] = cll; };
+
+};
+
+// Some tests.
+check_equals(testlower.length, 65339);
+check_equals(testupper.length, 65371);
+
+for (i = 0; i < 65536; ++i) {
+    //if ((upperToLower[i] == undefined && testlower[i] != undefined) || 
(testlower[i] != upperToLower[i])) {
+    if ((testlower[i] != upperToLower[i])) {
+        fail("To lower: " + i + "(expected " +
+            (upperToLower[i] == undefined ? i : upperToLower[i]) + ", got " + 
testlower[i] + ")");
+    }
+    //if ((lowerToUpper[i] == undefined && testupper[i] == undefined) || 
testupper[i] != lowerToUpper[i]) {
+    if (testupper[i] != lowerToUpper[i]) {
+        fail("To upper: " + i + "(expected " +
+            (lowerToUpper[i] == undefined ? i : lowerToUpper[i]) + ", got " + 
testupper[i] + ")");
+    }
+};
+
+
+totals();

http://git.savannah.gnu.org/cgit//commit/?id=4d9df08b5ba68594928d2369a8a13a7ca4a1e9a3


commit 4d9df08b5ba68594928d2369a8a13a7ca4a1e9a3
Author: Benjamin Wolsey <address@hidden>
Date:   Tue Nov 23 14:16:16 2010 +0100

    Drop support for 5- and 6-byte utf-8, as Adobe doesn't support it.

diff --git a/libbase/utf8.cpp b/libbase/utf8.cpp
index 9e429ff..f39d86f 100644
--- a/libbase/utf8.cpp
+++ b/libbase/utf8.cpp
@@ -91,7 +91,7 @@ boost::uint32_t
 utf8::decodeNextUnicodeCharacter(std::string::const_iterator& it,
                                  const std::string::const_iterator& e)
 {
-    boost::uint32_t    uc;
+    boost::uint32_t uc;
 
     // Security considerations:
     //
@@ -124,27 +124,24 @@ 
utf8::decodeNextUnicodeCharacter(std::string::const_iterator& it,
     if ((*it & 0x80) == 0) return static_cast<boost::uint32_t>(*it++);
 
     // Multi-byte sequences
-    if ((*it & 0xE0) == 0xC0)
-    {
+    if ((*it & 0xE0) == 0xC0) {
         // Two-byte sequence.
         FIRST_BYTE(0x1F, 6);
         NEXT_BYTE(0);
         if (uc < 0x80) return utf8::invalid;    // overlong
         return uc;
     }
-    else if ((*it & 0xF0) == 0xE0)
-    {
+    else if ((*it & 0xF0) == 0xE0) {
         // Three-byte sequence.
         FIRST_BYTE(0x0F, 12);
         NEXT_BYTE(6);
         NEXT_BYTE(0);
-        if (uc < 0x800) return utf8::invalid;    // overlong
-        if (uc >= 0x0D800 && uc <= 0x0DFFF) return utf8::invalid;    // not 
valid ISO 10646
-        if (uc == 0x0FFFE || uc == 0x0FFFF) return utf8::invalid;    // not 
valid ISO 10646
+        if (uc < 0x800) return utf8::invalid;
+        if (uc >= 0x0D800 && uc <= 0x0DFFF) return utf8::invalid;
+        if (uc == 0x0FFFE || uc == 0x0FFFF) return utf8::invalid;
         return uc;
     }
-    else if ((*it & 0xF8) == 0xF0)
-    {
+    else if ((*it & 0xF8) == 0xF0) {
         // Four-byte sequence.
         FIRST_BYTE(0x07, 18);
         NEXT_BYTE(12);
@@ -153,31 +150,7 @@ 
utf8::decodeNextUnicodeCharacter(std::string::const_iterator& it,
         if (uc < 0x010000) return utf8::invalid;    // overlong
         return uc;
     }
-    else if ((*it & 0xFC) == 0xF8)
-    {
-        // Five-byte sequence.
-        FIRST_BYTE(0x03, 24);
-        NEXT_BYTE(18);
-        NEXT_BYTE(12);
-        NEXT_BYTE(6);
-        NEXT_BYTE(0);
-        if (uc < 0x0200000) return utf8::invalid;    // overlong
-        return uc;
-    }
-    else if ((*it & 0xFE) == 0xFC)
-    {
-        // Six-byte sequence.
-        FIRST_BYTE(0x01, 30);
-        NEXT_BYTE(24);
-        NEXT_BYTE(18);
-        NEXT_BYTE(12);
-        NEXT_BYTE(6);
-        NEXT_BYTE(0);
-        if (uc < 0x04000000) return utf8::invalid;    // overlong
-        return uc;
-    }
-    else
-    {
+    else {
         // Invalid.
         it++;
         return utf8::invalid;
@@ -203,42 +176,20 @@ utf8::encodeUnicodeCharacter(boost::uint32_t 
ucs_character)
         text.push_back(0xC0 | (ucs_character >> 6));
         text.push_back(0x80 | ((ucs_character >> 0) & 0x3F));
     }
-    else if (ucs_character <= 0xFFFF)
-    {
+    else if (ucs_character <= 0xFFFF) {
         // Three bytes.
         text.push_back(0xE0 | (ucs_character >> 12));
         text.push_back(0x80 | ((ucs_character >> 6) & 0x3F));
         text.push_back(0x80 | ((ucs_character >> 0) & 0x3F));
     }
-    else if (ucs_character <= 0x1FFFFF)
-    {
+    else if (ucs_character <= 0x1FFFFF) {
         // Four bytes.
         text.push_back(0xF0 | (ucs_character >> 18));
         text.push_back(0x80 | ((ucs_character >> 12) & 0x3F));
         text.push_back(0x80 | ((ucs_character >> 6) & 0x3F));
         text.push_back(0x80 | ((ucs_character >> 0) & 0x3F));
     }
-    else if (ucs_character <= 0x3FFFFFF)
-    {
-        // Five bytes.
-        text.push_back(0xF8 | (ucs_character >> 24));
-        text.push_back(0x80 | ((ucs_character >> 18) & 0x3F));
-        text.push_back(0x80 | ((ucs_character >> 12) & 0x3F));
-        text.push_back(0x80 | ((ucs_character >> 6) & 0x3F));
-        text.push_back(0x80 | ((ucs_character >> 0) & 0x3F));
-    }
-    else if (ucs_character <= 0x7FFFFFFF)
-    {
-        // Six bytes.
-        text.push_back(0xFC | (ucs_character >> 30));
-        text.push_back(0x80 | ((ucs_character >> 24) & 0x3F));
-        text.push_back(0x80 | ((ucs_character >> 18) & 0x3F));
-        text.push_back(0x80 | ((ucs_character >> 12) & 0x3F));
-        text.push_back(0x80 | ((ucs_character >> 6) & 0x3F));
-        text.push_back(0x80 | ((ucs_character >> 0) & 0x3F));
-    }
-    else
-    {
+    else {
         // Invalid char; don't encode anything.
     }
     

-----------------------------------------------------------------------

Summary of changes:
 libbase/Makefile.am                               |    2 +
 libbase/SWFCtype.cpp                              |  347 +++++
 libcore/swf/DefineBitsTag.h => libbase/SWFCtype.h |   42 +-
 libbase/utf8.cpp                                  |   94 +--
 libbase/utf8.h                                    |    7 +-
 libcore/asobj/String_as.cpp                       |   76 +-
 testsuite/actionscript.all/Makefile.am            |    1 +
 testsuite/actionscript.all/caseconv.as            | 1488 +++++++++++++++++++++
 8 files changed, 1886 insertions(+), 171 deletions(-)
 create mode 100644 libbase/SWFCtype.cpp
 copy libcore/swf/DefineBitsTag.h => libbase/SWFCtype.h (58%)
 create mode 100644 testsuite/actionscript.all/caseconv.as


hooks/post-receive
-- 
Gnash



reply via email to

[Prev in Thread] Current Thread [Next in Thread]