gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ./ChangeLog server/action.cpp


From: Michael Carlson
Subject: [Gnash-commit] gnash ./ChangeLog server/action.cpp
Date: Thu, 09 Feb 2006 15:11:39 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Branch:         
Changes by:     Michael Carlson <address@hidden>        06/02/09 15:11:39

Modified files:
        .              : ChangeLog 
        server         : action.cpp 

Log message:
        Implement _global.unescape

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/ChangeLog.diff?tr1=1.111&tr2=1.112&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/server/action.cpp.diff?tr1=1.34&tr2=1.35&r1=text&r2=text

Patches:
Index: gnash/ChangeLog
diff -u gnash/ChangeLog:1.111 gnash/ChangeLog:1.112
--- gnash/ChangeLog:1.111       Thu Feb  9 12:04:58 2006
+++ gnash/ChangeLog     Thu Feb  9 15:11:39 2006
@@ -4,12 +4,13 @@
 
 2006-02-09 Michael Carlson <address@hidden>
 
-       * server/action.cpp: implement _global.parseInt for all cases
-       Implement _global.parseFloat, and _global.isNan,
-       _global.isFinite
-       * server/action.h: add as_value::is_finite() for internal use
+       * server/action.cpp: Implement _global.parseInt for all cases.
+       Also implement _global.parseFloat, and _global.isNan,
+       _global.isFinite, _global.unescape
+       * server/action.h: add as_value::is_finite(), set_nan for
+       ease of use
        * testsuite/actionscript.all: add and fix up parseInt test cases
-       add some parseFloat test cases
+       also add some parseFloat test cases
 
 2006-02-08  Rob Savoye  <address@hidden>
 
Index: gnash/server/action.cpp
diff -u gnash/server/action.cpp:1.34 gnash/server/action.cpp:1.35
--- gnash/server/action.cpp:1.34        Thu Feb  9 10:02:17 2006
+++ gnash/server/action.cpp     Thu Feb  9 15:11:39 2006
@@ -102,15 +102,11 @@
 //
 // Number.toString() -- takes an optional arg that specifies the base
 //
-// parseFloat()
-//
 // Boolean() type cast
 //
 // typeof operator --> "number", "string", "boolean", "object" (also
 // for arrays), "null", "movieclip", "function", "undefined"
 //
-// isNaN()
-//
 // Number.MAX_VALUE, Number.MIN_VALUE
 //
 // String.fromCharCode()
@@ -1055,6 +1051,124 @@
                fn.result->set_bool(!fn.arg(0).is_finite());
        }
 
+       void as_global_unescape(const fn_call& fn)
+       {
+               assert(fn.nargs == 1);
+
+               std::string input = fn.arg(0).to_string();
+               std::string insertst;
+               int hexcode;
+
+               for (int i=0;i<input.length();)
+               {
+                       if ((int(input.length()) > i + 2) && input[i] == '%' &&
+                               isxdigit(input[i+1]) && isxdigit(input[i+2]))
+                       {
+                               input[i+1] = toupper(input[i+1]);
+                               input[i+2] = toupper(input[i+2]);
+                               if (isdigit(input[i+1]))
+                                       hexcode = (input[i+1] - '0') * 16;
+                               else
+                                       hexcode = (input[i+1] - 'A' + 10) * 16;
+
+                               if (isdigit(input[i+2]))
+                                       hexcode += (input[i+2] - '0');
+                               else
+                                       hexcode += (input[i+2] - 'A' + 10);
+
+                               input.erase(i,3);
+                               
+                               switch (hexcode)
+                               {
+                               case 0x20: // space
+                                       insertst = ' ';
+                                       break;
+                               case 0x22: // "
+                                       insertst = '\"';
+                                       break;
+                               case 0x23: // #
+                                       insertst = '#';
+                                       break;
+                               case 0x24: // $
+                                       insertst = '$';
+                                       break;
+                               case 0x25: // %
+                                       insertst = '%';
+                                       break;
+                               case 0x26: // &
+                                       insertst = '&';
+                                       break;
+                               case 0x2B: // +
+                                       insertst = '+';
+                                       break;
+                               case 0x2C: // ,
+                                       insertst = ',';
+                                       break;
+                               case 0x2F: // /
+                                       insertst = '/';
+                                       break;
+                               case 0x3A: // :
+                                       insertst = ':';
+                                       break;
+                               case 0x3B: // ;
+                                       insertst = ';';
+                                       break;
+                               case 0x3C: // <
+                                       insertst = '<';
+                                       break;
+                               case 0x3D: // =
+                                       insertst = '=';
+                                       break;
+                               case 0x3E: // >
+                                       insertst = '>';
+                                       break;
+                               case 0x3F: // ?
+                                       insertst = '?';
+                                       break;
+                               case 0x40: // @
+                                       insertst = '@';
+                                       break;
+                               case 0x5B: // [
+                                       insertst = '[';
+                                       break;
+                               case 0x5C: // \ (backslash)
+                                       insertst = '\\';
+                                       break;
+                               case 0x5D: // ]
+                                       insertst = ']';
+                                       break;
+                               case 0x5E: // ^
+                                       insertst = '^';
+                                       break;
+                               case 0x60: // `
+                                       insertst = '`';
+                                       break;
+                               case 0x7B: // {
+                                       insertst = '{';
+                                       break;
+                               case 0x7C: // |
+                                       insertst = '|';
+                                       break;
+                               case 0x7D: // }
+                                       insertst = '}';
+                                       break;
+                               case 0x7E: // ~
+                                       insertst = '~';
+                                       break;
+                               default:
+                                       IF_VERBOSE_ACTION(log_error("unescape() 
function reached "
+                                               "unknown hexcode %d, aborting 
unescape()\n",hexcode));
+                                       
fn.result->set_string(fn.arg(0).to_string());
+                                       return;
+                               }
+                               input.insert(i,insertst);
+                       }
+                       else
+                               i++;
+               }
+               fn.result->set_string(input.c_str());
+       }
+
        void as_global_parsefloat(const fn_call& fn)
        {
                assert(fn.nargs == 1);
@@ -1325,10 +1439,12 @@
                        s_global->set_member("Video", as_value(video_new));
                        // ASSetPropFlags
                        s_global->set_member("ASSetPropFlags", 
as_global_assetpropflags);
-                       // parseInt
-                       s_global->set_member("parseInt", as_global_parseint);
+                       // unescape
+                       s_global->set_member("unescape", as_global_unescape);
                        // parseFloat
                        s_global->set_member("parseFloat", 
as_global_parsefloat);
+                       // parseInt
+                       s_global->set_member("parseInt", as_global_parseint);
                        // isNan
                        s_global->set_member("isNan", as_global_isnan);
                        // isFinite




reply via email to

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