com gtk/php-gtk: Allowing adding extra programmatic fields (properties).: generator/generator.php generator/override.php
[email protected] (David Soria Parra) Fri, 10 Mar 2006 05:26:44 +0000
| Newsgroups | php.gtk.cvs |
|---|---|
| Message-ID | <[email protected]> |
Commit: bf1db4b37dad390fa7b1787cf91962e161bc15dd Author: Andrei Zmievski <[email protected]> Fri, 10 Mar 2006 05:26:44 +0000 Parents: ee088d85b464ff80dbc1cf933bb012a130854d3a Branches: master Link: http://git.php.net/?p=gtk/php-gtk.git;a=commitdiff;h=bf1db4b37dad390fa7b1787cf91962e161bc15dd Log: Allowing adding extra programmatic fields (properties). Changed paths: M generator/generator.php M generator/override.php Diff: bf1db4b37dad390fa7b1787cf91962e161bc15dd diff --git a/generator/generator.php b/generator/generator.php index 3da1815..fc914ba 100644 --- a/generator/generator.php +++ b/generator/generator.php @@ -534,7 +534,7 @@ class Generator { { global $matcher; - if (!$object->fields) { + if (!$object->fields && !$this->overrides->have_extra_props($object->c_name)) { return 'NULL'; } @@ -578,7 +578,7 @@ class Generator { } if (isset($overrides['write'])) { $write_override = preg_replace('!^.*(PHPG_PROP_WRITER).*$!m', "static $1($object->c_name, $field_name)", $overrides['write']); - $this->write_override($overrides['read'], $object->c_name, $field_name, 'write'); + $this->write_override($overrides['write'], $object->c_name, $field_name, 'write'); $this->divert("gen ", "%%%% %-11s %s->%s\n", "writer for", $object->c_name, $field_name); } } else { @@ -604,6 +604,35 @@ class Generator { } catch (Exception $e) { $this->divert("notgen", " %-11s %s->%s: %s\n", "reader for", $object->c_name, $field_name, $e->getMessage()); $num_skipped++; + $this->cover["props"]->skipped(); + } + } + + if ($this->overrides->have_extra_props($object->c_name)) { + foreach ($this->overrides->get_extra_props($object->c_name) as $prop_name => $overrides) { + + $read_func = "PHPG_PROP_READ_FN($object->c_name, $prop_name)"; + $write_func = 'NULL'; + $info = new Wrapper_Info(); + + if (isset($overrides['read'])) { + $read_override = preg_replace('!^.*(PHPG_PROP_READER).*$!m', "$1($object->c_name, $prop_name)", $overrides['read']); + $this->write_override($read_override, $object->c_name, $prop_name, 'read', 'extra'); + $this->divert("gen", "%%%% %-11s %s->%s\n", "reader for", $object->c_name, $prop_name); + $this->cover["props"]->written(); + } else { + $read_func = 'NULL'; + } + + if (isset($overrides['write'])) { + $write_override = preg_replace('!^.*(PHPG_PROP_WRITER).*$!m', "static $1($object->c_name, $prop_name)", $overrides['write']); + $this->write_override($overrides['write'], $object->c_name, $prop_name, 'write', 'extra'); + $this->divert("gen ", "%%%% %-11s %s->%s\n", "writer for", $object->c_name, $prop_name); + } + + $prop_defs[] = sprintf(Templates::prop_info_entry, + $prop_name, $read_func, $write_func); + $num_written++; $this->cover["props"]->written(); } } diff --git a/generator/override.php b/generator/override.php index 5e2666c..10dadf6 100644 --- a/generator/override.php +++ b/generator/override.php @@ -28,9 +28,9 @@ class Overrides { var $prop_overrides = array(); var $handler_overrides = array(); var $extra_methods = array(); + var $extra_props = array(); var $extra_arginfo = array();//reflection information var $unused_extra_arginfo = array();//which reflection information has not been used - var $getprops = array(); var $register_classes = array(); var $headers = ''; var $constants = ''; @@ -190,6 +190,17 @@ class Overrides { $this->lineinfo["$class.$method"] = array($blocklineno + 1, $file_name); break; + case 'add-prop': + $class = $words[0]; + $prop = $words[1]; + if (isset($words[2])) + $type = $words[2]; + else + $type = 'read'; + $this->extra_props[$class][$prop][$type] = $rest; + $this->lineinfo["$class.$prop.$type.extra"] = array($blocklineno + 1, $file_name); + break; + case 'add-arginfo': $class = $words[0]; $method = $words[1]; @@ -263,14 +274,14 @@ class Overrides { return $this->extra_methods[$class]; } - function have_get_prop($class_name, $prop_name) + function have_extra_props($class) { - return isset($this->getprops[$class_name][$prop_name]); + return isset($this->extra_props[$class]); } - function get_prop($class_name, $prop_name) + function get_extra_props($class) { - return $this->getprops[$class_name][$prop_name]; + return $this->extra_props[$class]; } function have_post_registration($class)