gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ChangeLog server/asobj/Global.cpp server/...


From: Benjamin Wolsey
Subject: [Gnash-commit] gnash ChangeLog server/asobj/Global.cpp server/...
Date: Thu, 06 Mar 2008 16:17:44 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Benjamin Wolsey <bwy>   08/03/06 16:17:44

Modified files:
        .              : ChangeLog 
        server/asobj   : Global.cpp 
        server/vm      : ASHandlers.cpp 

Log message:
                * server/vm/ASHandlers.cpp: implement MbOrd for SWF6+ and utf-8,
                  clean up the other chr and ord functions a bit.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.5826&r2=1.5827
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/Global.cpp?cvsroot=gnash&r1=1.95&r2=1.96
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/ASHandlers.cpp?cvsroot=gnash&r1=1.204&r2=1.205

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.5826
retrieving revision 1.5827
diff -u -b -r1.5826 -r1.5827
--- ChangeLog   6 Mar 2008 15:47:21 -0000       1.5826
+++ ChangeLog   6 Mar 2008 16:17:43 -0000       1.5827
@@ -1,3 +1,8 @@
+2008-03-06 Benjamin Wolsey <address@hidden>
+
+       * server/vm/ASHandlers.cpp: implement MbOrd for SWF6+ and utf-8,
+         clean up the other chr and ord functions a bit.
+
 2008-03-06 Sandro Santilli <address@hidden>
 
        * libbase/GC.cpp: minor thing, don't call std::list::size() twice each

Index: server/asobj/Global.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/Global.cpp,v
retrieving revision 1.95
retrieving revision 1.96
diff -u -b -r1.95 -r1.96

Index: server/vm/ASHandlers.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/vm/ASHandlers.cpp,v
retrieving revision 1.204
retrieving revision 1.205
diff -u -b -r1.204 -r1.205
--- server/vm/ASHandlers.cpp    6 Mar 2008 11:11:49 -0000       1.204
+++ server/vm/ASHandlers.cpp    6 Mar 2008 16:17:44 -0000       1.205
@@ -1672,38 +1672,32 @@
 
     // If the argument to chr() is '0', we return
     // nothing, not NULL
-    if (c == 0) env.top(0).set_string("");
-    
-    else
+    if (c == 0)
     {
+        env.top(0).set_string("");
+        return;
+    }
 
-        int version = env.get_version();
-
-        std::wstring ret = L"";
-        
-        if (version > 5) ret.push_back(static_cast<wchar_t>(c));
+    if (env.get_version() > 5)
+    {
+        env.top(0).set_string(utf8::encodeUnicodeCharacter(c));
+        return;
+    }
 
+    // SWF 5 only:
        // This casts to unsigned char to a string, giving
        // IS0-8859-1 8-bit characters.
        // Values above 256 evaluate to value % 256, 
-       // which is expected behaviour.
-        else
-        {
-            unsigned char uc = static_cast<unsigned char>(c);
+       // through the cast, which is expected behaviour.
+    const unsigned char uc = static_cast<unsigned char>(c);
             if (uc == 0)
             {
                 env.top(0).set_string("");
                 return;
             }
-            else
-            {
-                ret.push_back(uc);
-            }
-        }
-
-        env.top(0).set_string(utf8::encodeCanonicalString(ret, version));
-
-    }
+    std::string s;
+    s.push_back(uc);
+    env.top(0).set_string(s);
 }
 
 void
@@ -1790,11 +1784,30 @@
 }
 
 void
-SWFHandlers::ActionMbOrd(ActionExec& /*thread*/)
+SWFHandlers::ActionMbOrd(ActionExec& thread)
 {
-//    GNASH_REPORT_FUNCTION;
-//    as_environment& env = thread.env;
-    log_unimpl (__PRETTY_FUNCTION__);
+    /// This only deals with UTF-8 characters.
+    /// TODO: what else is possible?
+    /// TODO: fix for SWF5
+
+    as_environment& env = thread.env;
+
+    if (env.get_version() == 5)
+    {
+        log_unimpl("Not properly implemented for SWF5");
+        // No need to return - it works a bit.
+    }
+
+    thread.ensureStack(1);
+
+    const std::string s = env.top(0).to_string();
+    
+    std::string::const_iterator it = s.begin();
+    
+    boost::uint32_t out = utf8::decodeNextUnicodeCharacter(it);
+    
+    /// Always valid, or can it be undefined?
+    env.top(0).set_int(out);
 }
 
 void
@@ -1803,8 +1816,16 @@
     /// This only generates UTF-8 characters. No idea
     /// what difference user locale might make, but UTF-8
     /// is generally GOOD.
+    
+    /// TODO: fix for SWF5
     as_environment& env = thread.env;
 
+    if (env.get_version() == 5)
+    {
+        log_unimpl("Not properly implemented for SWF5");
+        // No need to return.
+    }
+
     thread.ensureStack(1);
 
     // Cut to uint16, as characters above 65535 'wrap around'




reply via email to

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