[glibmm/gmmproc-refactor] Add API objects.



commit 55c8b15bcfdfe14eccaea8498e6df287e5b7ed67
Author: Krzesimir Nowak <qdlacz gmail com>
Date:   Mon Nov 21 12:51:44 2011 +0100

    Add API objects.
    
    These are used by handlers and others.

 tools/pm/Gir/Api/Alias.pm         |  229 ++++++++++++
 tools/pm/Gir/Api/Array.pm         |  229 ++++++++++++
 tools/pm/Gir/Api/Attribute.pm     |   97 ++++++
 tools/pm/Gir/Api/Bitfield.pm      |  307 ++++++++++++++++
 tools/pm/Gir/Api/CInclude.pm      |   81 +++++
 tools/pm/Gir/Api/Callback.pm      |  291 ++++++++++++++++
 tools/pm/Gir/Api/Class.pm         |  691 +++++++++++++++++++++++++++++++++++++
 tools/pm/Gir/Api/Common/Base.pm   |  215 ++++++++++++
 tools/pm/Gir/Api/Constant.pm      |  197 +++++++++++
 tools/pm/Gir/Api/Constructor.pm   |  339 ++++++++++++++++++
 tools/pm/Gir/Api/Doc.pm           |   81 +++++
 tools/pm/Gir/Api/Enumeration.pm   |  323 +++++++++++++++++
 tools/pm/Gir/Api/Field.pm         |  367 ++++++++++++++++++++
 tools/pm/Gir/Api/Function.pm      |  339 ++++++++++++++++++
 tools/pm/Gir/Api/GlibBoxed.pm     |  273 +++++++++++++++
 tools/pm/Gir/Api/GlibSignal.pm    |  339 ++++++++++++++++++
 tools/pm/Gir/Api/Implements.pm    |   81 +++++
 tools/pm/Gir/Api/Include.pm       |   97 ++++++
 tools/pm/Gir/Api/Interface.pm     |  549 +++++++++++++++++++++++++++++
 tools/pm/Gir/Api/Member.pm        |  129 +++++++
 tools/pm/Gir/Api/Method.pm        |  339 ++++++++++++++++++
 tools/pm/Gir/Api/Namespace.pm     |  469 +++++++++++++++++++++++++
 tools/pm/Gir/Api/Package.pm       |   81 +++++
 tools/pm/Gir/Api/Parameter.pm     |  353 +++++++++++++++++++
 tools/pm/Gir/Api/Parameters.pm    |   93 +++++
 tools/pm/Gir/Api/Prerequisite.pm  |   81 +++++
 tools/pm/Gir/Api/Property.pm      |  369 ++++++++++++++++++++
 tools/pm/Gir/Api/Record.pm        |  491 ++++++++++++++++++++++++++
 tools/pm/Gir/Api/Repository.pm    |  243 +++++++++++++
 tools/pm/Gir/Api/ReturnValue.pm   |  241 +++++++++++++
 tools/pm/Gir/Api/TopLevel.pm      |   93 +++++
 tools/pm/Gir/Api/Type.pm          |  197 +++++++++++
 tools/pm/Gir/Api/Union.pm         |  443 ++++++++++++++++++++++++
 tools/pm/Gir/Api/Varargs.pm       |   69 ++++
 tools/pm/Gir/Api/VirtualMethod.pm |  291 ++++++++++++++++
 35 files changed, 9107 insertions(+), 0 deletions(-)
