[Top][All Lists]
[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'
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash ChangeLog server/asobj/Global.cpp server/...,
Benjamin Wolsey <=