com gtk/php-gtk: - Allow overriding additional object handlers. - Implement a way to add custom post-registration hooks.: generator/generator.php generator/override.php

[email protected] (David Soria Parra) Sat, 18 Feb 2006 19:43:32 +0000
Newsgroups php.gtk.cvs
Message-ID <[email protected]>
Commit:    2ddcf43b706599ac4a84ac032c7c4bf8db30006d
Author:    Andrei Zmievski <[email protected]>         Sat, 18 Feb 2006 19:43:32 +0000
Parents:   e5d220af3610769053111516058fe801da6f15fc
Branches:  master

Link:       http://git.php.net/?p=gtk/php-gtk.git;a=commitdiff;h=2ddcf43b706599ac4a84ac032c7c4bf8db30006d

Log:
- Allow overriding additional object handlers.
- Implement a way to add custom post-registration hooks.

Changed paths:
  M  generator/generator.php
  M  generator/override.php


Diff:
2ddcf43b706599ac4a84ac032c7c4bf8db30006d
diff --git a/generator/generator.php b/generator/generator.php
index c4e431d..646e478 100644
--- a/generator/generator.php
+++ b/generator/generator.php
@@ -68,7 +68,9 @@ class Generator {
                                                       'prop' => Templates::boxed_prop_access),
                                     'interface' => array('method' => Templates::method_body),
                                    );
-    var $handlers           = array('read_property', 'write_property', 'get_properties');
+    var $handlers           = array('read_property', 'write_property', 'get_properties',
+                                    'read_dimension', 'write_dimension', 'has_dimension',
+                                    'unset_dimension', 'count_elements');
     var $cover              = array();
 
     function Generator(&$parser, &$overrides, $prefix, $function_class)
@@ -483,6 +485,9 @@ class Generator {
         foreach ($this->parser->interfaces as $interface) {
             $reg_info = $this->write_class($interface);
             $register_classes .= aprintf(Templates::register_interface, $reg_info);
+            if ($this->overrides->have_post_registration($interface->c_name)) {
+                $register_classes .= $this->overrides->get_post_registration($interface->c_name);
+            }
         }
         if (!$this->parser->interfaces) {
             $this->log_print("  -- none --  ");
@@ -498,6 +503,9 @@ class Generator {
             }
             $reg_info = $this->write_class($object);
             $register_classes .= aprintf(Templates::register_class, $reg_info);
+            if ($this->overrides->have_post_registration($object->c_name)) {
+                $register_classes .= $this->overrides->get_post_registration($object->c_name);
+            }
         }
         if (!$this->parser->objects) {
             $this->log_print("  -- none --  ");
@@ -508,6 +516,9 @@ class Generator {
         foreach ($this->parser->boxed as $object) {
             $reg_info = $this->write_class($object);
             $register_classes .= aprintf(Templates::register_boxed, $reg_info);
+            if ($this->overrides->have_post_registration($object->c_name)) {
+                $register_classes .= $this->overrides->get_post_registration($object->c_name);
+            }
         }
         if (!$this->parser->boxed) {
             $this->log_print("  -- none --  ");
@@ -516,6 +527,7 @@ class Generator {
         $this->fp->write(sprintf(Templates::register_classes,
                                   $this->lprefix,
                                   $register_classes));
+
     }
     
     function write_prop_handlers($object)
diff --git a/generator/override.php b/generator/override.php
index a71ccba..5e2666c 100644
--- a/generator/override.php
+++ b/generator/override.php
@@ -34,6 +34,7 @@ class Overrides {
     var $register_classes     = array();
     var $headers              = '';
     var $constants            = '';
+    var $post_registration    = array();
     var $lineinfo             = array();
     var $top_dir              = '';
 
@@ -167,6 +168,12 @@ class Overrides {
                 $this->lineinfo["$class.$handler"] = array($blocklineno + 1, $file_name);
                 break;
 
+            case 'post-registration':
+                $class = $words[0];
+                $this->post_registration[$class] = $rest;
+                $this->lineinfo['post-registration'] = array($blocklineno + 1, $file_name);
+                break;
+
             case 'include':
                 $file_name = $words[0];
                 $this->read_file($file_name);
@@ -266,6 +273,17 @@ class Overrides {
         return $this->getprops[$class_name][$prop_name];
     }
 
+    function have_post_registration($class)
+    {
+        return isset($this->post_registration[$class]);
+    }
+
+    function get_post_registration($class)
+    {
+        return $this->post_registration[$class];
+    }
+
+
     function get_headers()
     {
         return $this->headers;