---
diff --git a/tools/pm/Gir/Api/Alias.pm b/tools/pm/Gir/Api/Alias.pm
new file mode 100644
index 0000000..59e8b79
--- /dev/null
+++ b/tools/pm/Gir/Api/Alias.pm
@@ -0,0 +1,229 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Alias;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+use Gir::Api::Attribute;
+use Gir::Api::Doc;
+use Gir::Api::Type;
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::Alias');
+  my $groups =
+  [
+    'group_attribute',
+    'group_doc',
+    'group_type'
+  ];
+  my $attributes =
+  [
+    'attribute_c_type',
+    'attribute_deprecated',
+    'attribute_deprecated_version',
+    'attribute_introspectable',
+    'attribute_name'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::Alias::new ($type);
+
+  $self->set_a_c_type($params->{'c:type'});
+  $self->set_a_deprecated($params->{'deprecated'});
+  $self->set_a_deprecated_version($params->{'deprecated-version'});
+  $self->set_a_introspectable($params->{'introspectable'});
+  $self->set_a_name($params->{'name'});
+
+  return $self;
+}
+
+sub get_g_attribute_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_attribute', $name);
+}
+
+sub get_g_doc_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_doc', $name);
+}
+
+sub get_g_type_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_type', $name);
+}
+
+
+sub get_g_attribute_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_attribute', $index);
+}
+
+sub get_g_doc_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_doc', $index);
+}
+
+sub get_g_type_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_type', $index);
+}
+
+
+sub get_g_attribute_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_attribute');
+}
+
+sub get_g_doc_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_doc');
+}
+
+sub get_g_type_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_type');
+}
+
+
+sub add_g_attribute ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_attribute', $member_name, $member);
+}
+
+sub add_g_doc ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_doc', $member_name, $member);
+}
+
+sub add_g_type ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_type', $member_name, $member);
+}
+
+
+sub get_a_c_type ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_c_type');
+}
+
+sub get_a_deprecated ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated');
+}
+
+sub get_a_deprecated_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated_version');
+}
+
+sub get_a_introspectable ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_introspectable');
+}
+
+sub get_a_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_name');
+}
+
+
+sub set_a_c_type ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_c_type', $value);
+}
+
+sub set_a_deprecated ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated', $value);
+}
+
+sub set_a_deprecated_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated_version', $value);
+}
+
+sub set_a_introspectable ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_introspectable', $value);
+}
+
+sub set_a_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_name', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/Array.pm b/tools/pm/Gir/Api/Array.pm
new file mode 100644
index 0000000..2af0b78
--- /dev/null
+++ b/tools/pm/Gir/Api/Array.pm
@@ -0,0 +1,229 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Array;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+use Gir::Api::Array;
+use Gir::Api::Type;
+use Gir::Api::Varargs;
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::Array');
+  my $groups =
+  [
+    'group_array',
+    'group_type',
+    'group_varargs'
+  ];
+  my $attributes =
+  [
+    'attribute_c_type',
+    'attribute_fixed_size',
+    'attribute_length',
+    'attribute_name',
+    'attribute_zero_terminated'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::Array::new ($type);
+
+  $self->set_a_c_type($params->{'c:type'});
+  $self->set_a_fixed_size($params->{'fixed-size'});
+  $self->set_a_length($params->{'length'});
+  $self->set_a_name($params->{'name'});
+  $self->set_a_zero_terminated($params->{'zero-terminated'});
+
+  return $self;
+}
+
+sub get_g_array_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_array', $name);
+}
+
+sub get_g_type_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_type', $name);
+}
+
+sub get_g_varargs_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_varargs', $name);
+}
+
+
+sub get_g_array_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_array', $index);
+}
+
+sub get_g_type_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_type', $index);
+}
+
+sub get_g_varargs_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_varargs', $index);
+}
+
+
+sub get_g_array_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_array');
+}
+
+sub get_g_type_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_type');
+}
+
+sub get_g_varargs_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_varargs');
+}
+
+
+sub add_g_array ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_array', $member_name, $member);
+}
+
+sub add_g_type ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_type', $member_name, $member);
+}
+
+sub add_g_varargs ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_varargs', $member_name, $member);
+}
+
+
+sub get_a_c_type ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_c_type');
+}
+
+sub get_a_fixed_size ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_fixed_size');
+}
+
+sub get_a_length ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_length');
+}
+
+sub get_a_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_name');
+}
+
+sub get_a_zero_terminated ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_zero_terminated');
+}
+
+
+sub set_a_c_type ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_c_type', $value);
+}
+
+sub set_a_fixed_size ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_fixed_size', $value);
+}
+
+sub set_a_length ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_length', $value);
+}
+
+sub set_a_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_name', $value);
+}
+
+sub set_a_zero_terminated ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_zero_terminated', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/Attribute.pm b/tools/pm/Gir/Api/Attribute.pm
new file mode 100644
index 0000000..9a3330c
--- /dev/null
+++ b/tools/pm/Gir/Api/Attribute.pm
@@ -0,0 +1,97 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Attribute;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::Attribute');
+  my $groups =
+  [
+
+  ];
+  my $attributes =
+  [
+    'attribute_name',
+    'attribute_value'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::Attribute::new ($type);
+
+  $self->set_a_name($params->{'name'});
+  $self->set_a_value($params->{'value'});
+
+  return $self;
+}
+
+
+
+
+
+
+
+
+
+sub get_a_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_name');
+}
+
+sub get_a_value ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_value');
+}
+
+
+sub set_a_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_name', $value);
+}
+
+sub set_a_value ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_value', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/Bitfield.pm b/tools/pm/Gir/Api/Bitfield.pm
new file mode 100644
index 0000000..f1e1396
--- /dev/null
+++ b/tools/pm/Gir/Api/Bitfield.pm
@@ -0,0 +1,307 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Bitfield;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+use Gir::Api::Attribute;
+use Gir::Api::Doc;
+use Gir::Api::Function;
+use Gir::Api::Member;
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::Bitfield');
+  my $groups =
+  [
+    'group_attribute',
+    'group_doc',
+    'group_function',
+    'group_member'
+  ];
+  my $attributes =
+  [
+    'attribute_c_type',
+    'attribute_deprecated',
+    'attribute_deprecated_version',
+    'attribute_glib_get_type',
+    'attribute_glib_type_name',
+    'attribute_introspectable',
+    'attribute_name',
+    'attribute_version'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::Bitfield::new ($type);
+
+  $self->set_a_c_type($params->{'c:type'});
+  $self->set_a_deprecated($params->{'deprecated'});
+  $self->set_a_deprecated_version($params->{'deprecated-version'});
+  $self->set_a_glib_get_type($params->{'glib:get-type'});
+  $self->set_a_glib_type_name($params->{'glib:type-name'});
+  $self->set_a_introspectable($params->{'introspectable'});
+  $self->set_a_name($params->{'name'});
+  $self->set_a_version($params->{'version'});
+
+  return $self;
+}
+
+sub get_g_attribute_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_attribute', $name);
+}
+
+sub get_g_doc_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_doc', $name);
+}
+
+sub get_g_function_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_function', $name);
+}
+
+sub get_g_member_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_member', $name);
+}
+
+
+sub get_g_attribute_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_attribute', $index);
+}
+
+sub get_g_doc_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_doc', $index);
+}
+
+sub get_g_function_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_function', $index);
+}
+
+sub get_g_member_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_member', $index);
+}
+
+
+sub get_g_attribute_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_attribute');
+}
+
+sub get_g_doc_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_doc');
+}
+
+sub get_g_function_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_function');
+}
+
+sub get_g_member_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_member');
+}
+
+
+sub add_g_attribute ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_attribute', $member_name, $member);
+}
+
+sub add_g_doc ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_doc', $member_name, $member);
+}
+
+sub add_g_function ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_function', $member_name, $member);
+}
+
+sub add_g_member ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_member', $member_name, $member);
+}
+
+
+sub get_a_c_type ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_c_type');
+}
+
+sub get_a_deprecated ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated');
+}
+
+sub get_a_deprecated_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated_version');
+}
+
+sub get_a_glib_get_type ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_glib_get_type');
+}
+
+sub get_a_glib_type_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_glib_type_name');
+}
+
+sub get_a_introspectable ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_introspectable');
+}
+
+sub get_a_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_name');
+}
+
+sub get_a_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_version');
+}
+
+
+sub set_a_c_type ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_c_type', $value);
+}
+
+sub set_a_deprecated ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated', $value);
+}
+
+sub set_a_deprecated_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated_version', $value);
+}
+
+sub set_a_glib_get_type ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_glib_get_type', $value);
+}
+
+sub set_a_glib_type_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_glib_type_name', $value);
+}
+
+sub set_a_introspectable ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_introspectable', $value);
+}
+
+sub set_a_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_name', $value);
+}
+
+sub set_a_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_version', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/CInclude.pm b/tools/pm/Gir/Api/CInclude.pm
new file mode 100644
index 0000000..c92ad2a
--- /dev/null
+++ b/tools/pm/Gir/Api/CInclude.pm
@@ -0,0 +1,81 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::CInclude;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::CInclude');
+  my $groups =
+  [
+
+  ];
+  my $attributes =
+  [
+    'attribute_name'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::CInclude::new ($type);
+
+  $self->set_a_name($params->{'name'});
+
+  return $self;
+}
+
+
+
+
+
+
+
+
+
+sub get_a_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_name');
+}
+
+
+sub set_a_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_name', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/Callback.pm b/tools/pm/Gir/Api/Callback.pm
new file mode 100644
index 0000000..1dc2a55
--- /dev/null
+++ b/tools/pm/Gir/Api/Callback.pm
@@ -0,0 +1,291 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Callback;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+use Gir::Api::Attribute;
+use Gir::Api::Doc;
+use Gir::Api::Parameters;
+use Gir::Api::ReturnValue;
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::Callback');
+  my $groups =
+  [
+    'group_attribute',
+    'group_doc',
+    'group_parameters',
+    'group_return_value'
+  ];
+  my $attributes =
+  [
+    'attribute_c_type',
+    'attribute_deprecated',
+    'attribute_deprecated_version',
+    'attribute_introspectable',
+    'attribute_name',
+    'attribute_throws',
+    'attribute_version'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::Callback::new ($type);
+
+  $self->set_a_c_type($params->{'c:type'});
+  $self->set_a_deprecated($params->{'deprecated'});
+  $self->set_a_deprecated_version($params->{'deprecated-version'});
+  $self->set_a_introspectable($params->{'introspectable'});
+  $self->set_a_name($params->{'name'});
+  $self->set_a_throws($params->{'throws'});
+  $self->set_a_version($params->{'version'});
+
+  return $self;
+}
+
+sub get_g_attribute_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_attribute', $name);
+}
+
+sub get_g_doc_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_doc', $name);
+}
+
+sub get_g_parameters_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_parameters', $name);
+}
+
+sub get_g_return_value_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_return_value', $name);
+}
+
+
+sub get_g_attribute_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_attribute', $index);
+}
+
+sub get_g_doc_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_doc', $index);
+}
+
+sub get_g_parameters_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_parameters', $index);
+}
+
+sub get_g_return_value_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_return_value', $index);
+}
+
+
+sub get_g_attribute_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_attribute');
+}
+
+sub get_g_doc_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_doc');
+}
+
+sub get_g_parameters_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_parameters');
+}
+
+sub get_g_return_value_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_return_value');
+}
+
+
+sub add_g_attribute ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_attribute', $member_name, $member);
+}
+
+sub add_g_doc ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_doc', $member_name, $member);
+}
+
+sub add_g_parameters ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_parameters', $member_name, $member);
+}
+
+sub add_g_return_value ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_return_value', $member_name, $member);
+}
+
+
+sub get_a_c_type ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_c_type');
+}
+
+sub get_a_deprecated ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated');
+}
+
+sub get_a_deprecated_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated_version');
+}
+
+sub get_a_introspectable ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_introspectable');
+}
+
+sub get_a_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_name');
+}
+
+sub get_a_throws ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_throws');
+}
+
+sub get_a_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_version');
+}
+
+
+sub set_a_c_type ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_c_type', $value);
+}
+
+sub set_a_deprecated ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated', $value);
+}
+
+sub set_a_deprecated_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated_version', $value);
+}
+
+sub set_a_introspectable ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_introspectable', $value);
+}
+
+sub set_a_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_name', $value);
+}
+
+sub set_a_throws ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_throws', $value);
+}
+
+sub set_a_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_version', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/Class.pm b/tools/pm/Gir/Api/Class.pm
new file mode 100644
index 0000000..b2ef54d
--- /dev/null
+++ b/tools/pm/Gir/Api/Class.pm
@@ -0,0 +1,691 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Class;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+use Gir::Api::Attribute;
+use Gir::Api::Constructor;
+use Gir::Api::Doc;
+use Gir::Api::Field;
+use Gir::Api::Function;
+use Gir::Api::GlibSignal;
+use Gir::Api::Implements;
+use Gir::Api::Method;
+use Gir::Api::Property;
+use Gir::Api::Record;
+use Gir::Api::Union;
+use Gir::Api::VirtualMethod;
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::Class');
+  my $groups =
+  [
+    'group_attribute',
+    'group_constructor',
+    'group_doc',
+    'group_field',
+    'group_function',
+    'group_glib_signal',
+    'group_implements',
+    'group_method',
+    'group_property',
+    'group_record',
+    'group_union',
+    'group_virtual_method'
+  ];
+  my $attributes =
+  [
+    'attribute_abstract',
+    'attribute_c_symbol_prefix',
+    'attribute_c_type',
+    'attribute_deprecated',
+    'attribute_deprecated_version',
+    'attribute_glib_fundamental',
+    'attribute_glib_get_type',
+    'attribute_glib_get_value_func',
+    'attribute_glib_ref_func',
+    'attribute_glib_set_value_func',
+    'attribute_glib_type_name',
+    'attribute_glib_type_struct',
+    'attribute_glib_unref_func',
+    'attribute_introspectable',
+    'attribute_name',
+    'attribute_parent',
+    'attribute_version'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::Class::new ($type);
+
+  $self->set_a_abstract($params->{'abstract'});
+  $self->set_a_c_symbol_prefix($params->{'c:symbol-prefix'});
+  $self->set_a_c_type($params->{'c:type'});
+  $self->set_a_deprecated($params->{'deprecated'});
+  $self->set_a_deprecated_version($params->{'deprecated-version'});
+  $self->set_a_glib_fundamental($params->{'glib:fundamental'});
+  $self->set_a_glib_get_type($params->{'glib:get-type'});
+  $self->set_a_glib_get_value_func($params->{'glib:get-value-func'});
+  $self->set_a_glib_ref_func($params->{'glib:ref-func'});
+  $self->set_a_glib_set_value_func($params->{'glib:set-value-func'});
+  $self->set_a_glib_type_name($params->{'glib:type-name'});
+  $self->set_a_glib_type_struct($params->{'glib:type-struct'});
+  $self->set_a_glib_unref_func($params->{'glib:unref-func'});
+  $self->set_a_introspectable($params->{'introspectable'});
+  $self->set_a_name($params->{'name'});
+  $self->set_a_parent($params->{'parent'});
+  $self->set_a_version($params->{'version'});
+
+  return $self;
+}
+
+sub get_g_attribute_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_attribute', $name);
+}
+
+sub get_g_constructor_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_constructor', $name);
+}
+
+sub get_g_doc_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_doc', $name);
+}
+
+sub get_g_field_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_field', $name);
+}
+
+sub get_g_function_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_function', $name);
+}
+
+sub get_g_glib_signal_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_glib_signal', $name);
+}
+
+sub get_g_implements_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_implements', $name);
+}
+
+sub get_g_method_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_method', $name);
+}
+
+sub get_g_property_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_property', $name);
+}
+
+sub get_g_record_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_record', $name);
+}
+
+sub get_g_union_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_union', $name);
+}
+
+sub get_g_virtual_method_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_virtual_method', $name);
+}
+
+
+sub get_g_attribute_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_attribute', $index);
+}
+
+sub get_g_constructor_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_constructor', $index);
+}
+
+sub get_g_doc_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_doc', $index);
+}
+
+sub get_g_field_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_field', $index);
+}
+
+sub get_g_function_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_function', $index);
+}
+
+sub get_g_glib_signal_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_glib_signal', $index);
+}
+
+sub get_g_implements_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_implements', $index);
+}
+
+sub get_g_method_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_method', $index);
+}
+
+sub get_g_property_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_property', $index);
+}
+
+sub get_g_record_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_record', $index);
+}
+
+sub get_g_union_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_union', $index);
+}
+
+sub get_g_virtual_method_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_virtual_method', $index);
+}
+
+
+sub get_g_attribute_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_attribute');
+}
+
+sub get_g_constructor_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_constructor');
+}
+
+sub get_g_doc_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_doc');
+}
+
+sub get_g_field_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_field');
+}
+
+sub get_g_function_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_function');
+}
+
+sub get_g_glib_signal_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_glib_signal');
+}
+
+sub get_g_implements_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_implements');
+}
+
+sub get_g_method_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_method');
+}
+
+sub get_g_property_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_property');
+}
+
+sub get_g_record_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_record');
+}
+
+sub get_g_union_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_union');
+}
+
+sub get_g_virtual_method_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_virtual_method');
+}
+
+
+sub add_g_attribute ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_attribute', $member_name, $member);
+}
+
+sub add_g_constructor ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_constructor', $member_name, $member);
+}
+
+sub add_g_doc ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_doc', $member_name, $member);
+}
+
+sub add_g_field ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_field', $member_name, $member);
+}
+
+sub add_g_function ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_function', $member_name, $member);
+}
+
+sub add_g_glib_signal ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_glib_signal', $member_name, $member);
+}
+
+sub add_g_implements ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_implements', $member_name, $member);
+}
+
+sub add_g_method ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_method', $member_name, $member);
+}
+
+sub add_g_property ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_property', $member_name, $member);
+}
+
+sub add_g_record ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_record', $member_name, $member);
+}
+
+sub add_g_union ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_union', $member_name, $member);
+}
+
+sub add_g_virtual_method ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_virtual_method', $member_name, $member);
+}
+
+
+sub get_a_abstract ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_abstract');
+}
+
+sub get_a_c_symbol_prefix ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_c_symbol_prefix');
+}
+
+sub get_a_c_type ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_c_type');
+}
+
+sub get_a_deprecated ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated');
+}
+
+sub get_a_deprecated_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated_version');
+}
+
+sub get_a_glib_fundamental ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_glib_fundamental');
+}
+
+sub get_a_glib_get_type ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_glib_get_type');
+}
+
+sub get_a_glib_get_value_func ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_glib_get_value_func');
+}
+
+sub get_a_glib_ref_func ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_glib_ref_func');
+}
+
+sub get_a_glib_set_value_func ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_glib_set_value_func');
+}
+
+sub get_a_glib_type_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_glib_type_name');
+}
+
+sub get_a_glib_type_struct ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_glib_type_struct');
+}
+
+sub get_a_glib_unref_func ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_glib_unref_func');
+}
+
+sub get_a_introspectable ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_introspectable');
+}
+
+sub get_a_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_name');
+}
+
+sub get_a_parent ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_parent');
+}
+
+sub get_a_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_version');
+}
+
+
+sub set_a_abstract ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_abstract', $value);
+}
+
+sub set_a_c_symbol_prefix ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_c_symbol_prefix', $value);
+}
+
+sub set_a_c_type ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_c_type', $value);
+}
+
+sub set_a_deprecated ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated', $value);
+}
+
+sub set_a_deprecated_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated_version', $value);
+}
+
+sub set_a_glib_fundamental ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_glib_fundamental', $value);
+}
+
+sub set_a_glib_get_type ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_glib_get_type', $value);
+}
+
+sub set_a_glib_get_value_func ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_glib_get_value_func', $value);
+}
+
+sub set_a_glib_ref_func ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_glib_ref_func', $value);
+}
+
+sub set_a_glib_set_value_func ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_glib_set_value_func', $value);
+}
+
+sub set_a_glib_type_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_glib_type_name', $value);
+}
+
+sub set_a_glib_type_struct ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_glib_type_struct', $value);
+}
+
+sub set_a_glib_unref_func ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_glib_unref_func', $value);
+}
+
+sub set_a_introspectable ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_introspectable', $value);
+}
+
+sub set_a_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_name', $value);
+}
+
+sub set_a_parent ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_parent', $value);
+}
+
+sub set_a_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_version', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/Common/Base.pm b/tools/pm/Gir/Api/Common/Base.pm
new file mode 100644
index 0000000..8e42123
--- /dev/null
+++ b/tools/pm/Gir/Api/Common/Base.pm
@@ -0,0 +1,215 @@
+# -*- mode: perl; perl-indent-level: 2; indent-tabs-mode: nil -*-
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Common::Base;
+
+use strict;
+use warnings;
+
+##
+## protected:
+##
+
+##
+## Takes group name and member name and tries to retrieve such member from
+## a group. Note that asking for a member of nonexistent group is fatal.
+## When such member does not exist then undef is returned.
+##
+sub _get_group_member_by_name ($$$)
+{
+  my ($self, $group_name, $member_name) = @_;
+  my $groups = $self->{'groups'};
+
+  unless (exists ($groups->{$group_name}))
+  {
+    # TODO: throw error.
+    print STDERR 'No such group: ' . $group_name . '.' . "\n";
+    exit 1;
+  }
+
+  my $group = $groups->{$group_name};
+  my $unordered = $group->{'unordered'};
+
+  if (exists ($unordered->{$member_name}))
+  {
+    return $group->{'ordered'}[$unordered->{$member_name}];
+  }
+  return undef;
+}
+
+##
+## Takes group name and index of a member and tries to retrieve a member
+## at given index from a group. Note that asking for a member of nonexistent
+## group or noexistent index is fatal. This method always returns a valid
+## member.
+##
+sub _get_group_member_by_index ($$$)
+{
+  my ($self, $group_name, $index) = @_;
+  my $groups = $self->{'groups'};
+
+  unless (exists ($groups->{$group_name}))
+  {
+    # TODO: throw error.
+    print STDERR 'No such group: ' . $group_name .  '.' . "\n";
+    exit 1;
+  }
+
+  my $group = $groups->{$group_name};
+  my $ordered = $group->{'ordered'};
+
+  unless ($index < @{$ordered})
+  {
+    # TODO: throw error.
+    print STDERR 'No member under index ' . $index . ' in group ' . $group_name . '.' . "\n";
+    exit 1;
+  }
+  return $ordered->[$index];
+}
+
+##
+## Takes group name and returns a count of members in the group. Note that asking
+## for a count of nonexistent group is fatal. This method always return a correct
+## count.
+##
+sub _get_group_member_count ($$)
+{
+  my ($self, $group_name) = @_;
+  my $groups = $self->{'groups'};
+
+  unless (exists ($groups->{$group_name}))
+  {
+    # TODO: throw error.
+    print STDERR 'No such group: ' . $group_name . '.' . "\n";
+    exit 1;
+  }
+
+  return @{$groups->{$group_name}{'ordered'}};
+}
+
+##
+## Takes group name, member name and member itself and puts the member into
+## a group. Note that trying to put a member into nonexistent group or trying
+## to put a member whose name is already in group is fatal.
+##
+sub _add_member_to_group ($$$$)
+{
+  my ($self, $group_name, $member_name, $member) = @_;
+  my $groups = $self->{'groups'};
+
+  unless (exists ($groups->{$group_name}))
+  {
+    # TODO: throw error.
+    print STDERR 'No such group: ' . $group_name . '.' . "\n";
+    exit 1;
+  }
+
+  my $group = $groups->{$group_name};
+  my $unordered = $group->{'unordered'};
+
+  if (exists ($unordered->{$member_name}))
+  {
+    # TODO: throw error.
+    print STDERR 'Member ' . $member_name . ' already exists in group: ' . $group_name . '.' . "\n";
+    exit 1;
+  }
+
+  my $ordered = $group->{'ordered'};
+  my $new_index = @{$ordered};
+
+  push (@{$ordered}, $member);
+  $unordered->{$member_name} = $new_index;
+}
+
+##
+## Takes attribute name and tries returns its value. Note that asking for
+## a value of nonexistent attribute is fatal.
+##
+sub _get_attribute ($$)
+{
+  my ($self, $attribute_name) = @_;
+  my $attributes = $self->{'attributes'};
+
+  unless (exists ($attributes->{$attribute_name}))
+  {
+    # TODO: throw error.
+    print STDERR 'No such attribute: ' . $attribute_name . '.' . "\n";
+    exit 1;
+  }
+
+  return $attributes->{$attribute_name};
+}
+
+##
+## Takes attribute name and attribute value and sets the value for the name.
+## Note that asking for setting a value to nonexistent attribute is fatal.
+##
+sub _set_attribute ($$$)
+{
+  my ($self, $attribute_name, $attribute_value) = @_;
+  my $attributes = $self->{'attributes'};
+
+  unless (exists ($attributes->{$attribute_name}))
+  {
+    # TODO: throw error.
+    print STDERR 'No such attribute: ' . $attribute_name . '.' . "\n";
+    exit 1;
+  }
+
+  $attributes->{$attribute_name} = $attribute_value;
+}
+
+##
+## Takes attribute name and check if this object have such attribute.
+##
+sub _has_attribute ($$)
+{
+  my ($self, $attribute_name) = @_;
+  my $attributes = $self->{'attributes'};
+
+  return exists ($attributes->{$attribute_name});
+}
+
+##
+## public:
+##
+
+##
+## Takes an array of group names and an array of attribute names and creates
+## an instance of a class. This is the only method where actual group names
+## and attribute names can be set.
+##
+sub new ($$$)
+{
+  my ($type, $groups, $attributes) = @_;
+  my $class = (ref ($type) or $type or 'Gir::Api::Common::Base');
+  my %member_groups = map { $_ => {'ordered' => [], 'unordered' => {}}; } @{$groups};
+  my %member_attributes = map { $_ => undef } @{$attributes};
+  my $self =
+  {
+    # group_name => {'ordered' => [{obj1}, {obj2}, ...], 'unordered' => {name_of_obj1 => idx_of_obj1, name_of_obj2 => idx_of_obj2}}
+    'groups' => \%member_groups,
+    # attribute => value
+    'attributes' => \%member_attributes
+  };
+
+  bless ($self, $class);
+  return $self;
+}
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/Constant.pm b/tools/pm/Gir/Api/Constant.pm
new file mode 100644
index 0000000..f005136
--- /dev/null
+++ b/tools/pm/Gir/Api/Constant.pm
@@ -0,0 +1,197 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Constant;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+use Gir::Api::Array;
+use Gir::Api::Type;
+use Gir::Api::Varargs;
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::Constant');
+  my $groups =
+  [
+    'group_array',
+    'group_type',
+    'group_varargs'
+  ];
+  my $attributes =
+  [
+    'attribute_c_type',
+    'attribute_name',
+    'attribute_value'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::Constant::new ($type);
+
+  $self->set_a_c_type($params->{'c:type'});
+  $self->set_a_name($params->{'name'});
+  $self->set_a_value($params->{'value'});
+
+  return $self;
+}
+
+sub get_g_array_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_array', $name);
+}
+
+sub get_g_type_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_type', $name);
+}
+
+sub get_g_varargs_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_varargs', $name);
+}
+
+
+sub get_g_array_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_array', $index);
+}
+
+sub get_g_type_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_type', $index);
+}
+
+sub get_g_varargs_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_varargs', $index);
+}
+
+
+sub get_g_array_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_array');
+}
+
+sub get_g_type_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_type');
+}
+
+sub get_g_varargs_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_varargs');
+}
+
+
+sub add_g_array ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_array', $member_name, $member);
+}
+
+sub add_g_type ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_type', $member_name, $member);
+}
+
+sub add_g_varargs ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_varargs', $member_name, $member);
+}
+
+
+sub get_a_c_type ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_c_type');
+}
+
+sub get_a_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_name');
+}
+
+sub get_a_value ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_value');
+}
+
+
+sub set_a_c_type ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_c_type', $value);
+}
+
+sub set_a_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_name', $value);
+}
+
+sub set_a_value ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_value', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/Constructor.pm b/tools/pm/Gir/Api/Constructor.pm
new file mode 100644
index 0000000..e7b89db
--- /dev/null
+++ b/tools/pm/Gir/Api/Constructor.pm
@@ -0,0 +1,339 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Constructor;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+use Gir::Api::Attribute;
+use Gir::Api::Doc;
+use Gir::Api::Parameters;
+use Gir::Api::ReturnValue;
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::Constructor');
+  my $groups =
+  [
+    'group_attribute',
+    'group_doc',
+    'group_parameters',
+    'group_return_value'
+  ];
+  my $attributes =
+  [
+    'attribute_c_identifier',
+    'attribute_deprecated',
+    'attribute_deprecated_version',
+    'attribute_introspectable',
+    'attribute_moved_to',
+    'attribute_name',
+    'attribute_shadowed_by',
+    'attribute_shadows',
+    'attribute_throws',
+    'attribute_version'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::Constructor::new ($type);
+
+  $self->set_a_c_identifier($params->{'c:identifier'});
+  $self->set_a_deprecated($params->{'deprecated'});
+  $self->set_a_deprecated_version($params->{'deprecated-version'});
+  $self->set_a_introspectable($params->{'introspectable'});
+  $self->set_a_moved_to($params->{'moved-to'});
+  $self->set_a_name($params->{'name'});
+  $self->set_a_shadowed_by($params->{'shadowed-by'});
+  $self->set_a_shadows($params->{'shadows'});
+  $self->set_a_throws($params->{'throws'});
+  $self->set_a_version($params->{'version'});
+
+  return $self;
+}
+
+sub get_g_attribute_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_attribute', $name);
+}
+
+sub get_g_doc_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_doc', $name);
+}
+
+sub get_g_parameters_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_parameters', $name);
+}
+
+sub get_g_return_value_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_return_value', $name);
+}
+
+
+sub get_g_attribute_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_attribute', $index);
+}
+
+sub get_g_doc_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_doc', $index);
+}
+
+sub get_g_parameters_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_parameters', $index);
+}
+
+sub get_g_return_value_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_return_value', $index);
+}
+
+
+sub get_g_attribute_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_attribute');
+}
+
+sub get_g_doc_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_doc');
+}
+
+sub get_g_parameters_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_parameters');
+}
+
+sub get_g_return_value_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_return_value');
+}
+
+
+sub add_g_attribute ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_attribute', $member_name, $member);
+}
+
+sub add_g_doc ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_doc', $member_name, $member);
+}
+
+sub add_g_parameters ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_parameters', $member_name, $member);
+}
+
+sub add_g_return_value ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_return_value', $member_name, $member);
+}
+
+
+sub get_a_c_identifier ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_c_identifier');
+}
+
+sub get_a_deprecated ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated');
+}
+
+sub get_a_deprecated_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated_version');
+}
+
+sub get_a_introspectable ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_introspectable');
+}
+
+sub get_a_moved_to ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_moved_to');
+}
+
+sub get_a_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_name');
+}
+
+sub get_a_shadowed_by ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_shadowed_by');
+}
+
+sub get_a_shadows ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_shadows');
+}
+
+sub get_a_throws ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_throws');
+}
+
+sub get_a_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_version');
+}
+
+
+sub set_a_c_identifier ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_c_identifier', $value);
+}
+
+sub set_a_deprecated ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated', $value);
+}
+
+sub set_a_deprecated_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated_version', $value);
+}
+
+sub set_a_introspectable ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_introspectable', $value);
+}
+
+sub set_a_moved_to ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_moved_to', $value);
+}
+
+sub set_a_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_name', $value);
+}
+
+sub set_a_shadowed_by ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_shadowed_by', $value);
+}
+
+sub set_a_shadows ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_shadows', $value);
+}
+
+sub set_a_throws ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_throws', $value);
+}
+
+sub set_a_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_version', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/Doc.pm b/tools/pm/Gir/Api/Doc.pm
new file mode 100644
index 0000000..62fd864
--- /dev/null
+++ b/tools/pm/Gir/Api/Doc.pm
@@ -0,0 +1,81 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Doc;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::Doc');
+  my $groups =
+  [
+
+  ];
+  my $attributes =
+  [
+    'attribute_xml_whitespace'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::Doc::new ($type);
+
+  $self->set_a_xml_whitespace($params->{'xml:whitespace'});
+
+  return $self;
+}
+
+
+
+
+
+
+
+
+
+sub get_a_xml_whitespace ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_xml_whitespace');
+}
+
+
+sub set_a_xml_whitespace ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_xml_whitespace', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/Enumeration.pm b/tools/pm/Gir/Api/Enumeration.pm
new file mode 100644
index 0000000..efd94ec
--- /dev/null
+++ b/tools/pm/Gir/Api/Enumeration.pm
@@ -0,0 +1,323 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Enumeration;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+use Gir::Api::Attribute;
+use Gir::Api::Doc;
+use Gir::Api::Function;
+use Gir::Api::Member;
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::Enumeration');
+  my $groups =
+  [
+    'group_attribute',
+    'group_doc',
+    'group_function',
+    'group_member'
+  ];
+  my $attributes =
+  [
+    'attribute_c_type',
+    'attribute_deprecated',
+    'attribute_deprecated_version',
+    'attribute_glib_error_domain',
+    'attribute_glib_get_type',
+    'attribute_glib_type_name',
+    'attribute_introspectable',
+    'attribute_name',
+    'attribute_version'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::Enumeration::new ($type);
+
+  $self->set_a_c_type($params->{'c:type'});
+  $self->set_a_deprecated($params->{'deprecated'});
+  $self->set_a_deprecated_version($params->{'deprecated-version'});
+  $self->set_a_glib_error_domain($params->{'glib:error-domain'});
+  $self->set_a_glib_get_type($params->{'glib:get-type'});
+  $self->set_a_glib_type_name($params->{'glib:type-name'});
+  $self->set_a_introspectable($params->{'introspectable'});
+  $self->set_a_name($params->{'name'});
+  $self->set_a_version($params->{'version'});
+
+  return $self;
+}
+
+sub get_g_attribute_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_attribute', $name);
+}
+
+sub get_g_doc_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_doc', $name);
+}
+
+sub get_g_function_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_function', $name);
+}
+
+sub get_g_member_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_member', $name);
+}
+
+
+sub get_g_attribute_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_attribute', $index);
+}
+
+sub get_g_doc_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_doc', $index);
+}
+
+sub get_g_function_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_function', $index);
+}
+
+sub get_g_member_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_member', $index);
+}
+
+
+sub get_g_attribute_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_attribute');
+}
+
+sub get_g_doc_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_doc');
+}
+
+sub get_g_function_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_function');
+}
+
+sub get_g_member_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_member');
+}
+
+
+sub add_g_attribute ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_attribute', $member_name, $member);
+}
+
+sub add_g_doc ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_doc', $member_name, $member);
+}
+
+sub add_g_function ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_function', $member_name, $member);
+}
+
+sub add_g_member ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_member', $member_name, $member);
+}
+
+
+sub get_a_c_type ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_c_type');
+}
+
+sub get_a_deprecated ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated');
+}
+
+sub get_a_deprecated_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated_version');
+}
+
+sub get_a_glib_error_domain ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_glib_error_domain');
+}
+
+sub get_a_glib_get_type ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_glib_get_type');
+}
+
+sub get_a_glib_type_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_glib_type_name');
+}
+
+sub get_a_introspectable ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_introspectable');
+}
+
+sub get_a_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_name');
+}
+
+sub get_a_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_version');
+}
+
+
+sub set_a_c_type ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_c_type', $value);
+}
+
+sub set_a_deprecated ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated', $value);
+}
+
+sub set_a_deprecated_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated_version', $value);
+}
+
+sub set_a_glib_error_domain ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_glib_error_domain', $value);
+}
+
+sub set_a_glib_get_type ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_glib_get_type', $value);
+}
+
+sub set_a_glib_type_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_glib_type_name', $value);
+}
+
+sub set_a_introspectable ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_introspectable', $value);
+}
+
+sub set_a_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_name', $value);
+}
+
+sub set_a_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_version', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/Field.pm b/tools/pm/Gir/Api/Field.pm
new file mode 100644
index 0000000..b24144f
--- /dev/null
+++ b/tools/pm/Gir/Api/Field.pm
@@ -0,0 +1,367 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Field;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+use Gir::Api::Array;
+use Gir::Api::Attribute;
+use Gir::Api::Callback;
+use Gir::Api::Doc;
+use Gir::Api::Type;
+use Gir::Api::Varargs;
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::Field');
+  my $groups =
+  [
+    'group_array',
+    'group_attribute',
+    'group_callback',
+    'group_doc',
+    'group_type',
+    'group_varargs'
+  ];
+  my $attributes =
+  [
+    'attribute_bits',
+    'attribute_deprecated',
+    'attribute_deprecated_version',
+    'attribute_introspectable',
+    'attribute_name',
+    'attribute_private',
+    'attribute_readable',
+    'attribute_writable'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::Field::new ($type);
+
+  $self->set_a_bits($params->{'bits'});
+  $self->set_a_deprecated($params->{'deprecated'});
+  $self->set_a_deprecated_version($params->{'deprecated-version'});
+  $self->set_a_introspectable($params->{'introspectable'});
+  $self->set_a_name($params->{'name'});
+  $self->set_a_private($params->{'private'});
+  $self->set_a_readable($params->{'readable'});
+  $self->set_a_writable($params->{'writable'});
+
+  return $self;
+}
+
+sub get_g_array_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_array', $name);
+}
+
+sub get_g_attribute_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_attribute', $name);
+}
+
+sub get_g_callback_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_callback', $name);
+}
+
+sub get_g_doc_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_doc', $name);
+}
+
+sub get_g_type_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_type', $name);
+}
+
+sub get_g_varargs_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_varargs', $name);
+}
+
+
+sub get_g_array_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_array', $index);
+}
+
+sub get_g_attribute_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_attribute', $index);
+}
+
+sub get_g_callback_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_callback', $index);
+}
+
+sub get_g_doc_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_doc', $index);
+}
+
+sub get_g_type_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_type', $index);
+}
+
+sub get_g_varargs_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_varargs', $index);
+}
+
+
+sub get_g_array_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_array');
+}
+
+sub get_g_attribute_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_attribute');
+}
+
+sub get_g_callback_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_callback');
+}
+
+sub get_g_doc_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_doc');
+}
+
+sub get_g_type_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_type');
+}
+
+sub get_g_varargs_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_varargs');
+}
+
+
+sub add_g_array ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_array', $member_name, $member);
+}
+
+sub add_g_attribute ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_attribute', $member_name, $member);
+}
+
+sub add_g_callback ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_callback', $member_name, $member);
+}
+
+sub add_g_doc ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_doc', $member_name, $member);
+}
+
+sub add_g_type ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_type', $member_name, $member);
+}
+
+sub add_g_varargs ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_varargs', $member_name, $member);
+}
+
+
+sub get_a_bits ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_bits');
+}
+
+sub get_a_deprecated ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated');
+}
+
+sub get_a_deprecated_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated_version');
+}
+
+sub get_a_introspectable ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_introspectable');
+}
+
+sub get_a_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_name');
+}
+
+sub get_a_private ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_private');
+}
+
+sub get_a_readable ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_readable');
+}
+
+sub get_a_writable ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_writable');
+}
+
+
+sub set_a_bits ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_bits', $value);
+}
+
+sub set_a_deprecated ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated', $value);
+}
+
+sub set_a_deprecated_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated_version', $value);
+}
+
+sub set_a_introspectable ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_introspectable', $value);
+}
+
+sub set_a_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_name', $value);
+}
+
+sub set_a_private ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_private', $value);
+}
+
+sub set_a_readable ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_readable', $value);
+}
+
+sub set_a_writable ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_writable', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/Function.pm b/tools/pm/Gir/Api/Function.pm
new file mode 100644
index 0000000..5fe8e30
--- /dev/null
+++ b/tools/pm/Gir/Api/Function.pm
@@ -0,0 +1,339 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Function;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+use Gir::Api::Attribute;
+use Gir::Api::Doc;
+use Gir::Api::Parameters;
+use Gir::Api::ReturnValue;
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::Function');
+  my $groups =
+  [
+    'group_attribute',
+    'group_doc',
+    'group_parameters',
+    'group_return_value'
+  ];
+  my $attributes =
+  [
+    'attribute_c_identifier',
+    'attribute_deprecated',
+    'attribute_deprecated_version',
+    'attribute_introspectable',
+    'attribute_moved_to',
+    'attribute_name',
+    'attribute_shadowed_by',
+    'attribute_shadows',
+    'attribute_throws',
+    'attribute_version'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::Function::new ($type);
+
+  $self->set_a_c_identifier($params->{'c:identifier'});
+  $self->set_a_deprecated($params->{'deprecated'});
+  $self->set_a_deprecated_version($params->{'deprecated-version'});
+  $self->set_a_introspectable($params->{'introspectable'});
+  $self->set_a_moved_to($params->{'moved-to'});
+  $self->set_a_name($params->{'name'});
+  $self->set_a_shadowed_by($params->{'shadowed-by'});
+  $self->set_a_shadows($params->{'shadows'});
+  $self->set_a_throws($params->{'throws'});
+  $self->set_a_version($params->{'version'});
+
+  return $self;
+}
+
+sub get_g_attribute_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_attribute', $name);
+}
+
+sub get_g_doc_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_doc', $name);
+}
+
+sub get_g_parameters_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_parameters', $name);
+}
+
+sub get_g_return_value_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_return_value', $name);
+}
+
+
+sub get_g_attribute_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_attribute', $index);
+}
+
+sub get_g_doc_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_doc', $index);
+}
+
+sub get_g_parameters_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_parameters', $index);
+}
+
+sub get_g_return_value_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_return_value', $index);
+}
+
+
+sub get_g_attribute_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_attribute');
+}
+
+sub get_g_doc_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_doc');
+}
+
+sub get_g_parameters_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_parameters');
+}
+
+sub get_g_return_value_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_return_value');
+}
+
+
+sub add_g_attribute ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_attribute', $member_name, $member);
+}
+
+sub add_g_doc ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_doc', $member_name, $member);
+}
+
+sub add_g_parameters ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_parameters', $member_name, $member);
+}
+
+sub add_g_return_value ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_return_value', $member_name, $member);
+}
+
+
+sub get_a_c_identifier ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_c_identifier');
+}
+
+sub get_a_deprecated ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated');
+}
+
+sub get_a_deprecated_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated_version');
+}
+
+sub get_a_introspectable ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_introspectable');
+}
+
+sub get_a_moved_to ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_moved_to');
+}
+
+sub get_a_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_name');
+}
+
+sub get_a_shadowed_by ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_shadowed_by');
+}
+
+sub get_a_shadows ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_shadows');
+}
+
+sub get_a_throws ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_throws');
+}
+
+sub get_a_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_version');
+}
+
+
+sub set_a_c_identifier ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_c_identifier', $value);
+}
+
+sub set_a_deprecated ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated', $value);
+}
+
+sub set_a_deprecated_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated_version', $value);
+}
+
+sub set_a_introspectable ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_introspectable', $value);
+}
+
+sub set_a_moved_to ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_moved_to', $value);
+}
+
+sub set_a_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_name', $value);
+}
+
+sub set_a_shadowed_by ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_shadowed_by', $value);
+}
+
+sub set_a_shadows ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_shadows', $value);
+}
+
+sub set_a_throws ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_throws', $value);
+}
+
+sub set_a_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_version', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/GlibBoxed.pm b/tools/pm/Gir/Api/GlibBoxed.pm
new file mode 100644
index 0000000..e24a36b
--- /dev/null
+++ b/tools/pm/Gir/Api/GlibBoxed.pm
@@ -0,0 +1,273 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::GlibBoxed;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+use Gir::Api::Attribute;
+use Gir::Api::Constructor;
+use Gir::Api::Doc;
+use Gir::Api::Function;
+use Gir::Api::Method;
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::GlibBoxed');
+  my $groups =
+  [
+    'group_attribute',
+    'group_constructor',
+    'group_doc',
+    'group_function',
+    'group_method'
+  ];
+  my $attributes =
+  [
+    'attribute_c_symbol_prefix',
+    'attribute_glib_get_type',
+    'attribute_glib_name',
+    'attribute_glib_type_name'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::GlibBoxed::new ($type);
+
+  $self->set_a_c_symbol_prefix($params->{'c:symbol-prefix'});
+  $self->set_a_glib_get_type($params->{'glib:get-type'});
+  $self->set_a_glib_name($params->{'glib:name'});
+  $self->set_a_glib_type_name($params->{'glib:type-name'});
+
+  return $self;
+}
+
+sub get_g_attribute_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_attribute', $name);
+}
+
+sub get_g_constructor_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_constructor', $name);
+}
+
+sub get_g_doc_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_doc', $name);
+}
+
+sub get_g_function_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_function', $name);
+}
+
+sub get_g_method_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_method', $name);
+}
+
+
+sub get_g_attribute_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_attribute', $index);
+}
+
+sub get_g_constructor_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_constructor', $index);
+}
+
+sub get_g_doc_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_doc', $index);
+}
+
+sub get_g_function_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_function', $index);
+}
+
+sub get_g_method_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_method', $index);
+}
+
+
+sub get_g_attribute_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_attribute');
+}
+
+sub get_g_constructor_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_constructor');
+}
+
+sub get_g_doc_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_doc');
+}
+
+sub get_g_function_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_function');
+}
+
+sub get_g_method_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_method');
+}
+
+
+sub add_g_attribute ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_attribute', $member_name, $member);
+}
+
+sub add_g_constructor ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_constructor', $member_name, $member);
+}
+
+sub add_g_doc ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_doc', $member_name, $member);
+}
+
+sub add_g_function ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_function', $member_name, $member);
+}
+
+sub add_g_method ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_method', $member_name, $member);
+}
+
+
+sub get_a_c_symbol_prefix ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_c_symbol_prefix');
+}
+
+sub get_a_glib_get_type ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_glib_get_type');
+}
+
+sub get_a_glib_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_glib_name');
+}
+
+sub get_a_glib_type_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_glib_type_name');
+}
+
+
+sub set_a_c_symbol_prefix ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_c_symbol_prefix', $value);
+}
+
+sub set_a_glib_get_type ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_glib_get_type', $value);
+}
+
+sub set_a_glib_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_glib_name', $value);
+}
+
+sub set_a_glib_type_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_glib_type_name', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/GlibSignal.pm b/tools/pm/Gir/Api/GlibSignal.pm
new file mode 100644
index 0000000..37c5291
--- /dev/null
+++ b/tools/pm/Gir/Api/GlibSignal.pm
@@ -0,0 +1,339 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::GlibSignal;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+use Gir::Api::Attribute;
+use Gir::Api::Doc;
+use Gir::Api::Parameters;
+use Gir::Api::ReturnValue;
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::GlibSignal');
+  my $groups =
+  [
+    'group_attribute',
+    'group_doc',
+    'group_parameters',
+    'group_return_value'
+  ];
+  my $attributes =
+  [
+    'attribute_action',
+    'attribute_deprecated',
+    'attribute_deprecated_version',
+    'attribute_detailed',
+    'attribute_introspectable',
+    'attribute_name',
+    'attribute_no_hooks',
+    'attribute_no_recurse',
+    'attribute_version',
+    'attribute_when'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::GlibSignal::new ($type);
+
+  $self->set_a_action($params->{'action'});
+  $self->set_a_deprecated($params->{'deprecated'});
+  $self->set_a_deprecated_version($params->{'deprecated-version'});
+  $self->set_a_detailed($params->{'detailed'});
+  $self->set_a_introspectable($params->{'introspectable'});
+  $self->set_a_name($params->{'name'});
+  $self->set_a_no_hooks($params->{'no-hooks'});
+  $self->set_a_no_recurse($params->{'no-recurse'});
+  $self->set_a_version($params->{'version'});
+  $self->set_a_when($params->{'when'});
+
+  return $self;
+}
+
+sub get_g_attribute_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_attribute', $name);
+}
+
+sub get_g_doc_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_doc', $name);
+}
+
+sub get_g_parameters_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_parameters', $name);
+}
+
+sub get_g_return_value_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_return_value', $name);
+}
+
+
+sub get_g_attribute_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_attribute', $index);
+}
+
+sub get_g_doc_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_doc', $index);
+}
+
+sub get_g_parameters_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_parameters', $index);
+}
+
+sub get_g_return_value_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_return_value', $index);
+}
+
+
+sub get_g_attribute_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_attribute');
+}
+
+sub get_g_doc_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_doc');
+}
+
+sub get_g_parameters_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_parameters');
+}
+
+sub get_g_return_value_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_return_value');
+}
+
+
+sub add_g_attribute ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_attribute', $member_name, $member);
+}
+
+sub add_g_doc ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_doc', $member_name, $member);
+}
+
+sub add_g_parameters ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_parameters', $member_name, $member);
+}
+
+sub add_g_return_value ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_return_value', $member_name, $member);
+}
+
+
+sub get_a_action ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_action');
+}
+
+sub get_a_deprecated ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated');
+}
+
+sub get_a_deprecated_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated_version');
+}
+
+sub get_a_detailed ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_detailed');
+}
+
+sub get_a_introspectable ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_introspectable');
+}
+
+sub get_a_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_name');
+}
+
+sub get_a_no_hooks ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_no_hooks');
+}
+
+sub get_a_no_recurse ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_no_recurse');
+}
+
+sub get_a_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_version');
+}
+
+sub get_a_when ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_when');
+}
+
+
+sub set_a_action ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_action', $value);
+}
+
+sub set_a_deprecated ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated', $value);
+}
+
+sub set_a_deprecated_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated_version', $value);
+}
+
+sub set_a_detailed ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_detailed', $value);
+}
+
+sub set_a_introspectable ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_introspectable', $value);
+}
+
+sub set_a_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_name', $value);
+}
+
+sub set_a_no_hooks ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_no_hooks', $value);
+}
+
+sub set_a_no_recurse ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_no_recurse', $value);
+}
+
+sub set_a_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_version', $value);
+}
+
+sub set_a_when ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_when', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/Implements.pm b/tools/pm/Gir/Api/Implements.pm
new file mode 100644
index 0000000..f5ff30d
--- /dev/null
+++ b/tools/pm/Gir/Api/Implements.pm
@@ -0,0 +1,81 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Implements;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::Implements');
+  my $groups =
+  [
+
+  ];
+  my $attributes =
+  [
+    'attribute_name'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::Implements::new ($type);
+
+  $self->set_a_name($params->{'name'});
+
+  return $self;
+}
+
+
+
+
+
+
+
+
+
+sub get_a_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_name');
+}
+
+
+sub set_a_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_name', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/Include.pm b/tools/pm/Gir/Api/Include.pm
new file mode 100644
index 0000000..e9181a1
--- /dev/null
+++ b/tools/pm/Gir/Api/Include.pm
@@ -0,0 +1,97 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Include;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::Include');
+  my $groups =
+  [
+
+  ];
+  my $attributes =
+  [
+    'attribute_name',
+    'attribute_version'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::Include::new ($type);
+
+  $self->set_a_name($params->{'name'});
+  $self->set_a_version($params->{'version'});
+
+  return $self;
+}
+
+
+
+
+
+
+
+
+
+sub get_a_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_name');
+}
+
+sub get_a_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_version');
+}
+
+
+sub set_a_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_name', $value);
+}
+
+sub set_a_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_version', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/Interface.pm b/tools/pm/Gir/Api/Interface.pm
new file mode 100644
index 0000000..2e5e86e
--- /dev/null
+++ b/tools/pm/Gir/Api/Interface.pm
@@ -0,0 +1,549 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Interface;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+use Gir::Api::Attribute;
+use Gir::Api::Doc;
+use Gir::Api::Field;
+use Gir::Api::Function;
+use Gir::Api::GlibSignal;
+use Gir::Api::Method;
+use Gir::Api::Prerequisite;
+use Gir::Api::Property;
+use Gir::Api::Record;
+use Gir::Api::Union;
+use Gir::Api::VirtualMethod;
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::Interface');
+  my $groups =
+  [
+    'group_attribute',
+    'group_doc',
+    'group_field',
+    'group_function',
+    'group_glib_signal',
+    'group_method',
+    'group_prerequisite',
+    'group_property',
+    'group_record',
+    'group_union',
+    'group_virtual_method'
+  ];
+  my $attributes =
+  [
+    'attribute_c_symbol_prefix',
+    'attribute_c_type',
+    'attribute_deprecated',
+    'attribute_deprecated_version',
+    'attribute_glib_get_type',
+    'attribute_glib_type_name',
+    'attribute_glib_type_struct',
+    'attribute_introspectable',
+    'attribute_name',
+    'attribute_version'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::Interface::new ($type);
+
+  $self->set_a_c_symbol_prefix($params->{'c:symbol-prefix'});
+  $self->set_a_c_type($params->{'c:type'});
+  $self->set_a_deprecated($params->{'deprecated'});
+  $self->set_a_deprecated_version($params->{'deprecated-version'});
+  $self->set_a_glib_get_type($params->{'glib:get-type'});
+  $self->set_a_glib_type_name($params->{'glib:type-name'});
+  $self->set_a_glib_type_struct($params->{'glib:type-struct'});
+  $self->set_a_introspectable($params->{'introspectable'});
+  $self->set_a_name($params->{'name'});
+  $self->set_a_version($params->{'version'});
+
+  return $self;
+}
+
+sub get_g_attribute_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_attribute', $name);
+}
+
+sub get_g_doc_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_doc', $name);
+}
+
+sub get_g_field_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_field', $name);
+}
+
+sub get_g_function_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_function', $name);
+}
+
+sub get_g_glib_signal_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_glib_signal', $name);
+}
+
+sub get_g_method_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_method', $name);
+}
+
+sub get_g_prerequisite_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_prerequisite', $name);
+}
+
+sub get_g_property_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_property', $name);
+}
+
+sub get_g_record_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_record', $name);
+}
+
+sub get_g_union_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_union', $name);
+}
+
+sub get_g_virtual_method_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_virtual_method', $name);
+}
+
+
+sub get_g_attribute_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_attribute', $index);
+}
+
+sub get_g_doc_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_doc', $index);
+}
+
+sub get_g_field_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_field', $index);
+}
+
+sub get_g_function_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_function', $index);
+}
+
+sub get_g_glib_signal_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_glib_signal', $index);
+}
+
+sub get_g_method_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_method', $index);
+}
+
+sub get_g_prerequisite_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_prerequisite', $index);
+}
+
+sub get_g_property_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_property', $index);
+}
+
+sub get_g_record_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_record', $index);
+}
+
+sub get_g_union_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_union', $index);
+}
+
+sub get_g_virtual_method_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_virtual_method', $index);
+}
+
+
+sub get_g_attribute_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_attribute');
+}
+
+sub get_g_doc_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_doc');
+}
+
+sub get_g_field_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_field');
+}
+
+sub get_g_function_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_function');
+}
+
+sub get_g_glib_signal_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_glib_signal');
+}
+
+sub get_g_method_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_method');
+}
+
+sub get_g_prerequisite_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_prerequisite');
+}
+
+sub get_g_property_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_property');
+}
+
+sub get_g_record_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_record');
+}
+
+sub get_g_union_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_union');
+}
+
+sub get_g_virtual_method_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_virtual_method');
+}
+
+
+sub add_g_attribute ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_attribute', $member_name, $member);
+}
+
+sub add_g_doc ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_doc', $member_name, $member);
+}
+
+sub add_g_field ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_field', $member_name, $member);
+}
+
+sub add_g_function ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_function', $member_name, $member);
+}
+
+sub add_g_glib_signal ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_glib_signal', $member_name, $member);
+}
+
+sub add_g_method ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_method', $member_name, $member);
+}
+
+sub add_g_prerequisite ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_prerequisite', $member_name, $member);
+}
+
+sub add_g_property ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_property', $member_name, $member);
+}
+
+sub add_g_record ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_record', $member_name, $member);
+}
+
+sub add_g_union ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_union', $member_name, $member);
+}
+
+sub add_g_virtual_method ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_virtual_method', $member_name, $member);
+}
+
+
+sub get_a_c_symbol_prefix ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_c_symbol_prefix');
+}
+
+sub get_a_c_type ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_c_type');
+}
+
+sub get_a_deprecated ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated');
+}
+
+sub get_a_deprecated_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated_version');
+}
+
+sub get_a_glib_get_type ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_glib_get_type');
+}
+
+sub get_a_glib_type_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_glib_type_name');
+}
+
+sub get_a_glib_type_struct ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_glib_type_struct');
+}
+
+sub get_a_introspectable ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_introspectable');
+}
+
+sub get_a_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_name');
+}
+
+sub get_a_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_version');
+}
+
+
+sub set_a_c_symbol_prefix ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_c_symbol_prefix', $value);
+}
+
+sub set_a_c_type ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_c_type', $value);
+}
+
+sub set_a_deprecated ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated', $value);
+}
+
+sub set_a_deprecated_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated_version', $value);
+}
+
+sub set_a_glib_get_type ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_glib_get_type', $value);
+}
+
+sub set_a_glib_type_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_glib_type_name', $value);
+}
+
+sub set_a_glib_type_struct ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_glib_type_struct', $value);
+}
+
+sub set_a_introspectable ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_introspectable', $value);
+}
+
+sub set_a_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_name', $value);
+}
+
+sub set_a_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_version', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/Member.pm b/tools/pm/Gir/Api/Member.pm
new file mode 100644
index 0000000..3810925
--- /dev/null
+++ b/tools/pm/Gir/Api/Member.pm
@@ -0,0 +1,129 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Member;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::Member');
+  my $groups =
+  [
+
+  ];
+  my $attributes =
+  [
+    'attribute_c_identifier',
+    'attribute_glib_nick',
+    'attribute_name',
+    'attribute_value'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::Member::new ($type);
+
+  $self->set_a_c_identifier($params->{'c:identifier'});
+  $self->set_a_glib_nick($params->{'glib:nick'});
+  $self->set_a_name($params->{'name'});
+  $self->set_a_value($params->{'value'});
+
+  return $self;
+}
+
+
+
+
+
+
+
+
+
+sub get_a_c_identifier ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_c_identifier');
+}
+
+sub get_a_glib_nick ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_glib_nick');
+}
+
+sub get_a_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_name');
+}
+
+sub get_a_value ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_value');
+}
+
+
+sub set_a_c_identifier ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_c_identifier', $value);
+}
+
+sub set_a_glib_nick ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_glib_nick', $value);
+}
+
+sub set_a_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_name', $value);
+}
+
+sub set_a_value ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_value', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/Method.pm b/tools/pm/Gir/Api/Method.pm
new file mode 100644
index 0000000..4130a02
--- /dev/null
+++ b/tools/pm/Gir/Api/Method.pm
@@ -0,0 +1,339 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Method;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+use Gir::Api::Attribute;
+use Gir::Api::Doc;
+use Gir::Api::Parameters;
+use Gir::Api::ReturnValue;
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::Method');
+  my $groups =
+  [
+    'group_attribute',
+    'group_doc',
+    'group_parameters',
+    'group_return_value'
+  ];
+  my $attributes =
+  [
+    'attribute_c_identifier',
+    'attribute_deprecated',
+    'attribute_deprecated_version',
+    'attribute_introspectable',
+    'attribute_moved_to',
+    'attribute_name',
+    'attribute_shadowed_by',
+    'attribute_shadows',
+    'attribute_throws',
+    'attribute_version'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::Method::new ($type);
+
+  $self->set_a_c_identifier($params->{'c:identifier'});
+  $self->set_a_deprecated($params->{'deprecated'});
+  $self->set_a_deprecated_version($params->{'deprecated-version'});
+  $self->set_a_introspectable($params->{'introspectable'});
+  $self->set_a_moved_to($params->{'moved-to'});
+  $self->set_a_name($params->{'name'});
+  $self->set_a_shadowed_by($params->{'shadowed-by'});
+  $self->set_a_shadows($params->{'shadows'});
+  $self->set_a_throws($params->{'throws'});
+  $self->set_a_version($params->{'version'});
+
+  return $self;
+}
+
+sub get_g_attribute_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_attribute', $name);
+}
+
+sub get_g_doc_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_doc', $name);
+}
+
+sub get_g_parameters_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_parameters', $name);
+}
+
+sub get_g_return_value_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_return_value', $name);
+}
+
+
+sub get_g_attribute_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_attribute', $index);
+}
+
+sub get_g_doc_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_doc', $index);
+}
+
+sub get_g_parameters_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_parameters', $index);
+}
+
+sub get_g_return_value_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_return_value', $index);
+}
+
+
+sub get_g_attribute_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_attribute');
+}
+
+sub get_g_doc_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_doc');
+}
+
+sub get_g_parameters_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_parameters');
+}
+
+sub get_g_return_value_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_return_value');
+}
+
+
+sub add_g_attribute ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_attribute', $member_name, $member);
+}
+
+sub add_g_doc ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_doc', $member_name, $member);
+}
+
+sub add_g_parameters ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_parameters', $member_name, $member);
+}
+
+sub add_g_return_value ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_return_value', $member_name, $member);
+}
+
+
+sub get_a_c_identifier ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_c_identifier');
+}
+
+sub get_a_deprecated ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated');
+}
+
+sub get_a_deprecated_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated_version');
+}
+
+sub get_a_introspectable ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_introspectable');
+}
+
+sub get_a_moved_to ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_moved_to');
+}
+
+sub get_a_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_name');
+}
+
+sub get_a_shadowed_by ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_shadowed_by');
+}
+
+sub get_a_shadows ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_shadows');
+}
+
+sub get_a_throws ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_throws');
+}
+
+sub get_a_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_version');
+}
+
+
+sub set_a_c_identifier ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_c_identifier', $value);
+}
+
+sub set_a_deprecated ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated', $value);
+}
+
+sub set_a_deprecated_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated_version', $value);
+}
+
+sub set_a_introspectable ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_introspectable', $value);
+}
+
+sub set_a_moved_to ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_moved_to', $value);
+}
+
+sub set_a_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_name', $value);
+}
+
+sub set_a_shadowed_by ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_shadowed_by', $value);
+}
+
+sub set_a_shadows ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_shadows', $value);
+}
+
+sub set_a_throws ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_throws', $value);
+}
+
+sub set_a_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_version', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/Namespace.pm b/tools/pm/Gir/Api/Namespace.pm
new file mode 100644
index 0000000..cedac4d
--- /dev/null
+++ b/tools/pm/Gir/Api/Namespace.pm
@@ -0,0 +1,469 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Namespace;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+use Gir::Api::Alias;
+use Gir::Api::Bitfield;
+use Gir::Api::Callback;
+use Gir::Api::Class;
+use Gir::Api::Constant;
+use Gir::Api::Enumeration;
+use Gir::Api::Function;
+use Gir::Api::GlibBoxed;
+use Gir::Api::Interface;
+use Gir::Api::Record;
+use Gir::Api::Union;
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::Namespace');
+  my $groups =
+  [
+    'group_alias',
+    'group_bitfield',
+    'group_callback',
+    'group_class',
+    'group_constant',
+    'group_enumeration',
+    'group_function',
+    'group_glib_boxed',
+    'group_interface',
+    'group_record',
+    'group_union'
+  ];
+  my $attributes =
+  [
+    'attribute_c_identifier_prefixes',
+    'attribute_c_symbol_prefixes',
+    'attribute_name',
+    'attribute_shared_library',
+    'attribute_version'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::Namespace::new ($type);
+
+  $self->set_a_c_identifier_prefixes($params->{'c:identifier-prefixes'});
+  $self->set_a_c_symbol_prefixes($params->{'c:symbol-prefixes'});
+  $self->set_a_name($params->{'name'});
+  $self->set_a_shared_library($params->{'shared-library'});
+  $self->set_a_version($params->{'version'});
+
+  return $self;
+}
+
+sub get_g_alias_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_alias', $name);
+}
+
+sub get_g_bitfield_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_bitfield', $name);
+}
+
+sub get_g_callback_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_callback', $name);
+}
+
+sub get_g_class_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_class', $name);
+}
+
+sub get_g_constant_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_constant', $name);
+}
+
+sub get_g_enumeration_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_enumeration', $name);
+}
+
+sub get_g_function_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_function', $name);
+}
+
+sub get_g_glib_boxed_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_glib_boxed', $name);
+}
+
+sub get_g_interface_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_interface', $name);
+}
+
+sub get_g_record_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_record', $name);
+}
+
+sub get_g_union_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_union', $name);
+}
+
+
+sub get_g_alias_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_alias', $index);
+}
+
+sub get_g_bitfield_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_bitfield', $index);
+}
+
+sub get_g_callback_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_callback', $index);
+}
+
+sub get_g_class_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_class', $index);
+}
+
+sub get_g_constant_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_constant', $index);
+}
+
+sub get_g_enumeration_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_enumeration', $index);
+}
+
+sub get_g_function_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_function', $index);
+}
+
+sub get_g_glib_boxed_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_glib_boxed', $index);
+}
+
+sub get_g_interface_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_interface', $index);
+}
+
+sub get_g_record_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_record', $index);
+}
+
+sub get_g_union_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_union', $index);
+}
+
+
+sub get_g_alias_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_alias');
+}
+
+sub get_g_bitfield_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_bitfield');
+}
+
+sub get_g_callback_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_callback');
+}
+
+sub get_g_class_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_class');
+}
+
+sub get_g_constant_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_constant');
+}
+
+sub get_g_enumeration_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_enumeration');
+}
+
+sub get_g_function_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_function');
+}
+
+sub get_g_glib_boxed_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_glib_boxed');
+}
+
+sub get_g_interface_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_interface');
+}
+
+sub get_g_record_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_record');
+}
+
+sub get_g_union_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_union');
+}
+
+
+sub add_g_alias ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_alias', $member_name, $member);
+}
+
+sub add_g_bitfield ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_bitfield', $member_name, $member);
+}
+
+sub add_g_callback ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_callback', $member_name, $member);
+}
+
+sub add_g_class ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_class', $member_name, $member);
+}
+
+sub add_g_constant ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_constant', $member_name, $member);
+}
+
+sub add_g_enumeration ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_enumeration', $member_name, $member);
+}
+
+sub add_g_function ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_function', $member_name, $member);
+}
+
+sub add_g_glib_boxed ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_glib_boxed', $member_name, $member);
+}
+
+sub add_g_interface ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_interface', $member_name, $member);
+}
+
+sub add_g_record ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_record', $member_name, $member);
+}
+
+sub add_g_union ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_union', $member_name, $member);
+}
+
+
+sub get_a_c_identifier_prefixes ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_c_identifier_prefixes');
+}
+
+sub get_a_c_symbol_prefixes ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_c_symbol_prefixes');
+}
+
+sub get_a_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_name');
+}
+
+sub get_a_shared_library ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_shared_library');
+}
+
+sub get_a_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_version');
+}
+
+
+sub set_a_c_identifier_prefixes ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_c_identifier_prefixes', $value);
+}
+
+sub set_a_c_symbol_prefixes ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_c_symbol_prefixes', $value);
+}
+
+sub set_a_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_name', $value);
+}
+
+sub set_a_shared_library ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_shared_library', $value);
+}
+
+sub set_a_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_version', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/Package.pm b/tools/pm/Gir/Api/Package.pm
new file mode 100644
index 0000000..d50550d
--- /dev/null
+++ b/tools/pm/Gir/Api/Package.pm
@@ -0,0 +1,81 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Package;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::Package');
+  my $groups =
+  [
+
+  ];
+  my $attributes =
+  [
+    'attribute_name'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::Package::new ($type);
+
+  $self->set_a_name($params->{'name'});
+
+  return $self;
+}
+
+
+
+
+
+
+
+
+
+sub get_a_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_name');
+}
+
+
+sub set_a_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_name', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/Parameter.pm b/tools/pm/Gir/Api/Parameter.pm
new file mode 100644
index 0000000..edc72da
--- /dev/null
+++ b/tools/pm/Gir/Api/Parameter.pm
@@ -0,0 +1,353 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Parameter;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+use Gir::Api::Array;
+use Gir::Api::Attribute;
+use Gir::Api::Doc;
+use Gir::Api::Type;
+use Gir::Api::Varargs;
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::Parameter');
+  my $groups =
+  [
+    'group_array',
+    'group_attribute',
+    'group_doc',
+    'group_type',
+    'group_varargs'
+  ];
+  my $attributes =
+  [
+    'attribute_allow_none',
+    'attribute_caller_allocates',
+    'attribute_closure',
+    'attribute_destroy',
+    'attribute_direction',
+    'attribute_name',
+    'attribute_scope',
+    'attribute_skip',
+    'attribute_transfer_ownership'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::Parameter::new ($type);
+
+  $self->set_a_allow_none($params->{'allow-none'});
+  $self->set_a_caller_allocates($params->{'caller-allocates'});
+  $self->set_a_closure($params->{'closure'});
+  $self->set_a_destroy($params->{'destroy'});
+  $self->set_a_direction($params->{'direction'});
+  $self->set_a_name($params->{'name'});
+  $self->set_a_scope($params->{'scope'});
+  $self->set_a_skip($params->{'skip'});
+  $self->set_a_transfer_ownership($params->{'transfer-ownership'});
+
+  return $self;
+}
+
+sub get_g_array_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_array', $name);
+}
+
+sub get_g_attribute_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_attribute', $name);
+}
+
+sub get_g_doc_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_doc', $name);
+}
+
+sub get_g_type_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_type', $name);
+}
+
+sub get_g_varargs_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_varargs', $name);
+}
+
+
+sub get_g_array_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_array', $index);
+}
+
+sub get_g_attribute_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_attribute', $index);
+}
+
+sub get_g_doc_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_doc', $index);
+}
+
+sub get_g_type_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_type', $index);
+}
+
+sub get_g_varargs_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_varargs', $index);
+}
+
+
+sub get_g_array_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_array');
+}
+
+sub get_g_attribute_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_attribute');
+}
+
+sub get_g_doc_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_doc');
+}
+
+sub get_g_type_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_type');
+}
+
+sub get_g_varargs_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_varargs');
+}
+
+
+sub add_g_array ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_array', $member_name, $member);
+}
+
+sub add_g_attribute ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_attribute', $member_name, $member);
+}
+
+sub add_g_doc ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_doc', $member_name, $member);
+}
+
+sub add_g_type ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_type', $member_name, $member);
+}
+
+sub add_g_varargs ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_varargs', $member_name, $member);
+}
+
+
+sub get_a_allow_none ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_allow_none');
+}
+
+sub get_a_caller_allocates ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_caller_allocates');
+}
+
+sub get_a_closure ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_closure');
+}
+
+sub get_a_destroy ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_destroy');
+}
+
+sub get_a_direction ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_direction');
+}
+
+sub get_a_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_name');
+}
+
+sub get_a_scope ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_scope');
+}
+
+sub get_a_skip ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_skip');
+}
+
+sub get_a_transfer_ownership ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_transfer_ownership');
+}
+
+
+sub set_a_allow_none ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_allow_none', $value);
+}
+
+sub set_a_caller_allocates ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_caller_allocates', $value);
+}
+
+sub set_a_closure ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_closure', $value);
+}
+
+sub set_a_destroy ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_destroy', $value);
+}
+
+sub set_a_direction ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_direction', $value);
+}
+
+sub set_a_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_name', $value);
+}
+
+sub set_a_scope ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_scope', $value);
+}
+
+sub set_a_skip ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_skip', $value);
+}
+
+sub set_a_transfer_ownership ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_transfer_ownership', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/Parameters.pm b/tools/pm/Gir/Api/Parameters.pm
new file mode 100644
index 0000000..344059d
--- /dev/null
+++ b/tools/pm/Gir/Api/Parameters.pm
@@ -0,0 +1,93 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Parameters;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+use Gir::Api::Parameter;
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::Parameters');
+  my $groups =
+  [
+    'group_parameter'
+  ];
+  my $attributes =
+  [
+
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::Parameters::new ($type);
+
+
+
+  return $self;
+}
+
+sub get_g_parameter_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_parameter', $name);
+}
+
+
+sub get_g_parameter_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_parameter', $index);
+}
+
+
+sub get_g_parameter_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_parameter');
+}
+
+
+sub add_g_parameter ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_parameter', $member_name, $member);
+}
+
+
+
+
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/Prerequisite.pm b/tools/pm/Gir/Api/Prerequisite.pm
new file mode 100644
index 0000000..c784b97
--- /dev/null
+++ b/tools/pm/Gir/Api/Prerequisite.pm
@@ -0,0 +1,81 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Prerequisite;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::Prerequisite');
+  my $groups =
+  [
+
+  ];
+  my $attributes =
+  [
+    'attribute_name'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::Prerequisite::new ($type);
+
+  $self->set_a_name($params->{'name'});
+
+  return $self;
+}
+
+
+
+
+
+
+
+
+
+sub get_a_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_name');
+}
+
+
+sub set_a_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_name', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/Property.pm b/tools/pm/Gir/Api/Property.pm
new file mode 100644
index 0000000..0085534
--- /dev/null
+++ b/tools/pm/Gir/Api/Property.pm
@@ -0,0 +1,369 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Property;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+use Gir::Api::Array;
+use Gir::Api::Attribute;
+use Gir::Api::Doc;
+use Gir::Api::Type;
+use Gir::Api::Varargs;
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::Property');
+  my $groups =
+  [
+    'group_array',
+    'group_attribute',
+    'group_doc',
+    'group_type',
+    'group_varargs'
+  ];
+  my $attributes =
+  [
+    'attribute_construct',
+    'attribute_construct_only',
+    'attribute_deprecated',
+    'attribute_deprecated_version',
+    'attribute_introspectable',
+    'attribute_name',
+    'attribute_readable',
+    'attribute_transfer_ownership',
+    'attribute_version',
+    'attribute_writable'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::Property::new ($type);
+
+  $self->set_a_construct($params->{'construct'});
+  $self->set_a_construct_only($params->{'construct-only'});
+  $self->set_a_deprecated($params->{'deprecated'});
+  $self->set_a_deprecated_version($params->{'deprecated-version'});
+  $self->set_a_introspectable($params->{'introspectable'});
+  $self->set_a_name($params->{'name'});
+  $self->set_a_readable($params->{'readable'});
+  $self->set_a_transfer_ownership($params->{'transfer-ownership'});
+  $self->set_a_version($params->{'version'});
+  $self->set_a_writable($params->{'writable'});
+
+  return $self;
+}
+
+sub get_g_array_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_array', $name);
+}
+
+sub get_g_attribute_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_attribute', $name);
+}
+
+sub get_g_doc_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_doc', $name);
+}
+
+sub get_g_type_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_type', $name);
+}
+
+sub get_g_varargs_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_varargs', $name);
+}
+
+
+sub get_g_array_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_array', $index);
+}
+
+sub get_g_attribute_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_attribute', $index);
+}
+
+sub get_g_doc_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_doc', $index);
+}
+
+sub get_g_type_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_type', $index);
+}
+
+sub get_g_varargs_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_varargs', $index);
+}
+
+
+sub get_g_array_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_array');
+}
+
+sub get_g_attribute_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_attribute');
+}
+
+sub get_g_doc_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_doc');
+}
+
+sub get_g_type_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_type');
+}
+
+sub get_g_varargs_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_varargs');
+}
+
+
+sub add_g_array ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_array', $member_name, $member);
+}
+
+sub add_g_attribute ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_attribute', $member_name, $member);
+}
+
+sub add_g_doc ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_doc', $member_name, $member);
+}
+
+sub add_g_type ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_type', $member_name, $member);
+}
+
+sub add_g_varargs ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_varargs', $member_name, $member);
+}
+
+
+sub get_a_construct ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_construct');
+}
+
+sub get_a_construct_only ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_construct_only');
+}
+
+sub get_a_deprecated ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated');
+}
+
+sub get_a_deprecated_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated_version');
+}
+
+sub get_a_introspectable ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_introspectable');
+}
+
+sub get_a_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_name');
+}
+
+sub get_a_readable ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_readable');
+}
+
+sub get_a_transfer_ownership ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_transfer_ownership');
+}
+
+sub get_a_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_version');
+}
+
+sub get_a_writable ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_writable');
+}
+
+
+sub set_a_construct ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_construct', $value);
+}
+
+sub set_a_construct_only ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_construct_only', $value);
+}
+
+sub set_a_deprecated ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated', $value);
+}
+
+sub set_a_deprecated_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated_version', $value);
+}
+
+sub set_a_introspectable ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_introspectable', $value);
+}
+
+sub set_a_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_name', $value);
+}
+
+sub set_a_readable ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_readable', $value);
+}
+
+sub set_a_transfer_ownership ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_transfer_ownership', $value);
+}
+
+sub set_a_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_version', $value);
+}
+
+sub set_a_writable ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_writable', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/Record.pm b/tools/pm/Gir/Api/Record.pm
new file mode 100644
index 0000000..dcefbf2
--- /dev/null
+++ b/tools/pm/Gir/Api/Record.pm
@@ -0,0 +1,491 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Record;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+use Gir::Api::Attribute;
+use Gir::Api::Constructor;
+use Gir::Api::Doc;
+use Gir::Api::Field;
+use Gir::Api::Function;
+use Gir::Api::Method;
+use Gir::Api::Record;
+use Gir::Api::Union;
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::Record');
+  my $groups =
+  [
+    'group_attribute',
+    'group_constructor',
+    'group_doc',
+    'group_field',
+    'group_function',
+    'group_method',
+    'group_record',
+    'group_union'
+  ];
+  my $attributes =
+  [
+    'attribute_c_symbol_prefix',
+    'attribute_c_type',
+    'attribute_deprecated',
+    'attribute_deprecated_version',
+    'attribute_disguised',
+    'attribute_foreign',
+    'attribute_glib_get_type',
+    'attribute_glib_is_gtype_struct_for',
+    'attribute_glib_type_name',
+    'attribute_introspectable',
+    'attribute_name',
+    'attribute_version'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::Record::new ($type);
+
+  $self->set_a_c_symbol_prefix($params->{'c:symbol-prefix'});
+  $self->set_a_c_type($params->{'c:type'});
+  $self->set_a_deprecated($params->{'deprecated'});
+  $self->set_a_deprecated_version($params->{'deprecated-version'});
+  $self->set_a_disguised($params->{'disguised'});
+  $self->set_a_foreign($params->{'foreign'});
+  $self->set_a_glib_get_type($params->{'glib:get-type'});
+  $self->set_a_glib_is_gtype_struct_for($params->{'glib:is-gtype-struct-for'});
+  $self->set_a_glib_type_name($params->{'glib:type-name'});
+  $self->set_a_introspectable($params->{'introspectable'});
+  $self->set_a_name($params->{'name'});
+  $self->set_a_version($params->{'version'});
+
+  return $self;
+}
+
+sub get_g_attribute_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_attribute', $name);
+}
+
+sub get_g_constructor_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_constructor', $name);
+}
+
+sub get_g_doc_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_doc', $name);
+}
+
+sub get_g_field_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_field', $name);
+}
+
+sub get_g_function_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_function', $name);
+}
+
+sub get_g_method_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_method', $name);
+}
+
+sub get_g_record_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_record', $name);
+}
+
+sub get_g_union_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_union', $name);
+}
+
+
+sub get_g_attribute_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_attribute', $index);
+}
+
+sub get_g_constructor_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_constructor', $index);
+}
+
+sub get_g_doc_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_doc', $index);
+}
+
+sub get_g_field_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_field', $index);
+}
+
+sub get_g_function_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_function', $index);
+}
+
+sub get_g_method_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_method', $index);
+}
+
+sub get_g_record_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_record', $index);
+}
+
+sub get_g_union_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_union', $index);
+}
+
+
+sub get_g_attribute_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_attribute');
+}
+
+sub get_g_constructor_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_constructor');
+}
+
+sub get_g_doc_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_doc');
+}
+
+sub get_g_field_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_field');
+}
+
+sub get_g_function_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_function');
+}
+
+sub get_g_method_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_method');
+}
+
+sub get_g_record_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_record');
+}
+
+sub get_g_union_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_union');
+}
+
+
+sub add_g_attribute ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_attribute', $member_name, $member);
+}
+
+sub add_g_constructor ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_constructor', $member_name, $member);
+}
+
+sub add_g_doc ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_doc', $member_name, $member);
+}
+
+sub add_g_field ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_field', $member_name, $member);
+}
+
+sub add_g_function ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_function', $member_name, $member);
+}
+
+sub add_g_method ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_method', $member_name, $member);
+}
+
+sub add_g_record ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_record', $member_name, $member);
+}
+
+sub add_g_union ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_union', $member_name, $member);
+}
+
+
+sub get_a_c_symbol_prefix ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_c_symbol_prefix');
+}
+
+sub get_a_c_type ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_c_type');
+}
+
+sub get_a_deprecated ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated');
+}
+
+sub get_a_deprecated_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated_version');
+}
+
+sub get_a_disguised ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_disguised');
+}
+
+sub get_a_foreign ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_foreign');
+}
+
+sub get_a_glib_get_type ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_glib_get_type');
+}
+
+sub get_a_glib_is_gtype_struct_for ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_glib_is_gtype_struct_for');
+}
+
+sub get_a_glib_type_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_glib_type_name');
+}
+
+sub get_a_introspectable ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_introspectable');
+}
+
+sub get_a_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_name');
+}
+
+sub get_a_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_version');
+}
+
+
+sub set_a_c_symbol_prefix ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_c_symbol_prefix', $value);
+}
+
+sub set_a_c_type ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_c_type', $value);
+}
+
+sub set_a_deprecated ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated', $value);
+}
+
+sub set_a_deprecated_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated_version', $value);
+}
+
+sub set_a_disguised ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_disguised', $value);
+}
+
+sub set_a_foreign ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_foreign', $value);
+}
+
+sub set_a_glib_get_type ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_glib_get_type', $value);
+}
+
+sub set_a_glib_is_gtype_struct_for ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_glib_is_gtype_struct_for', $value);
+}
+
+sub set_a_glib_type_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_glib_type_name', $value);
+}
+
+sub set_a_introspectable ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_introspectable', $value);
+}
+
+sub set_a_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_name', $value);
+}
+
+sub set_a_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_version', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/Repository.pm b/tools/pm/Gir/Api/Repository.pm
new file mode 100644
index 0000000..2ca392d
--- /dev/null
+++ b/tools/pm/Gir/Api/Repository.pm
@@ -0,0 +1,243 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Repository;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+use Gir::Api::CInclude;
+use Gir::Api::Include;
+use Gir::Api::Namespace;
+use Gir::Api::Package;
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::Repository');
+  my $groups =
+  [
+    'group_c_include',
+    'group_include',
+    'group_namespace',
+    'group_package'
+  ];
+  my $attributes =
+  [
+    'attribute_version',
+    'attribute_xmlns',
+    'attribute_xmlns_c',
+    'attribute_xmlns_glib'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::Repository::new ($type);
+
+  $self->set_a_version($params->{'version'});
+  $self->set_a_xmlns($params->{'xmlns'});
+  $self->set_a_xmlns_c($params->{'xmlns:c'});
+  $self->set_a_xmlns_glib($params->{'xmlns:glib'});
+
+  return $self;
+}
+
+sub get_g_c_include_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_c_include', $name);
+}
+
+sub get_g_include_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_include', $name);
+}
+
+sub get_g_namespace_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_namespace', $name);
+}
+
+sub get_g_package_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_package', $name);
+}
+
+
+sub get_g_c_include_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_c_include', $index);
+}
+
+sub get_g_include_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_include', $index);
+}
+
+sub get_g_namespace_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_namespace', $index);
+}
+
+sub get_g_package_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_package', $index);
+}
+
+
+sub get_g_c_include_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_c_include');
+}
+
+sub get_g_include_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_include');
+}
+
+sub get_g_namespace_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_namespace');
+}
+
+sub get_g_package_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_package');
+}
+
+
+sub add_g_c_include ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_c_include', $member_name, $member);
+}
+
+sub add_g_include ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_include', $member_name, $member);
+}
+
+sub add_g_namespace ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_namespace', $member_name, $member);
+}
+
+sub add_g_package ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_package', $member_name, $member);
+}
+
+
+sub get_a_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_version');
+}
+
+sub get_a_xmlns ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_xmlns');
+}
+
+sub get_a_xmlns_c ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_xmlns_c');
+}
+
+sub get_a_xmlns_glib ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_xmlns_glib');
+}
+
+
+sub set_a_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_version', $value);
+}
+
+sub set_a_xmlns ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_xmlns', $value);
+}
+
+sub set_a_xmlns_c ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_xmlns_c', $value);
+}
+
+sub set_a_xmlns_glib ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_xmlns_glib', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/ReturnValue.pm b/tools/pm/Gir/Api/ReturnValue.pm
new file mode 100644
index 0000000..a956f47
--- /dev/null
+++ b/tools/pm/Gir/Api/ReturnValue.pm
@@ -0,0 +1,241 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::ReturnValue;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+use Gir::Api::Array;
+use Gir::Api::Attribute;
+use Gir::Api::Doc;
+use Gir::Api::Type;
+use Gir::Api::Varargs;
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::ReturnValue');
+  my $groups =
+  [
+    'group_array',
+    'group_attribute',
+    'group_doc',
+    'group_type',
+    'group_varargs'
+  ];
+  my $attributes =
+  [
+    'attribute_skip',
+    'attribute_transfer_ownership'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::ReturnValue::new ($type);
+
+  $self->set_a_skip($params->{'skip'});
+  $self->set_a_transfer_ownership($params->{'transfer-ownership'});
+
+  return $self;
+}
+
+sub get_g_array_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_array', $name);
+}
+
+sub get_g_attribute_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_attribute', $name);
+}
+
+sub get_g_doc_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_doc', $name);
+}
+
+sub get_g_type_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_type', $name);
+}
+
+sub get_g_varargs_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_varargs', $name);
+}
+
+
+sub get_g_array_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_array', $index);
+}
+
+sub get_g_attribute_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_attribute', $index);
+}
+
+sub get_g_doc_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_doc', $index);
+}
+
+sub get_g_type_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_type', $index);
+}
+
+sub get_g_varargs_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_varargs', $index);
+}
+
+
+sub get_g_array_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_array');
+}
+
+sub get_g_attribute_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_attribute');
+}
+
+sub get_g_doc_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_doc');
+}
+
+sub get_g_type_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_type');
+}
+
+sub get_g_varargs_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_varargs');
+}
+
+
+sub add_g_array ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_array', $member_name, $member);
+}
+
+sub add_g_attribute ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_attribute', $member_name, $member);
+}
+
+sub add_g_doc ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_doc', $member_name, $member);
+}
+
+sub add_g_type ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_type', $member_name, $member);
+}
+
+sub add_g_varargs ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_varargs', $member_name, $member);
+}
+
+
+sub get_a_skip ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_skip');
+}
+
+sub get_a_transfer_ownership ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_transfer_ownership');
+}
+
+
+sub set_a_skip ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_skip', $value);
+}
+
+sub set_a_transfer_ownership ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_transfer_ownership', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/TopLevel.pm b/tools/pm/Gir/Api/TopLevel.pm
new file mode 100644
index 0000000..05b2031
--- /dev/null
+++ b/tools/pm/Gir/Api/TopLevel.pm
@@ -0,0 +1,93 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::TopLevel;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+use Gir::Api::Repository;
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::TopLevel');
+  my $groups =
+  [
+    'group_repository'
+  ];
+  my $attributes =
+  [
+
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::TopLevel::new ($type);
+
+
+
+  return $self;
+}
+
+sub get_g_repository_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_repository', $name);
+}
+
+
+sub get_g_repository_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_repository', $index);
+}
+
+
+sub get_g_repository_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_repository');
+}
+
+
+sub add_g_repository ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_repository', $member_name, $member);
+}
+
+
+
+
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/Type.pm b/tools/pm/Gir/Api/Type.pm
new file mode 100644
index 0000000..b8b17c3
--- /dev/null
+++ b/tools/pm/Gir/Api/Type.pm
@@ -0,0 +1,197 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Type;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+use Gir::Api::Array;
+use Gir::Api::Type;
+use Gir::Api::Varargs;
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::Type');
+  my $groups =
+  [
+    'group_array',
+    'group_type',
+    'group_varargs'
+  ];
+  my $attributes =
+  [
+    'attribute_c_type',
+    'attribute_foreign',
+    'attribute_name'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::Type::new ($type);
+
+  $self->set_a_c_type($params->{'c:type'});
+  $self->set_a_foreign($params->{'foreign'});
+  $self->set_a_name($params->{'name'});
+
+  return $self;
+}
+
+sub get_g_array_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_array', $name);
+}
+
+sub get_g_type_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_type', $name);
+}
+
+sub get_g_varargs_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_varargs', $name);
+}
+
+
+sub get_g_array_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_array', $index);
+}
+
+sub get_g_type_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_type', $index);
+}
+
+sub get_g_varargs_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_varargs', $index);
+}
+
+
+sub get_g_array_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_array');
+}
+
+sub get_g_type_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_type');
+}
+
+sub get_g_varargs_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_varargs');
+}
+
+
+sub add_g_array ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_array', $member_name, $member);
+}
+
+sub add_g_type ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_type', $member_name, $member);
+}
+
+sub add_g_varargs ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_varargs', $member_name, $member);
+}
+
+
+sub get_a_c_type ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_c_type');
+}
+
+sub get_a_foreign ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_foreign');
+}
+
+sub get_a_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_name');
+}
+
+
+sub set_a_c_type ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_c_type', $value);
+}
+
+sub set_a_foreign ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_foreign', $value);
+}
+
+sub set_a_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_name', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/Union.pm b/tools/pm/Gir/Api/Union.pm
new file mode 100644
index 0000000..820fc0d
--- /dev/null
+++ b/tools/pm/Gir/Api/Union.pm
@@ -0,0 +1,443 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Union;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+use Gir::Api::Attribute;
+use Gir::Api::Constructor;
+use Gir::Api::Doc;
+use Gir::Api::Field;
+use Gir::Api::Function;
+use Gir::Api::Method;
+use Gir::Api::Record;
+use Gir::Api::Union;
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::Union');
+  my $groups =
+  [
+    'group_attribute',
+    'group_constructor',
+    'group_doc',
+    'group_field',
+    'group_function',
+    'group_method',
+    'group_record',
+    'group_union'
+  ];
+  my $attributes =
+  [
+    'attribute_c_symbol_prefix',
+    'attribute_c_type',
+    'attribute_deprecated',
+    'attribute_deprecated_version',
+    'attribute_glib_get_type',
+    'attribute_glib_type_name',
+    'attribute_introspectable',
+    'attribute_name',
+    'attribute_version'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::Union::new ($type);
+
+  $self->set_a_c_symbol_prefix($params->{'c:symbol-prefix'});
+  $self->set_a_c_type($params->{'c:type'});
+  $self->set_a_deprecated($params->{'deprecated'});
+  $self->set_a_deprecated_version($params->{'deprecated-version'});
+  $self->set_a_glib_get_type($params->{'glib:get-type'});
+  $self->set_a_glib_type_name($params->{'glib:type-name'});
+  $self->set_a_introspectable($params->{'introspectable'});
+  $self->set_a_name($params->{'name'});
+  $self->set_a_version($params->{'version'});
+
+  return $self;
+}
+
+sub get_g_attribute_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_attribute', $name);
+}
+
+sub get_g_constructor_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_constructor', $name);
+}
+
+sub get_g_doc_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_doc', $name);
+}
+
+sub get_g_field_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_field', $name);
+}
+
+sub get_g_function_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_function', $name);
+}
+
+sub get_g_method_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_method', $name);
+}
+
+sub get_g_record_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_record', $name);
+}
+
+sub get_g_union_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_union', $name);
+}
+
+
+sub get_g_attribute_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_attribute', $index);
+}
+
+sub get_g_constructor_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_constructor', $index);
+}
+
+sub get_g_doc_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_doc', $index);
+}
+
+sub get_g_field_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_field', $index);
+}
+
+sub get_g_function_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_function', $index);
+}
+
+sub get_g_method_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_method', $index);
+}
+
+sub get_g_record_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_record', $index);
+}
+
+sub get_g_union_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_union', $index);
+}
+
+
+sub get_g_attribute_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_attribute');
+}
+
+sub get_g_constructor_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_constructor');
+}
+
+sub get_g_doc_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_doc');
+}
+
+sub get_g_field_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_field');
+}
+
+sub get_g_function_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_function');
+}
+
+sub get_g_method_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_method');
+}
+
+sub get_g_record_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_record');
+}
+
+sub get_g_union_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_union');
+}
+
+
+sub add_g_attribute ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_attribute', $member_name, $member);
+}
+
+sub add_g_constructor ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_constructor', $member_name, $member);
+}
+
+sub add_g_doc ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_doc', $member_name, $member);
+}
+
+sub add_g_field ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_field', $member_name, $member);
+}
+
+sub add_g_function ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_function', $member_name, $member);
+}
+
+sub add_g_method ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_method', $member_name, $member);
+}
+
+sub add_g_record ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_record', $member_name, $member);
+}
+
+sub add_g_union ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_union', $member_name, $member);
+}
+
+
+sub get_a_c_symbol_prefix ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_c_symbol_prefix');
+}
+
+sub get_a_c_type ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_c_type');
+}
+
+sub get_a_deprecated ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated');
+}
+
+sub get_a_deprecated_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated_version');
+}
+
+sub get_a_glib_get_type ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_glib_get_type');
+}
+
+sub get_a_glib_type_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_glib_type_name');
+}
+
+sub get_a_introspectable ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_introspectable');
+}
+
+sub get_a_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_name');
+}
+
+sub get_a_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_version');
+}
+
+
+sub set_a_c_symbol_prefix ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_c_symbol_prefix', $value);
+}
+
+sub set_a_c_type ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_c_type', $value);
+}
+
+sub set_a_deprecated ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated', $value);
+}
+
+sub set_a_deprecated_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated_version', $value);
+}
+
+sub set_a_glib_get_type ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_glib_get_type', $value);
+}
+
+sub set_a_glib_type_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_glib_type_name', $value);
+}
+
+sub set_a_introspectable ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_introspectable', $value);
+}
+
+sub set_a_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_name', $value);
+}
+
+sub set_a_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_version', $value);
+}
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/Varargs.pm b/tools/pm/Gir/Api/Varargs.pm
new file mode 100644
index 0000000..5db5b56
--- /dev/null
+++ b/tools/pm/Gir/Api/Varargs.pm
@@ -0,0 +1,69 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::Varargs;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::Varargs');
+  my $groups =
+  [
+
+  ];
+  my $attributes =
+  [
+
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::Varargs::new ($type);
+
+
+
+  return $self;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+1; # indicate proper module load.
diff --git a/tools/pm/Gir/Api/VirtualMethod.pm b/tools/pm/Gir/Api/VirtualMethod.pm
new file mode 100644
index 0000000..aed375a
--- /dev/null
+++ b/tools/pm/Gir/Api/VirtualMethod.pm
@@ -0,0 +1,291 @@
+## This file was generated by taghandlerwriter.pl script.
+##
+## Copyright 2011 Krzesimir Nowak
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program 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 General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+##
+
+package Gir::Api::VirtualMethod;
+
+use strict;
+use warnings;
+
+use parent qw(Gir::Api::Common::Base);
+
+use Gir::Api::Attribute;
+use Gir::Api::Doc;
+use Gir::Api::Parameters;
+use Gir::Api::ReturnValue;
+
+sub new ($)
+{
+  my $type = shift;
+  my $class = (ref ($type) or $type or 'Gir::Api::VirtualMethod');
+  my $groups =
+  [
+    'group_attribute',
+    'group_doc',
+    'group_parameters',
+    'group_return_value'
+  ];
+  my $attributes =
+  [
+    'attribute_deprecated',
+    'attribute_deprecated_version',
+    'attribute_introspectable',
+    'attribute_invoker',
+    'attribute_name',
+    'attribute_throws',
+    'attribute_version'
+  ];
+  my $self = $class->SUPER::new ($groups, $attributes);
+
+  bless ($self, $class);
+  return $self;
+}
+
+sub new_with_params ($$)
+{
+  my ($type, $params) = @_;
+  my $self = Gir::Api::VirtualMethod::new ($type);
+
+  $self->set_a_deprecated($params->{'deprecated'});
+  $self->set_a_deprecated_version($params->{'deprecated-version'});
+  $self->set_a_introspectable($params->{'introspectable'});
+  $self->set_a_invoker($params->{'invoker'});
+  $self->set_a_name($params->{'name'});
+  $self->set_a_throws($params->{'throws'});
+  $self->set_a_version($params->{'version'});
+
+  return $self;
+}
+
+sub get_g_attribute_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_attribute', $name);
+}
+
+sub get_g_doc_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_doc', $name);
+}
+
+sub get_g_parameters_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_parameters', $name);
+}
+
+sub get_g_return_value_by_name ($$)
+{
+  my ($self, $name) = @_;
+
+  return $self->_get_group_member_by_name ('group_return_value', $name);
+}
+
+
+sub get_g_attribute_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_attribute', $index);
+}
+
+sub get_g_doc_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_doc', $index);
+}
+
+sub get_g_parameters_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_parameters', $index);
+}
+
+sub get_g_return_value_by_index ($$)
+{
+  my ($self, $index) = @_;
+
+  return $self->_get_group_member_by_index ('group_return_value', $index);
+}
+
+
+sub get_g_attribute_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_attribute');
+}
+
+sub get_g_doc_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_doc');
+}
+
+sub get_g_parameters_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_parameters');
+}
+
+sub get_g_return_value_count ($)
+{
+  my $self = shift;
+
+  return $self->_get_group_member_count ('group_return_value');
+}
+
+
+sub add_g_attribute ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_attribute', $member_name, $member);
+}
+
+sub add_g_doc ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_doc', $member_name, $member);
+}
+
+sub add_g_parameters ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_parameters', $member_name, $member);
+}
+
+sub add_g_return_value ($$$)
+{
+  my ($self, $member_name, $member) = @_;
+
+  $self->_add_member_to_group ('group_return_value', $member_name, $member);
+}
+
+
+sub get_a_deprecated ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated');
+}
+
+sub get_a_deprecated_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_deprecated_version');
+}
+
+sub get_a_introspectable ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_introspectable');
+}
+
+sub get_a_invoker ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_invoker');
+}
+
+sub get_a_name ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_name');
+}
+
+sub get_a_throws ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_throws');
+}
+
+sub get_a_version ($)
+{
+  my ($self) = @_;
+
+  return $self->_get_attribute ('attribute_version');
+}
+
+
+sub set_a_deprecated ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated', $value);
+}
+
+sub set_a_deprecated_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_deprecated_version', $value);
+}
+
+sub set_a_introspectable ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_introspectable', $value);
+}
+
+sub set_a_invoker ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_invoker', $value);
+}
+
+sub set_a_name ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_name', $value);
+}
+
+sub set_a_throws ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_throws', $value);
+}
+
+sub set_a_version ($$)
+{
+  my ($self, $value) = @_;
+
+  $self->_set_attribute ('attribute_version', $value);
+}
+
+
+1; # indicate proper module load.



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]