[prev in list] [next in list] [prev in thread] [next in thread]
List: php-gtk-cvs
Subject: [php-gtk-cvs] cvs: php-gtk /ext/gtk+ Makefile.frag php_gtk+.c php_gtk+.h /generator generator.php s
From: "Andrei Zmievski" <andrei () php ! net>
Date: 2004-08-14 21:09:52
Message-ID: cvsandrei1092517792 () cvsserver
[Download RAW message or body]
andrei Sat Aug 14 17:09:52 2004 EDT
Modified files:
/php-gtk/ext/gtk+ Makefile.frag php_gtk+.c php_gtk+.h
/php-gtk/generator generator.php scheme.php templates.php
/php-gtk/main php_gtk.h phpg_gobject.c
Log:
* Modified generator.php to take -f option that specifies the output
file. If -f is not specified, the output goes to stdout.
* Move object sorting code into defs parser.
* Implement enum/flags registration. They now live inside top-level
classes, e.g. Gtk::, Atk::, etc.
["andrei-20040814170952.txt" (text/plain)]
http://cvs.php.net/diff.php/php-gtk/ext/gtk+/Makefile.frag?r1=1.5&r2=1.6&ty=u
Index: php-gtk/ext/gtk+/Makefile.frag
diff -u php-gtk/ext/gtk+/Makefile.frag:1.5 php-gtk/ext/gtk+/Makefile.frag:1.6
--- php-gtk/ext/gtk+/Makefile.frag:1.5 Sat Aug 14 02:15:08 2004
+++ php-gtk/ext/gtk+/Makefile.frag Sat Aug 14 17:09:51 2004
@@ -30,6 +30,7 @@
-r gdk-types.defs \
-r gtk-types.defs \
-o $(*F).overrides \
- -p $(*F) $(*F).defs > $(@F) \
+ -p $(*F) \
+ -f $(@F) $(*F).defs \
&& grep -h "^PHP_GTK_EXPORT_CE" $(@F) | sed -e "s!^!extern !" > gen_$(*F).h \
)
http://cvs.php.net/diff.php/php-gtk/ext/gtk+/php_gtk+.c?r1=1.18&r2=1.19&ty=u
Index: php-gtk/ext/gtk+/php_gtk+.c
diff -u php-gtk/ext/gtk+/php_gtk+.c:1.18 php-gtk/ext/gtk+/php_gtk+.c:1.19
--- php-gtk/ext/gtk+/php_gtk+.c:1.18 Sat Aug 14 02:15:09 2004
+++ php-gtk/ext/gtk+/php_gtk+.c Sat Aug 14 17:09:51 2004
@@ -18,7 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-/* $Id: php_gtk+.c,v 1.18 2004/08/14 06:15:09 andrei Exp $: */
+/* $Id: php_gtk+.c,v 1.19 2004/08/14 21:09:51 andrei Exp $: */
#include "php_gtk.h"
#include "SAPI.h"
@@ -171,6 +171,12 @@
phpg_gdk_register_classes();
phpg_atk_register_classes();
phpg_pango_register_classes();
+
+ phpg_atk_register_constants("ATK_");
+ phpg_pango_register_constants("PANGO_");
+ phpg_gdk_register_constants("GDK_");
+ phpg_gtk_register_constants("GTK_");
+
//php_gtk_plus_register_types(module_number);
return SUCCESS;
http://cvs.php.net/diff.php/php-gtk/ext/gtk+/php_gtk+.h?r1=1.15&r2=1.16&ty=u
Index: php-gtk/ext/gtk+/php_gtk+.h
diff -u php-gtk/ext/gtk+/php_gtk+.h:1.15 php-gtk/ext/gtk+/php_gtk+.h:1.16
--- php-gtk/ext/gtk+/php_gtk+.h:1.15 Thu Aug 12 03:26:14 2004
+++ php-gtk/ext/gtk+/php_gtk+.h Sat Aug 14 17:09:51 2004
@@ -18,7 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-/* $Id: php_gtk+.h,v 1.15 2004/08/12 07:26:14 andrei Exp $: */
+/* $Id: php_gtk+.h,v 1.16 2004/08/14 21:09:51 andrei Exp $: */
#ifndef _PHP_GTK_PLUS_H
#define _PHP_GTK_PLUS_H
@@ -114,10 +114,15 @@
zval *php_gtk_fixed_child_new(GtkFixedChild *fixed_child);
zval *php_gtk_clist_row_new(GtkCListRow *clist_row);
-void php_gtk_register_constants(int module_number TSRMLS_DC);
-void php_gdk_register_constants(int module_number TSRMLS_DC);
-void php_gtk_register_classes(void);
-void php_gdk_register_classes(void);
+void phpg_atk_register_constants(const char *strip_prefix);
+void phpg_pango_register_constants(const char *strip_prefix);
+void phpg_gdk_register_constants(const char *strip_prefix);
+void phpg_gtk_register_constants(const char *strip_prefix);
+void phpg_atk_register_classes(void);
+void phpg_pango_register_classes(void);
+void phpg_gdk_register_classes(void);
+void phpg_gtk_register_classes(void);
+
void php_gtk_plus_register_types(int module_number);
int php_gtk_array_to_gchar_array(zval *zvalue, gchar ***gchar_array);
http://cvs.php.net/diff.php/php-gtk/generator/generator.php?r1=1.49&r2=1.50&ty=u
Index: php-gtk/generator/generator.php
diff -u php-gtk/generator/generator.php:1.49 php-gtk/generator/generator.php:1.50
--- php-gtk/generator/generator.php:1.49 Sat Aug 14 00:46:57 2004
+++ php-gtk/generator/generator.php Sat Aug 14 17:09:51 2004
@@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-/* $Id: generator.php,v 1.49 2004/08/14 04:46:57 andrei Exp $ */
+/* $Id: generator.php,v 1.50 2004/08/14 21:09:51 andrei Exp $ */
/*
* Significant portions of this generator are based on the pygtk code generator
@@ -487,38 +487,8 @@
$register_class_tpl,
$get_type_tpl;
- /* TODO move sorting to definitions.php */
-
- $objects = $this->parser->objects;
- $pos = 0;
- $num_obj = count($objects);
- //print_r($objects);
- while ($pos < $num_obj) {
- $object = $objects[$pos];
- $parent = $object->parent;
- //print "object: $object->c_name\n";
- //print "parent: $parent\n";
- for ($i = $pos+1; $i < $num_obj; $i++) {
- if ($objects[$i]->c_name == $parent) {
- //print "found parent at $i\n";
- //print "removing $object->c_name from $pos\n";
- unset($objects[$pos]);
- //print "inserting $object->c_name after " . $i . "\n";
- array_splice($objects, $i+1, 0, array($object));
- break;
- }
- }
- if ($i == $num_obj)
- $pos++;
- }
- /*
- foreach ($objects as $object) {
- print $object->c_name . " <- " . $object->parent . "\n";
- }
- */
-
- foreach ($objects as $object) {
- fprintf(STDERR, $object->name. "\n");
+ foreach ($this->parser->objects as $object) {
+ fprintf(STDERR, $object->c_name. "\n");
$object_module = strtolower($object->in_module);
$object_lname = strtolower($object->name);
@@ -646,6 +616,31 @@
$this->register_classes .= "\n" . implode("\n", \
$this->overrides->get_register_classes()); }
+ function write_enums($fp)
+ {
+ global $register_constants_tpl,
+ $register_enum_tpl;
+
+ if (!$this->parser->enums) return;
+
+ fwrite($fp, "\n/* Enums and Flags */\n");
+
+ $enums_code = '';
+
+ foreach ($this->parser->enums as $enum) {
+ if ($enum->typecode === null) {
+ throw new Exception("unhandled enum type");
+ foreach ($enum->values as $nick => $value) {
+ }
+ } else {
+ $enums_code .= sprintf($register_enum_tpl, $enum->def_type,
+ $enum->typecode, $this->lprefix . '_ce');
+ }
+ }
+
+ fwrite($fp, sprintf($register_constants_tpl, $this->lprefix, $enums_code));
+ }
+
function write_functions($fp, $separate_class, &$functions_decl)
{
global $function_entry_tpl,
@@ -658,6 +653,7 @@
if ($separate_class)
$functions_decl = sprintf($functions_decl_tpl, $this->lprefix);
+ /* XXX fix
foreach ($this->parser->functions as $function) {
if ($this->overrides->is_overriden($function->c_name)) {
list($function_name, $function_override) = \
$this->overrides->get_override($function->c_name); @@ -692,10 +688,11 @@
}
}
}
+ */
if ($separate_class)
$functions_decl .= $this->functions_decl_end;
- if ($num_functions > 0) {
+ // XXX if ($num_functions > 0) {
if ($separate_class) {
/*
$this->register_classes .= sprintf($init_class_tpl,
@@ -705,13 +702,11 @@
*/
$this->register_classes .= sprintf($register_class_tpl,
$this->lprefix . '_ce',
- $this->prefix,
- $this->lprefix,
- 'NULL', 0, 'NULL');
- fwrite($fp, sprintf($class_entry_tpl, $this->lprefix . '_ce'));
+ $this->lprefix, $this->lprefix,
+ 'NULL', 0);
fwrite($fp, $functions_decl);
}
- }
+ //}
}
function write_prop_lists($fp)
@@ -738,19 +733,24 @@
{
global $class_entry_tpl;
+ /* XXX
foreach ($this->parser->structs as $struct)
fwrite($fp, sprintf($class_entry_tpl, $struct->ce));
+ */
foreach ($this->parser->objects as $object)
fwrite($fp, sprintf($class_entry_tpl, $object->ce));
foreach ($this->overrides->get_register_classes() as $ce => $rest)
fwrite($fp, sprintf($class_entry_tpl, $ce));
+
+ fwrite($fp, sprintf($class_entry_tpl, $this->lprefix . '_ce'));
}
- function create_source()
+ function create_source($savefile)
{
- global $register_classes_tpl;
+ global $register_classes_tpl,
+ $register_class_tpl;
- $fp = fopen('php://stdout', 'w');
+ $fp = fopen($savefile, 'w');
fwrite($fp, "#include \"php_gtk.h\"");
fwrite($fp, "\n#if HAVE_PHP_GTK\n");
fwrite($fp, $this->overrides->get_headers());
@@ -760,6 +760,8 @@
//if (!isset($this->parser->objects[$this->function_class]))
// $this->write_functions($fp, true, $dummy);
//$this->write_structs($fp);
+ $this->write_enums($fp);
+ $this->write_functions($fp, true, $dummy);
$this->write_objects($fp);
fwrite($fp, sprintf($register_classes_tpl,
$this->lprefix,
@@ -815,9 +817,9 @@
array_walk($argv, create_function('&$x', '$x = urldecode($x);'));
-$result = Console_Getopt::getopt($argv, 'o:p:c:r:');
+$result = Console_Getopt::getopt($argv, 'o:p:c:r:f:');
if (!$result || count($result[1]) < 2)
- fatal_error("usage: php -q generator.php [-o overridesfile] [-p prefix] [-c \
functionclass ] [-r typesfile] defsfile\n"); + fatal_error("usage: php -q \
generator.php [-o overridesfile] [-p prefix] [-c functionclass ] [-r typesfile] [-f \
savefile] defsfile\n");
list($opts, $argv) = $result;
@@ -825,6 +827,7 @@
$function_class = null;
$overrides = new Overrides();
$register_defs = array();
+$savefile = 'php://stdout';
foreach ($opts as $opt) {
list($opt_spec, $opt_arg) = $opt;
@@ -836,6 +839,8 @@
$function_class = $opt_arg;
} else if ($opt_spec == 'r') {
$register_defs[] = $opt_arg;
+ } else if ($opt_spec == 'f') {
+ $savefile = $opt_arg;
}
}
@@ -852,7 +857,7 @@
}
$parser->start_parsing();
$generator->register_types();
-$generator->create_source();
+$generator->create_source($savefile);
error_reporting($old_error_reporting);
http://cvs.php.net/diff.php/php-gtk/generator/scheme.php?r1=1.19&r2=1.20&ty=u
Index: php-gtk/generator/scheme.php
diff -u php-gtk/generator/scheme.php:1.19 php-gtk/generator/scheme.php:1.20
--- php-gtk/generator/scheme.php:1.19 Thu Aug 12 03:26:15 2004
+++ php-gtk/generator/scheme.php Sat Aug 14 17:09:52 2004
@@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-/* $Id: scheme.php,v 1.19 2004/08/12 07:26:15 andrei Exp $ */
+/* $Id: scheme.php,v 1.20 2004/08/14 21:09:52 andrei Exp $ */
require "definitions.php";
@@ -150,6 +150,28 @@
$tree = $this->parse_tree;
foreach ($tree as $node)
$this->handle($node);
+
+ /*
+ * Sort the objects list so that the child objects always come after
+ * parent ones.
+ */
+ $objects = $this->objects;
+ $pos = 0;
+ $num_obj = count($objects);
+ while ($pos < $num_obj) {
+ $object = $objects[$pos];
+ $parent = $object->parent;
+ for ($i = $pos+1; $i < $num_obj; $i++) {
+ if ($objects[$i]->c_name == $parent) {
+ unset($objects[$pos]);
+ array_splice($objects, $i+1, 0, array($object));
+ break;
+ }
+ }
+ if ($i == $num_obj)
+ $pos++;
+ }
+ $this->objects = $objects;
if (is_writeable($this->file_path)) {
$cache_file = $this->file_path . '/' . $this->file_name . '.cache';
http://cvs.php.net/diff.php/php-gtk/generator/templates.php?r1=1.25&r2=1.26&ty=u
Index: php-gtk/generator/templates.php
diff -u php-gtk/generator/templates.php:1.25 php-gtk/generator/templates.php:1.26
--- php-gtk/generator/templates.php:1.25 Sat Aug 14 01:28:51 2004
+++ php-gtk/generator/templates.php Sat Aug 14 17:09:52 2004
@@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-/* $Id: templates.php,v 1.25 2004/08/14 05:28:51 andrei Exp $ */
+/* $Id: templates.php,v 1.26 2004/08/14 21:09:52 andrei Exp $ */
$function_tpl = "
PHP_FUNCTION(%s)
@@ -116,7 +116,6 @@
%s
}\n";
-
$register_class_tpl = "
%s = phpg_register_class(\"%s\", %s_methods, %s, 0, NULL, NULL, %s TSRMLS_CC);\n";
@@ -168,6 +167,16 @@
%s
return 1;
}\n\n";
+
+$register_constants_tpl = "
+void phpg_%s_register_constants(const char *strip_prefix)
+{
+ TSRMLS_FETCH();
+
+%s
+}\n";
+
+$register_enum_tpl = "\tphpg_register_%s(%s, strip_prefix, %s);\n";
/* vim: set et sts=4: */
?>
http://cvs.php.net/diff.php/php-gtk/main/php_gtk.h?r1=1.77&r2=1.78&ty=u
Index: php-gtk/main/php_gtk.h
diff -u php-gtk/main/php_gtk.h:1.77 php-gtk/main/php_gtk.h:1.78
--- php-gtk/main/php_gtk.h:1.77 Sat Aug 14 03:16:11 2004
+++ php-gtk/main/php_gtk.h Sat Aug 14 17:09:52 2004
@@ -18,7 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-/* $Id: php_gtk.h,v 1.77 2004/08/14 07:16:11 andrei Exp $: */
+/* $Id: php_gtk.h,v 1.78 2004/08/14 21:09:52 andrei Exp $: */
#ifndef _PHP_GTK_H
#define _PHP_GTK_H
@@ -239,6 +239,9 @@
extern char *php_gtk_zval_type_name(zval *arg);
void phpg_register_exceptions();
+
+PHP_GTK_API void phpg_register_enum(GType gtype, const char *strip_prefix, \
zend_class_entry *ce); +PHP_GTK_API void phpg_register_flags(GType gtype, const char \
*strip_prefix, zend_class_entry *ce);
void phpg_gtype_register_self();
PHP_GTK_API zval* phpg_gtype_new(GType type);
http://cvs.php.net/diff.php/php-gtk/main/phpg_gobject.c?r1=1.9&r2=1.10&ty=u
Index: php-gtk/main/phpg_gobject.c
diff -u php-gtk/main/phpg_gobject.c:1.9 php-gtk/main/phpg_gobject.c:1.10
--- php-gtk/main/phpg_gobject.c:1.9 Sat Aug 14 03:15:58 2004
+++ php-gtk/main/phpg_gobject.c Sat Aug 14 17:09:52 2004
@@ -324,6 +324,77 @@
}
/* }}} */
+/* {{{ PHP_GTK_API phpg_register_enum() */
+void phpg_register_enum(GType gtype, const char *strip_prefix, zend_class_entry *ce)
+{
+ GEnumClass *eclass;
+ char *enum_name;
+ int i, j;
+ int prefix_len;
+
+ g_return_if_fail(ce != NULL);
+ g_return_if_fail(g_type_is_a(gtype, G_TYPE_ENUM));
+
+ if (strip_prefix) {
+ prefix_len = strlen(strip_prefix);
+ }
+
+ eclass = G_ENUM_CLASS(g_type_class_ref(gtype));
+ for (i = 0; i < eclass->n_values; i++) {
+ zval *val;
+
+ MAKE_STD_ZVAL(val);
+ ZVAL_LONG(val, eclass->values[i].value);
+ enum_name = eclass->values[i].value_name;
+ if (strip_prefix) {
+ for (j = prefix_len; j >= 0; j--) {
+ if (g_ascii_isalpha(enum_name[j]) || enum_name[j] == '_') {
+ enum_name = &enum_name[j];
+ break;
+ }
+ }
+ }
+ zend_hash_update(&ce->constants_table, enum_name, strlen(enum_name)+1, &val, \
sizeof(zval *), NULL); + }
+ g_type_class_unref(eclass);
+}
+/* }}} */
+/* {{{ PHP_GTK_API phpg_register_flags() */
+void phpg_register_flags(GType gtype, const char *strip_prefix, zend_class_entry \
*ce) +{
+ GFlagsClass *eclass;
+ char *enum_name;
+ int i, j;
+ int prefix_len;
+
+ g_return_if_fail(ce != NULL);
+ g_return_if_fail(g_type_is_a(gtype, G_TYPE_FLAGS));
+
+ if (strip_prefix) {
+ prefix_len = strlen(strip_prefix);
+ }
+
+ eclass = G_FLAGS_CLASS(g_type_class_ref(gtype));
+ for (i = 0; i < eclass->n_values; i++) {
+ zval *val;
+
+ MAKE_STD_ZVAL(val);
+ ZVAL_LONG(val, eclass->values[i].value);
+ enum_name = eclass->values[i].value_name;
+ if (strip_prefix) {
+ for (j = prefix_len; j >= 0; j--) {
+ if (g_ascii_isalpha(enum_name[j]) || enum_name[j] == '_') {
+ enum_name = &enum_name[j];
+ break;
+ }
+ }
+ }
+ zend_hash_update(&ce->constants_table, enum_name, strlen(enum_name)+1, &val, \
sizeof(zval *), NULL); + }
+ g_type_class_unref(eclass);
+}
+/* }}} */
+
/* {{{ PHP_GTK_API phpg_gobject_set_wrapper() */
PHP_GTK_API void phpg_gobject_set_wrapper(zval *zobj, GObject *obj TSRMLS_DC)
{
@@ -433,4 +504,4 @@
#endif /* HAVE_PHP_GTK */
-/* vim: set fdm=marker et : */
+/* vim: set fdm=marker et sts=4: */
--
PHP-GTK CVS Mailing List (http://gtk.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic