[Top][All Lists]
[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
- [Gnash-commit] gnash ./ChangeLog server/action.cpp, Michael Carlson, 2006/02/02
- [Gnash-commit] gnash ./ChangeLog server/action.cpp, Michael Carlson, 2006/02/03
- [Gnash-commit] gnash ./ChangeLog server/action.cpp, Michael Carlson, 2006/02/04
- [Gnash-commit] gnash ./ChangeLog server/action.cpp, Michael Carlson, 2006/02/04
- [Gnash-commit] gnash ./ChangeLog server/action.cpp, strk, 2006/02/06
- [Gnash-commit] gnash ./ChangeLog server/action.cpp, Michael Carlson, 2006/02/08
- [Gnash-commit] gnash ./ChangeLog server/action.cpp,
Michael Carlson <=