Benjamin Otte
2007-Jul-13 20:08 UTC
[Swfdec] 4 commits - configure.ac libswfdec/swfdec_as_internal.h libswfdec/swfdec_as_object.h libswfdec/swfdec_scriptable.c libswfdec/swfdec_scriptable.h NEWS
NEWS | 16 ++ configure.ac | 2 libswfdec/swfdec_as_internal.h | 3 libswfdec/swfdec_as_object.h | 3 libswfdec/swfdec_scriptable.c | 304 ----------------------------------------- libswfdec/swfdec_scriptable.h | 78 ---------- 6 files changed, 20 insertions(+), 386 deletions(-) New commits: diff-tree 7cc9628502fc44902e0fbe812569c533b87a02b2 (from 448b339d6fc1719b265dac580eea335a07f2f1f8) Author: Benjamin Otte <otte at gnome.org> Date: Fri Jul 13 21:54:59 2007 +0200 release 0.5.0 diff --git a/configure.ac b/configure.ac index bc89a09..1775f6e 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_PREREQ([2.58]) -AC_INIT(swfdec,0.4.99.1) +AC_INIT(swfdec,0.5.0) [nano=$(echo $PACKAGE_VERSION | sed 's/[0-9]\.[0-9]\.[0-9][0-9]*\.*//')] if test x"$nano" = x1 ; then diff-tree 448b339d6fc1719b265dac580eea335a07f2f1f8 (from 7b8a7526b5fec8d7129f461bb318baa85eb3d257) Author: Benjamin Otte <otte at gnome.org> Date: Fri Jul 13 21:54:47 2007 +0200 update NEWS diff --git a/NEWS b/NEWS index 8713fb7..fc07dc9 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,20 @@ + 0.5.0 ("Meet Plan Party!") + +Here's the long overdue update. Lots of backend stuff was rewritten. The only +thing that is missing now is more features. Expect them in the next releases. +- New and more correct script interpreter engine. The engine is even exported + for your coding pleasure. +- New instance placement handling algorithm. This one seems to produce much + better correctness results than the old one. +- More ActionScript bytecodes are supported, in particular CloneSprite and + RemoveSprite +- improve String reading in earlier Flash versions (Flash <=5 is Latin1, not + UTF8) +- implement some more Actionscript functions (most important is probably + createEmptyMovieClip ()) +- lots of bugfixes + 0.4.5 ("Death of the Desktop") This is strictly a bugfix release. Have fun. diff-tree 7b8a7526b5fec8d7129f461bb318baa85eb3d257 (from d617bb496e5aa49a138dd34a62dc20b240aed089) Author: Benjamin Otte <otte at gnome.org> Date: Fri Jul 13 21:14:16 2007 +0200 remove swfdec_as_object_run() from exported headers SwfdecScript is not exported, so it cannot be public diff --git a/libswfdec/swfdec_as_internal.h b/libswfdec/swfdec_as_internal.h index 00d56db..ca6ab2d 100644 --- a/libswfdec/swfdec_as_internal.h +++ b/libswfdec/swfdec_as_internal.h @@ -41,6 +41,7 @@ void swfdec_as_function_init_context (S typedef SwfdecAsVariableForeach SwfdecAsVariableForeachRemove; typedef const char *(* SwfdecAsVariableForeachRename) (SwfdecAsObject *object, const char *variable, SwfdecAsValue *value, guint flags, gpointer data); + void swfdec_as_object_collect (SwfdecAsObject * object); guint swfdec_as_object_foreach_remove (SwfdecAsObject * object, SwfdecAsVariableForeach func, @@ -48,6 +49,8 @@ guint swfdec_as_object_foreach_remove ( void swfdec_as_object_foreach_rename (SwfdecAsObject * object, SwfdecAsVariableForeachRename func, gpointer data); +void swfdec_as_object_run (SwfdecAsObject * object, + SwfdecScript * script); void swfdec_as_object_init_context (SwfdecAsContext * context, guint version); diff --git a/libswfdec/swfdec_as_object.h b/libswfdec/swfdec_as_object.h index d109a72..d796518 100644 --- a/libswfdec/swfdec_as_object.h +++ b/libswfdec/swfdec_as_object.h @@ -22,7 +22,6 @@ #include <glib-object.h> #include <libswfdec/swfdec_as_types.h> -#include <libswfdec/swfdec_types.h> G_BEGIN_DECLS @@ -143,8 +142,6 @@ SwfdecAsFunction *swfdec_as_object_add_f SwfdecAsNative native, guint min_args); -void swfdec_as_object_run (SwfdecAsObject * object, - SwfdecScript * script); gboolean swfdec_as_object_has_function (SwfdecAsObject * object, const char * name); void swfdec_as_object_call (SwfdecAsObject * object, diff-tree d617bb496e5aa49a138dd34a62dc20b240aed089 (from 6748f0ab9c6c1c49667e186bce8dc618cab95ad1) Author: Benjamin Otte <otte at gnome.org> Date: Fri Jul 13 21:12:36 2007 +0200 remove 2 old files that aren't in use anymore diff --git a/libswfdec/swfdec_scriptable.c b/libswfdec/swfdec_scriptable.c deleted file mode 100644 index 951a726..0000000 --- a/libswfdec/swfdec_scriptable.c +++ /dev/null @@ -1,304 +0,0 @@ -/* Swfdec - * Copyright (C) 2007 Benjamin Otte <otte at gnome.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301 USA - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "swfdec_scriptable.h" -#include "swfdec_debug.h" -#include "swfdec_loader_internal.h" -#include "js/jsapi.h" -#include "js/jsfun.h" -#include "js/jsinterp.h" - -G_DEFINE_ABSTRACT_TYPE (SwfdecScriptable, swfdec_scriptable, G_TYPE_OBJECT) - -static void -swfdec_scriptable_dispose (GObject *object) -{ - SwfdecScriptable *script = SWFDEC_SCRIPTABLE (object); - - g_assert (script->jsobj == NULL); - - G_OBJECT_CLASS (swfdec_scriptable_parent_class)->dispose (object); -} - -static JSObject * -swfdec_scriptable_create_js_object (SwfdecScriptable *scriptable) -{ - SwfdecScriptableClass *klass; - JSContext *cx; - JSObject *obj; - - klass = SWFDEC_SCRIPTABLE_GET_CLASS (scriptable); - g_return_val_if_fail (klass->jsclass != NULL, NULL); - cx = scriptable->jscx; - - obj = JS_NewObject (cx, (JSClass *) klass->jsclass, NULL, NULL); - if (obj == NULL) { - SWFDEC_ERROR ("failed to create JS object for %s %p", - G_OBJECT_TYPE_NAME (scriptable), scriptable); - return NULL; - } - SWFDEC_LOG ("created JSObject %p for %s %p", obj, - G_OBJECT_TYPE_NAME (scriptable), scriptable); - g_object_ref (scriptable); - JS_SetPrivate (cx, obj, scriptable); - return obj; -} - -static void -swfdec_scriptable_class_init (SwfdecScriptableClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->dispose = swfdec_scriptable_dispose; - - klass->create_js_object = swfdec_scriptable_create_js_object; -} - -static void -swfdec_scriptable_init (SwfdecScriptable *stream) -{ -} - -/*** PUBLIC API ***/ - -/** - * swfdec_scriptable_finalize: - * @cx: a #JSContext - * @obj: a #JSObject to finalize - * - * This function is intended to be used as the finalizer in the #JSClass used - * by a scriptable subtype. - **/ -void -swfdec_scriptable_finalize (JSContext *cx, JSObject *obj) -{ - SwfdecScriptable *script; - - script = JS_GetPrivate (cx, obj); - /* since we also finalize the prototype, not everyone has a private object */ - if (script) { - g_assert (SWFDEC_IS_SCRIPTABLE (script)); - g_assert (script->jsobj != NULL); - - SWFDEC_LOG ("destroying JSObject %p for %s %p", obj, - G_OBJECT_TYPE_NAME (script), script); - script->jsobj = NULL; - g_object_unref (script); - } else { - SWFDEC_LOG ("destroying JSObject %p without Scriptable (probably a prototype)", obj); - } -} - -JSObject * -swfdec_scriptable_get_object (SwfdecScriptable *scriptable) -{ - SwfdecScriptableClass *klass; - - g_return_val_if_fail (SWFDEC_IS_SCRIPTABLE (scriptable), NULL); - - if (scriptable->jsobj) - return scriptable->jsobj; - klass = SWFDEC_SCRIPTABLE_GET_CLASS (scriptable); - g_return_val_if_fail (klass->create_js_object, NULL); - scriptable->jsobj = klass->create_js_object (scriptable); - - return scriptable->jsobj; -} - -/** - * swfdec_scriptable_from_object: - * @cx: a #JSContext - * @object: the JSObject to convert (NULL is a valid value) - * @type: type of the object to get. - * - * Converts the given @object to a #SwfdecScriptable, if it represents one. - * The object must be of @type, otherwise %NULL will be returned. - * - * Returns: the scriptable represented by @object or NULL if it does not - * reference a @scriptable - **/ -gpointer -swfdec_scriptable_from_object (JSContext *cx, JSObject *object, GType type) -{ - SwfdecScriptableClass *klass; - - g_return_val_if_fail (g_type_is_a (type, SWFDEC_TYPE_SCRIPTABLE), NULL); - - if (object == NULL) - return NULL; - klass = g_type_class_peek (type); - if (klass == NULL) - return NULL; /* class doesn't exist -> no object of this type exists */ - if (!JS_InstanceOf (cx, object, klass->jsclass, NULL)) - return NULL; - return JS_GetPrivate (cx, object); -} - -/** - * swfdec_scriptable_from_jsval: - * @cx: a #JSContext - * @val: the jsval to convert - * @type: type of the object to get. - * - * Converts the given value @val to a #SwfdecScriptable, if it represents one. - * The object must be of @type, otherwise %NULL will be returned. - * - * Returns: the scriptable represented by @val or NULL if @val does not - * reference a @scriptable - **/ -gpointer -swfdec_scriptable_from_jsval (JSContext *cx, jsval val, GType type) -{ - JSObject *object; - - g_return_val_if_fail (g_type_is_a (type, SWFDEC_TYPE_SCRIPTABLE), NULL); - - if (!JSVAL_IS_OBJECT (val)) - return NULL; - object = JSVAL_TO_OBJECT (val); - return swfdec_scriptable_from_object (cx, object, type); -} - -/** - * swfdec_scriptable_set_variables: - * @script: a #SwfdecScriptable - * @variables: variables to set on @script in application-x-www-form-urlencoded - * format - * - * Verifies @variables to be encoded correctly and sets them as string - * properties on the JSObject of @script. - **/ -void -swfdec_scriptable_set_variables (SwfdecScriptable *script, const char *variables) -{ - JSObject *object; - - g_return_if_fail (SWFDEC_IS_SCRIPTABLE (script)); - g_return_if_fail (variables != NULL); - - SWFDEC_DEBUG ("setting variables on %p: %s", script, variables); - object = swfdec_scriptable_get_object (script); - while (TRUE) { - char *name, *value; - JSString *string; - jsval val; - - if (!swfdec_urldecode_one (variables, &name, &value, &variables)) { - SWFDEC_WARNING ("variables invalid at \"%s\"", variables); - break; - } - if (*variables != '\0' && *variables != '&') { - SWFDEC_WARNING ("variables not delimited with & at \"%s\"", variables); - g_free (name); - g_free (value); - break; - } - string = JS_NewStringCopyZ (script->jscx, value); - if (string == NULL) { - g_free (name); - g_free (value); - SWFDEC_ERROR ("could not create string"); - break; - } - val = STRING_TO_JSVAL (string); - if (!JS_SetProperty (script->jscx, object, name, &val)) { - g_free (name); - g_free (value); - SWFDEC_ERROR ("error setting property \"%s\"", name); - break; - } - SWFDEC_DEBUG ("Set variable \"%s\" to \"%s\"", name, value); - g_free (name); - g_free (value); - if (*variables == '\0') - break; - variables++; - } -} - -/** - * swfdec_scriptable_execute: - * @script: a #SwfdecScriptable - * @name: property name that contains the handler - * @n_args: number of arguments to pass to handler - * @args: @n_args arguments that will be passed to handler - * - * Executes a callback function (like onMouseMove) on the scriptable if it is - * defined. - **/ -void -swfdec_scriptable_execute (SwfdecScriptable *script, const char *name, - guint n_args, jsval *args) -{ - JSObject *obj; - jsval fun; - - g_return_if_fail (SWFDEC_IS_SCRIPTABLE (script)); - g_return_if_fail (name != NULL); - g_return_if_fail (n_args == 0 || args != NULL); - - obj = swfdec_scriptable_get_object (script); - if (!obj) - return; - if (!JS_GetProperty (script->jscx, obj, name, &fun)) - return; - if (!JSVAL_IS_OBJECT (fun) || fun == JSVAL_NULL || - JS_GetClass (JSVAL_TO_OBJECT (fun)) != &js_FunctionClass) { - SWFDEC_LOG ("scriptable has no handler for %s event", name); - return; - } - js_InternalCall (script->jscx, obj, fun, n_args, args, &fun); -} - -/** - * swfdec_scriptable_can_execute: - * @script: a #SwfdecScriptable - * @name: name of the function - * - * Checks if @script contains a function property named @name that can be - * executed via swfdec_scriptable_execute(). - * - * Returns: %TRUE if such a function exists, %FALSE otherwise - **/ -gboolean -swfdec_scriptable_can_execute (SwfdecScriptable *script, const char *name) -{ - JSObject *obj; - jsval fun; - - g_return_val_if_fail (SWFDEC_IS_SCRIPTABLE (script), FALSE); - g_return_val_if_fail (name != NULL, FALSE); - - obj = swfdec_scriptable_get_object (script); - if (!obj) - return FALSE; - if (!JS_GetProperty (script->jscx, obj, name, &fun)) - return FALSE; - if (!JSVAL_IS_OBJECT (fun) || fun == JSVAL_NULL || - JS_GetClass (JSVAL_TO_OBJECT (fun)) != &js_FunctionClass) { - SWFDEC_LOG ("scriptable has no handler for %s event", name); - return FALSE; - } - return TRUE; -} - diff --git a/libswfdec/swfdec_scriptable.h b/libswfdec/swfdec_scriptable.h deleted file mode 100644 index a53ca4a..0000000 --- a/libswfdec/swfdec_scriptable.h +++ /dev/null @@ -1,78 +0,0 @@ -/* Swfdec - * Copyright (C) 2007 Benjamin Otte <otte at gnome.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301 USA - */ - -#ifndef _SWFDEC_SCRIPTABLE_H_ -#define _SWFDEC_SCRIPTABLE_H_ - -#include <libswfdec/swfdec.h> -#include <libswfdec/swfdec_types.h> -#include <libswfdec/js/jspubtd.h> - -G_BEGIN_DECLS - -//typedef struct _SwfdecScriptable SwfdecScriptable; -typedef struct _SwfdecScriptableClass SwfdecScriptableClass; - -#define SWFDEC_TYPE_SCRIPTABLE (swfdec_scriptable_get_type()) -#define SWFDEC_IS_SCRIPTABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_SCRIPTABLE)) -#define SWFDEC_IS_SCRIPTABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_SCRIPTABLE)) -#define SWFDEC_SCRIPTABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_SCRIPTABLE, SwfdecScriptable)) -#define SWFDEC_SCRIPTABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_SCRIPTABLE, SwfdecScriptableClass)) -#define SWFDEC_SCRIPTABLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_SCRIPTABLE, SwfdecScriptableClass)) - -struct _SwfdecScriptable { - GObject object; - - JSContext * jscx; /* context for jsobj */ - JSObject * jsobj; /* JS object belonging to us or NULL if none */ -}; - -struct _SwfdecScriptableClass { - GObjectClass object_class; - - const JSClass * jsclass; /* class used by objects of this type (filled by subclasses) */ - /* the default should be good enough most of the time */ - JSObject * (* create_js_object) (SwfdecScriptable * scriptable); -}; - -GType swfdec_scriptable_get_type (void); - -void swfdec_scriptable_finalize (JSContext * cx, - JSObject * obj); - -JSObject * swfdec_scriptable_get_object (SwfdecScriptable * scriptable); -gpointer swfdec_scriptable_from_jsval (JSContext * cx, - jsval val, - GType type); -gpointer swfdec_scriptable_from_object (JSContext * cx, - JSObject * object, - GType type); - -void swfdec_scriptable_set_variables (SwfdecScriptable * script, - const char * variables); -gboolean swfdec_scriptable_can_execute (SwfdecScriptable * script, - const char * name); -void swfdec_scriptable_execute (SwfdecScriptable * script, - const char * name, - guint n_args, - jsval * args); - - -G_END_DECLS -#endif
Possibly Parallel Threads
- 9 commits - libswfdec/js libswfdec/Makefile.am libswfdec/swfdec_audio_stream.c libswfdec/swfdec_audio_stream.h libswfdec/swfdec_cache.c libswfdec/swfdec_cached.c libswfdec/swfdec_cached.h libswfdec/swfdec_edittext_movie.c libswfdec/swfdec_image.c
- 7 commits - libswfdec/swfdec_connection.c libswfdec/swfdec_js_connection.c libswfdec/swfdec_js_movie.c libswfdec/swfdec_js_net_stream.c libswfdec/swfdec_js_xml.c libswfdec/swfdec_net_stream.c libswfdec/swfdec_scriptable.c libswfdec/swfdec_scriptable.h
- 11 commits - libswfdec/Makefile.am libswfdec/swfdec_connection.c libswfdec/swfdec_connection.h libswfdec/swfdec_flv_decoder.c libswfdec/swfdec_js.c libswfdec/swfdec_js_connection.c libswfdec/swfdec_js.h libswfdec/swfdec_js_net_stream.c
- 11 commits - libswfdec/swfdec_event.c libswfdec/swfdec_event.h libswfdec/swfdec_js_movie.c libswfdec/swfdec_movie.c libswfdec/swfdec_scriptable.c libswfdec/swfdec_scriptable.h libswfdec/swfdec_script.c libswfdec/swfdec_sprite.c libswfdec/swfdec_sprite.h
- Branch 'as' - 17 commits - configure.ac doc/Makefile.am doc/swfdec-docs.sgml doc/swfdec-sections.txt doc/swfdec.types libswfdec-gtk/Makefile.am libswfdec-gtk/swfdec-gtk.h libswfdec-gtk/swfdec_gtk_loader.c libswfdec-gtk/swfdec_gtk_loader.h