[at-spi2-core] Completely re-work the protocol definitions.



commit 5ff3694f5476aaaff3fe48fd0738c238189c25bb
Author: Mark Doffman <mark doffman codethink co uk>
Date:   Thu Feb 11 16:47:44 2010 -0800

    Completely re-work the protocol definitions.
    
    The XML has been re-done without the telepathy extensions.
    An 'idl' has been added. This is NOT currently the canonical
    protocol definition. It has more information than the XML
    spec but is written in a pseudo idl for which there is no
    parser. In the future the protocol should be defined to a similar
    standard. The requirements for moving to canonical IDL
    are that it is useful for generating Qt / GBus bindings.
    
    Add a script to create c literals of introspection
    data out of the introspection XML.

 Makefile.am                                        |    2 +-
 configure.ac                                       |    2 -
 idl/accessible.didl                                |  234 +++++++
 idl/action.didl                                    |   54 ++
 idl/application.didl                               |   20 +
 idl/cache.didl                                     |   26 +
 idl/collection.didl                                |   69 ++
 idl/component.didl                                 |  139 ++++
 idl/controller.didl                                |   95 +++
 idl/device.didl                                    |   33 +
 idl/document.didl                                  |   25 +
 idl/event.didl                                     |   79 +++
 idl/hypertext.didl                                 |   82 +++
 idl/image.didl                                     |   33 +
 idl/listener.didl                                  |    9 +
 idl/selection.didl                                 |   54 ++
 idl/socket.didl                                    |   31 +
 idl/table.didl                                     |  186 ++++++
 idl/text.didl                                      |  314 +++++++++
 idl/types.didl                                     |   25 +
 idl/value.didl                                     |   15 +
 tools/Makefile.am                                  |    4 -
 tools/c-constants-generator.xsl                    |  308 ---------
 tools/identity.xsl                                 |    7 -
 tools/spec-to-introspect.xsl                       |   53 --
 xml/Accessibility.xml                              |  116 +---
 xml/Accessible.xml                                 |   58 ++
 xml/Action.xml                                     |   33 +
 xml/Application.xml                                |   17 +
 xml/Cache.xml                                      |   21 +
 xml/Collection.xml                                 |   48 ++
 xml/Component.xml                                  |   54 ++
 xml/DeviceEventController.xml                      |   64 ++
 xml/DeviceEventListener.xml                        |   12 +
 xml/Document.xml                                   |   20 +
 xml/EditableText.xml                               |   40 ++
 xml/Event.xml                                      |  190 ++++++
 xml/Hyperlink.xml                                  |   27 +
 xml/Hypertext.xml                                  |   21 +
 xml/Image.xml                                      |   27 +
 xml/Makefile.am                                    |   44 --
 xml/Selection.xml                                  |   42 ++
 xml/Socket.xml                                     |   27 +
 xml/Table.xml                                      |  135 ++++
 xml/Text.xml                                       |  151 +++++
 xml/Value.xml                                      |   14 +
 xml/create-introspection.sh                        |    4 +
 xml/introspection/README                           |    2 -
 xml/org.freedesktop.atspi.Accessible.xml           |  238 -------
 xml/org.freedesktop.atspi.Action.xml               |   94 ---
 xml/org.freedesktop.atspi.Application.xml          |   48 --
 xml/org.freedesktop.atspi.Cache.xml                |   99 ---
 xml/org.freedesktop.atspi.Collection.xml           |   58 --
 xml/org.freedesktop.atspi.Component.xml            |  215 ------
 xml/org.freedesktop.atspi.Desktop.xml              |    5 -
 xml/org.freedesktop.atspi.DeviceEvent.xml          |  272 --------
 ...org.freedesktop.atspi.DeviceEventController.xml |  181 -----
 xml/org.freedesktop.atspi.DeviceEventListener.xml  |   22 -
 xml/org.freedesktop.atspi.Document.xml             |   52 --
 xml/org.freedesktop.atspi.EditableText.xml         |  141 ----
 xml/org.freedesktop.atspi.Event.xml                |   91 ---
 xml/org.freedesktop.atspi.Hyperlink.xml            |   97 ---
 xml/org.freedesktop.atspi.Hypertext.xml            |   62 --
 xml/org.freedesktop.atspi.Image.xml                |  109 ---
 xml/org.freedesktop.atspi.Registry.xml             |   85 ---
 xml/org.freedesktop.atspi.Relation.xml             |  131 ----
 xml/org.freedesktop.atspi.Role.xml                 |  542 ---------------
 xml/org.freedesktop.atspi.Selection.xml            |  154 -----
 xml/org.freedesktop.atspi.State.xml                |  354 ----------
 xml/org.freedesktop.atspi.Table.xml                |  486 --------------
 xml/org.freedesktop.atspi.Text.xml                 |  696 --------------------
 xml/org.freedesktop.atspi.Value.xml                |   37 -
 xml/remove-annotations.xsl                         |   14 +
 xml/versioned-introspection.py                     |   91 +++
 74 files changed, 2653 insertions(+), 4787 deletions(-)
---
diff --git a/Makefile.am b/Makefile.am
index 5565ece..9eb7da0 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,3 +1,3 @@
-SUBDIRS=xml tools registryd
+SUBDIRS=registryd
 
 ACLOCAL_AMFLAGS=-I m4
diff --git a/configure.ac b/configure.ac
index 68f4f09..387d2e8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -129,8 +129,6 @@ AC_SUBST(DBUS_SERVICES_DIR)
 AC_SUBST(LIBTOOL_EXPORT_OPTIONS)
 
 AC_CONFIG_FILES([Makefile
-		 xml/Makefile
-		 tools/Makefile
 		 registryd/Makefile])
 
 AC_OUTPUT
diff --git a/idl/accessible.didl b/idl/accessible.didl
new file mode 100644
index 0000000..eee462f
--- /dev/null
+++ b/idl/accessible.didl
@@ -0,0 +1,234 @@
+
+/*
+  The base interface which is implemented by all accessible objects.
+ */
+
+interface org.freestandards.atspi.Accessible {
+
+	enum <uint32> Role {
+		ROLE_INVALID = 0,
+		ROLE_ACCELERATOR_LABEL,
+		ROLE_ALERT,
+		ROLE_ANIMATION,
+		ROLE_ARROW,
+		ROLE_CALENDAR,
+		ROLE_CANVAS,
+		ROLE_CHECK_BOX,
+		ROLE_CHECK_MENU_ITEM,
+		ROLE_COLOR_CHOOSER,
+		ROLE_COLUMN_HEADER,
+		ROLE_COMBO_BOX,
+		ROLE_DATE_EDITOR,
+		ROLE_DESKTOP_ICON,
+		ROLE_DESKTOP_FRAME,
+		ROLE_DIAL,
+		ROLE_DIALOG,
+		ROLE_DIRECTORY_PANE,
+		ROLE_DRAWING_AREA,
+		ROLE_FILE_CHOOSER,
+		ROLE_FILLER,
+		ROLE_FOCUS_TRAVERSABLE,
+		ROLE_FONT_CHOOSER,
+		ROLE_FRAME,
+		ROLE_GLASS_PANE,
+		ROLE_HTML_CONTAINER,
+		ROLE_ICON,
+		ROLE_IMAGE,
+		ROLE_INTERNAL_FRAME,
+		ROLE_LABEL,
+		ROLE_LAYERED_PANE,
+		ROLE_LIST,
+		ROLE_LIST_ITEM,
+		ROLE_MENU,
+		ROLE_MENU_BAR,
+		ROLE_MENU_ITEM,
+		ROLE_OPTION_PANE,
+		ROLE_PAGE_TAB,
+		ROLE_PAGE_TAB_LIST,
+		ROLE_PANEL,
+		ROLE_PASSWORD_TEXT,
+		ROLE_POPUP_MENU,
+		ROLE_PROGRESS_BAR,
+		ROLE_PUSH_BUTTON,
+		ROLE_RADIO_BUTTON,
+		ROLE_RADIO_MENU_ITEM,
+		ROLE_ROOT_PANE,
+		ROLE_ROW_HEADER,
+		ROLE_SCROLL_BAR,
+		ROLE_SCROLL_PANE,
+		ROLE_SEPARATOR,
+		ROLE_SLIDER,
+		ROLE_SPIN_BUTTON,
+		ROLE_SPLIT_PANE,
+		ROLE_STATUS_BAR,
+		ROLE_TABLE,
+		ROLE_TABLE_CELL,
+		ROLE_TABLE_COLUMN_HEADER,
+		ROLE_TABLE_ROW_HEADER,
+		ROLE_TEAROFF_MENU_ITEM,
+		ROLE_TERMINAL,
+		ROLE_TEXT,
+		ROLE_TOGGLE_BUTTON,
+		ROLE_TOOL_BAR,
+		ROLE_TOOL_TIP,
+		ROLE_TREE,
+		ROLE_TREE_TABLE,
+		ROLE_UNKNOWN
+	}
+
+        /*
+          RelationType specifies a relationship between objects outside of the normal
+          parent/child hierarchical relationship. It allows better semantic
+          identification of how objects are associated with one another.
+         */
+        enum <uint32> RelationType {
+		RELATION_NULL = 0,
+		RELATION_LABEL_FOR,
+		RELATION_LABELLED_BY,
+		RELATION_CONTROLLER_FOR,
+		RELATION_CONTROLLED_BY,
+		RELATION_MEMBER_OF,
+		RELATION_TOOLTIP_FOR,
+		RELATION_NODE_CHILD_OF,
+		RELATION_NODE_PARENT_OF,
+		RELATION_EXTENDED,
+		RELATION_FLOWS_TO,
+		RELATION_FLOWS_FROM,
+		RELATION_SUBWINDOW_OF,
+		RELATION_EMBEDS,
+		RELATION_EMBEDDED_BY,
+		RELATION_POPUP_FOR,
+		RELATION_PARENT_WINDOW_OF,
+		RELATION_DESCRIPTION_FOR,
+		RELATION_DESCRIBED_BY,
+		RELATION_LAST_DEFINED
+	}
+
+	/*
+	  Describes a one-to-many relationship between accessible objects.
+         */
+	struct Relation {
+		RelationType type;
+		Reference    objects [];	
+	}
+
+	enum uint32 StateType {
+		STATE_INVALID = 0,
+		STATE_ACTIVE,
+		STATE_ARMED,
+		STATE_BUSY,
+		STATE_CHECKED,
+		STATE_COLLAPSED,
+		STATE_DEFUNCT,
+		STATE_EDITABLE,
+		STATE_ENABLED,
+		STATE_EXPANDABLE,
+		STATE_EXPANDED,
+		STATE_FOCUSABLE,
+		STATE_FOCUSED,
+		STATE_HAS_TOOLTIP,
+		STATE_HORIZONTAL,
+		STATE_ICONIFIED,
+		STATE_MODAL,
+		STATE_MULTI_LINE,
+		STATE_MULTISELECTABLE,
+		STATE_OPAQUE,
+		STATE_PRESSED,
+		STATE_RESIZABLE,
+		STATE_SELECTABLE,
+		STATE_SELECTED,
+		STATE_SENSITIVE,
+		STATE_SHOWING,
+		STATE_SINGLE_LINE,
+		STATE_STALE,
+		STATE_TRANSIENT,
+		STATE_VERTICAL,
+		STATE_VISIBLE,
+		STATE_MANAGES_DESCENDANTS,
+		STATE_INDETERMINATE,
+		STATE_REQUIRED,
+		STATE_TRUNCATED,
+		STATE_ANIMATED,
+		STATE_INVALID_ENTRY,
+		STATE_SUPPORTS_AUTOCOMPLETION,
+		STATE_SELECTABLE_TEXT,
+		STATE_IS_DEFAULT,
+		STATE_VISITED,
+		STATE_LAST_DEFINED
+	} 
+
+        /* 
+	  A two integer array representing a bit-field of currently held states.
+	 */
+	typedef State uint32 [];
+
+	/* A short string representing the object's name. */
+	read property string Name;
+
+	/* A string describing the object in more detail. */
+	read property string Description;
+
+	/* The accessible object which is this objects containing parent */
+	read property Reference Parent;
+
+	/* The number of children contained by this object */
+	read property int32 ChildCount;
+
+        /* Get the accessible child of this object at the given index */
+	method GetChildAtIndex {
+		int32 index;
+	} reply {
+		Reference child;
+	}
+
+	/* Get the index of this accessible object within its containing objects child list. */ 
+	method GetIndexInParent reply {
+		int32 index;
+	}
+
+	/* Access this objects non-hierarchical relationships to other accessible objects */
+	method GetRelationSet reply {
+		RelationSet relations;
+	}
+
+	/* Get the Role indicating the type of UI role played by this object. */
+	method GetRole reply {
+		Role role;
+	}
+
+	/* Get a string indicating the type of UI role played by this object */	
+	method GetRoleName reply {
+		string role;
+	}
+
+	/* 
+          Get a string indicating the type of UI role played by this object,
+          transalted to the current locale.
+         */
+	method GetLocalizedRoleName {
+		string role;
+	}
+
+	/* Access the states currently held by this object. */
+	method GetState reply {
+		State state;
+	}
+
+	/*
+	  Get a properties applied to this object as a whole, as an
+          set name-value pairs. As such these attributes may be considered
+          weakly-typed properties or annotations, as distinct
+          from the strongly-typed interface instance data.
+	*/
+	method GetAttributes reply {
+		Attributes attributes;
+	}
+
+	/*
+	  Get the containing Application for this object.
+	 */
+	method GetApplication reply {
+		Reference application;
+	}
+}
+
diff --git a/idl/action.didl b/idl/action.didl
new file mode 100644
index 0000000..afc22e8
--- /dev/null
+++ b/idl/action.didl
@@ -0,0 +1,54 @@
+
+/*
+  An interface through which a user-actionable UI component can be manipulated.
+  
+  Typical actions include "click", "press", "release" or "open".
+*/
+interface org.freestandards.atspi.Action {
+	/*
+	  Represents a single action.
+	*/
+	struct Action {
+		/* String containing short description of action. */
+		string name;
+		/* The description of an action may provide information about the result. */
+		string description;
+		/* A string containing the key-binding or "" if none exists */
+		string key_binding;
+	}
+
+	property read int32 NActions;
+
+	/* Get the description for the specified action. */
+	method GetDescription {
+		int32 index;
+	} reply {
+		string description
+	}
+
+	/* Get the name of the specified action */
+	method GetName {
+		int32 index;
+	} reply {
+		string name;
+	}
+
+	/* Get the key-binding for the specified action. */
+	method GetKeyBinding {
+		int32 index;
+	} reply {
+		string key_binding;
+	}
+
+	/* Retrieves the actions associated with the object. */
+	method GetActions reply {
+		Action actions [];
+	}
+
+	/* Causes the object to perform the specified action. */
+	method GetActions {
+		int32 index;
+	} reply {
+		boolean success;
+	}	
+}
diff --git a/idl/application.didl b/idl/application.didl
new file mode 100644
index 0000000..19383f6
--- /dev/null
+++ b/idl/application.didl
@@ -0,0 +1,20 @@
+
+/*
+  An interface identifying an object which is the root of the
+  hierarchy associated with a running application.
+*/
+interface org.freestandards.atspi.Application {
+
+	/* A string indicating the type of user interface toolkit used by the application. */
+	read property string ToolkitName;
+
+	/* A string indicating the version of the applications accessibility bridge. */
+	read property string Version;
+
+	/* Gets the locale in which the application is currently running. */
+	method GetLocale {
+		LocaleType locale_type;
+	} reply {
+		string locale;
+	}
+}
diff --git a/idl/cache.didl b/idl/cache.didl
new file mode 100644
index 0000000..8cb9693
--- /dev/null
+++ b/idl/cache.didl
@@ -0,0 +1,26 @@
+
+interface org.freestandards.atspi.Cache {
+	
+	struct CacheItem {
+		object      path;
+		Reference   parent;
+		Reference[] children;
+		string[]    interfaces;
+		string      name;
+		Role        role;
+		string      description;
+		StateSet    states;
+	}
+
+	method GetItems reply {
+		CacheItem[] items;
+	}
+
+	signal AddAccessible {
+		CacheItem item;
+	}
+
+	signal RemoveAccessible {
+		Reference item;
+	}
+}	
diff --git a/idl/collection.didl b/idl/collection.didl
new file mode 100644
index 0000000..f3eee6e
--- /dev/null
+++ b/idl/collection.didl
@@ -0,0 +1,69 @@
+
+/* TODO - Need to define the 'MatchRule' struct. */
+
+namespace org.freestandards.atspi {
+	interface Collection {
+		enum <uint32> SortOrder {
+			SORT_ORDER_INVALID = 0,
+			SORT_ORDER_CANONICAL,
+			SORT_ORDER_FLOW,
+			SORT_ORDER_TAB,
+			SORT_ORDER_REVERSE_CANONICAL,
+			SORT_ORDER_REVERSE_FLOW,
+			SORT_ORDER_REVERSE_TAB,
+			SORT_ORDER_LAST_DEFINED
+		}
+
+		enum <uint32> MatchType {
+			MATCH_INVALID = 0,
+			MATCH_ALL,
+			MATCH_ANY,
+			MATCH_NONE,
+			MATCH_EMPTY,
+			MATCH_LAST_DEFINED
+		}
+
+		enum <uint32> TreeTraversalType {
+			TREE_RESTRICT_CHILDREN,
+			TREE_RESTRICT_SIBLING,
+			TREE_INORDER,
+			TREE_LAST_DEFINED
+		}
+
+		method GetMatches {
+			MatchRule rule;
+			SortOrder sort_by;
+			int32     count;
+			boolean   traverse;
+		} reply {
+			Reference matches [];
+		}
+
+		method GetMatchesTo {
+			object    current_object;
+			MatchRule rule;
+			SortOrder sort_by;
+			TreeTraversalType type;
+			boolean   recurse;
+			int32     count;
+			boolean   traverse;
+		} reply {
+			Reference matches [];
+		}
+
+		method GetMatchesFrom {
+			object    current_object;
+			MatchRule rule;
+			SortOrder sort_by;
+			TreeTraversalType type;
+			int32     count;
+			boolean   traverse;
+		} reply {
+			Reference matches [];	
+		}
+
+		method GetActiveDescendent reply {
+			Reference descendent;
+		}
+	}
+}
diff --git a/idl/component.didl b/idl/component.didl
new file mode 100644
index 0000000..aa40e78
--- /dev/null
+++ b/idl/component.didl
@@ -0,0 +1,139 @@
+
+using org.freestandards.atspi.Accessible.Reference = Reference;
+
+/*
+  The Component interface is implemented by objects which occupy on-screen space, e.g. objects
+  which have onscreen visual representations. The methods in Component allow clients to identify
+  where the objects lie in the onscreen coordinate system, their relative size, stacking order, and
+  position.  It also provides a mechanism whereby keyboard focus may be transferred to specific
+  user interface elements programmatically.  This is a 2D API, coordinates of 3D objects are projected into the
+  2-dimensional screen view for purposes of this interface.
+*/
+interface org.freestandards.atspi.Component {
+
+	/* 
+           Used by Component, Image and Text interfaces to specify whether coordinates are
+           relative to the window or screen.
+        */
+	enum <uint32> CoordType {
+		COORD_TYPE_SCREEN = 0,
+		COORD_TYPE_WINDOW = 1
+	}
+
+	/*
+	  Used by Component and Text interfaces, a struct defining a bounding rectange.
+	  The coordinate system is determined by the context of the API call.
+	*/
+	struct BoundingBox {
+		int32 x;
+		int32 y;
+		int32 width;
+		int32 height;
+	}
+
+	/*
+	  Indicates the relative stacking order with respect to the onscreen visual representation.
+
+	  The order of layers, from bottom to top is:
+		LAYER_BACKGROUND
+		LAYER_WINDOW
+		LAYER_MDI
+		LAYER_CANVAS
+		LAYER_WIDGET
+		LAYER_POPUP
+		LAYER_OVERLAY
+	*/
+	enum <uint32> ComponentLayer {
+		LAYER_INVALID,
+		LAYER_BACKGROUND,
+		LAYER_CANVAS,
+		LAYER_WIDGET,
+		LAYER_MDI,
+		LAYER_POPUP,
+		LAYER_OVERLAY,
+		LAYER_WINDOW,
+		LAYER_LAST_DEFINED
+	}
+	
+	/*
+	  True if the specified point lies within the components bounding box.
+         */ 
+	method Contains {
+		int32 x;
+		int32 y;
+		CoordType coord_type;
+	} reply {
+		boolean within;
+	}
+
+	/*
+	  Return the accessible child whose bounding box contains the specified point.
+         */
+	method GetAccessibleAtPoint {
+		int32 x;
+		int32 y;
+		CoordType coord_type;
+	} reply {
+		Reference child;
+	}
+
+	/*
+	  Obtain the components bounding box, in pixels, relative to the specified coordinate system.
+	*/
+	method GetExtents {
+		CoordType cood_type;
+	} reply {
+		BoundingBox box;
+	}
+
+	/*
+	  Obtain the position of the current component in the specified coordinate system.
+	*/
+	method GetPosition {
+		CoordType coord_type;
+	} reply {
+		int32 x;
+		int32 y;
+	}
+
+	/*
+	  Obtain the size in the specified coordinate system.
+          Fully contains teh object's visual representation without accounting for viewport clipping.
+        */
+	method GetSize reply {
+		int32 width;
+		int32 height;
+	}
+
+	/*
+	  The component layer in which this object resides.
+        */
+	method GetLayer reply {
+		ComponentLayer layer;
+	}
+
+	/*
+          Obtain the relative stacking order (i.e 'Z' order) of an object.
+	  Larger values indicate that an object is on 'top' of the stack.
+	  Only relevenat for objects in LAYER_MDI or LAYER_WINDOW.
+	*/
+	method GetMDIZOrder reply {
+		int16 order;
+	}
+
+	/*
+	  Request that an object obtain keyboard focus.
+        */
+	method GrabFocus reply {
+		boolean success;
+	}
+
+	/*
+	  Obtain the alpha value of the component.
+	  Alpha values are used with Z-Order to determine whether an obeject obscures
+	  anothers visual representation.
+	*/
+	method GetAlpha reply {
+		double alpha;
+	}
+}
diff --git a/idl/controller.didl b/idl/controller.didl
new file mode 100644
index 0000000..53b5f71
--- /dev/null
+++ b/idl/controller.didl
@@ -0,0 +1,95 @@
+
+interface org.freestandards.atspi.DeviceEventController {
+
+	enum <uint32> KeySynthType {
+		KEY_PRESS=0,
+		KEY_RELEASE,
+		KEY_PRESSRELEASE,
+		KEY_SYM,
+		KEY_STRING
+	}
+
+        /*
+	  Consumption of events and syncronous event delivery is a sore-thumb.
+
+	  The client should really have no say over what the DeviceEventController
+          does with regards to event delivery as such the 'syncronous' flag is redundant.
+
+	  The 'global' flag is now useless as XEVIE is no longer maintained. As such
+	  the DeviceEventController will not recieve any device events from applications
+	  not participating.
+
+	  The only possibly useful flag is 'preemptive'. However all keyboard events are
+	  sent as pre-emptive from gail so its debateable whether even this flag is really
+	  in-use.
+	 */
+	struct EventListenerMode {
+		/* Controller should block while delivering this event. */
+		boolean syncronous;
+		/* Clients are allowed to consume this event. */
+		boolean preemptive;
+		/* 
+		 Event notifications should be sent regardless of whether 
+                 focused application participates in AT-SPI accessibility.
+                 */
+		boolean global;
+	}
+
+	struct KeyDefinition {
+		int32  keycode;
+		int32  keysym;
+		string keystring;
+		int32  unused;
+	}
+
+	method RegisterKeystrokeListener {
+		object            listener;
+		KeyDefinition[]   keys;
+		uint32            mask;
+		EventType[]       type;		
+		EventListenerMode mode;
+	} reply {
+		boolean           success;
+	}
+
+	method DeregisterKeystrokeListener {
+		object            listener;
+		KeyDefinition[]   keys;	
+		uint32            mask;
+		EventType[]       type;		
+	}
+
+	method RegisterDeviceEventListener {
+		object      listener;
+		EventType[] type;
+	} reply {
+		boolean     success;
+	}
+
+	method DeregisterDeviceEventListener {
+		object      listener;
+		EventType[] type;
+	}
+
+	method NotifyListenersSync {
+		DeviceEvent event;
+	} reply {
+		boolean     consumed;
+	}
+
+	method NotifyListenersAsync {
+		DeviceEvent event;
+	}
+
+	method GenerateKeyboardEvent {
+		int32        keycode;
+		string       keystring;
+		KeySynthType type;
+	}
+
+	method GenerateMouseEvent {
+		int32  x;
+		int32  y;
+		string event_name;
+	}
+}
diff --git a/idl/device.didl b/idl/device.didl
new file mode 100644
index 0000000..78bdd12
--- /dev/null
+++ b/idl/device.didl
@@ -0,0 +1,33 @@
+
+namespace org.freestandards.atspi {
+
+	enum <uint32> EventType {
+		KEY_PRESSED_EVENT=0,
+		KEY_RELEASED_EVENT,
+		BUTTON_PRESSED_EVENT,
+		BUTTON_RELEASED_EVENT
+	}
+
+	enum <uint32> ModifierType {
+		MODIFIER_SHIFT=0,
+		MODIFIER_SHIFTLOCK,
+		MODIFIER_CONTROL,
+		MODIFIER_ALT,
+		MODIFIER_META,
+		MODIFIER_META2,
+		MODIFIER_META3,
+		MODIFIER_NUMLOCK
+	}
+
+	struct DeviceEvent {
+		EventType    type;
+		/* An identifier for the event, corresponds to XEvent serial number. */
+		int32        stream_id;
+		/* A numeric code identifying the hardware or button on which the event occured. */
+		int16        hw_code;	
+		ModifierType modifiers;
+		int32        timestamp;
+		string       event_string;
+		boolean      is_text;
+	}
+}
diff --git a/idl/document.didl b/idl/document.didl
new file mode 100644
index 0000000..ce2a4f0
--- /dev/null
+++ b/idl/document.didl
@@ -0,0 +1,25 @@
+
+/*
+  Indicates the start of a document.
+
+  Children are part of the document content.
+*/
+interface org.freestandards.atspi.Document {
+
+	/* Gets the locale associated with the documents content. */
+	method GetLocale reply {
+		string locale;
+	}
+
+	/* Gets the value of a single attribute. */
+	method GetAttributeValue {
+		string key;
+	} reply {
+		string value;
+	}
+
+	/* Gets all attributes for the document as a whole. These are constant for all elements within the document.*/
+	method GetAttributes reply {
+		Attributes attributes;
+	}
+}
diff --git a/idl/event.didl b/idl/event.didl
new file mode 100644
index 0000000..d4c75cc
--- /dev/null
+++ b/idl/event.didl
@@ -0,0 +1,79 @@
+
+namespace org.freestandards.atspi.Event {
+
+	struct Event {
+		string    minor;
+		int32     detail1;
+		int32     detail2;
+		variant   val;
+		Reference application;
+	}
+
+	interface Object {
+		signal PropertyChange {Event event;}
+		signal BoundsChanged {Event event;}
+		signal LinkSelected {Event event;}
+		signal StateChanged {Event event;}
+		signal ChildrenChanged {Event event;}
+		signal VisibleDataChanged {Event event;}
+		signal SelectionChanged {Event event;}
+		signal ModelChanged {Event event;}
+		signal ActiveDescendantChanged {Event event;}
+		signal RowInserted {Event event;}
+		signal RowDeleted {Event event;}
+		signal RowReordered {Event event;}
+		signal ColumnInserted {Event event;}
+		signal ColumnDeleted {Event event;}
+		signal ColumnReordered {Event event;}
+		signal TextBoundsChanged {Event event;}
+		signal TextSelectionChanged {Event event;}
+		signal TextChanged {Event event;}
+		signal TextAttributesChanged {Event event;}
+		signal TextCaretMoved {Event event;}
+		signal AttributesChanged {Event event;}
+	}
+
+	interface Window {
+		signal PropertyChange {Event event;}
+		signal Minimize {Event event;}
+		signal Maximize {Event event;}
+		signal Restore {Event event;}
+		signal Close {Event event;}
+		signal Create {Event event;}
+		signal Reparent {Event event;}
+		signal DesktopCreate {Event event;}
+		signal DesktopDestroy {Event event;}
+		signal Destroy {Event event;}
+		signal Activate {Event event;}
+		signal Deactivate {Event event;}
+		signal Raise {Event event;}
+		signal Lower {Event event;}
+		signal Move {Event event;}
+		signal Resize {Event event;}
+		signal Shade {Event event;}
+		signal Ushade {Event event;}
+		signal Restyle {Event event;}
+	}
+
+	interface Mouse {
+		signal Abs {Event event;}
+		signal Rel {Event event;}
+		signal Button {Event event;}
+	}
+
+	interface Keyboard {
+		signal Modifiers {Event event;}
+	}
+
+	interface Document {
+		signal LoadComplete {Event event;}
+		signal Reload {Event event;}
+		signal LoadStopped {Event event;}
+		signal ContentChanged {Event event;}
+		signal AttributesChanged {Event event;}
+	}
+
+	interface Focus {
+		signal Focus {Event event;}
+	}
+}
diff --git a/idl/hypertext.didl b/idl/hypertext.didl
new file mode 100644
index 0000000..334dafd
--- /dev/null
+++ b/idl/hypertext.didl
@@ -0,0 +1,82 @@
+
+namespace org.freestandards.atspi {
+	/*
+	  Instances of Hyperlink are returned by Hypertext object and
+	  are the means by which end users and clients interact with linked
+	  content.
+
+	  Hyperlink instances DO NOT neccessarily implement the Accessible interface.
+	 */
+	interface HyperLink {
+		/* The number of separate anchors associated with this Hyperlink. */
+		read property int32 NAnchors;
+
+		/* 
+		  The starting offset within the contianing Hypertext,
+		  with which this Hyperlink is associated.	
+		 */
+		read property int32 StartIndex;
+
+		/*
+		  The ending offset within the containing Hypertext with which
+		  this Hyperlink is associated.
+		 */
+		read property int32 EndIndex;
+
+		/*
+		  Gets the i'th object associated with a Hyperlink.
+		  Objects returned should implement the Action interface.
+		 */ 
+		method GetObject {
+			int32 index;
+		} reply {
+			Reference anchor;
+		}
+
+		/*
+		  Obtain a resource locator, URI, which can be used to access the content
+		  which this link points to.
+		 */
+		method GetUri {
+			int32 index;
+		} reply {
+			string uri;
+		}
+
+		/*
+		  Check the hyperlink to see if a connection to its backing content can be
+		  established or if its URI is valid.
+		 */
+		method IsValid reply {
+			boolean valid;
+		}
+	}
+
+	/*
+	  An interface used for objects which implement linking between multiple resource locations.
+	  A hypertext instance is associated with one or more hyperlinks which are associated with
+	  particular offests within the text.
+	 */
+	interface Hypertext {
+
+		method GetNLinks reply {
+			int32 n_links;
+		}
+
+		method GetLink {
+			int32 index;
+		} reply {
+			Reference hyperlink;
+		}
+
+		/*
+		  Get the hyperlink index, if any, associated with a particular text offset.
+		 */
+		method GetLinkIndex {
+			int32 offset;
+		} reply {
+			/* -1 if no hyperlink is associated. */
+			int32 index;
+		}	
+	}
+}
diff --git a/idl/image.didl b/idl/image.didl
new file mode 100644
index 0000000..9dee626
--- /dev/null
+++ b/idl/image.didl
@@ -0,0 +1,33 @@
+
+/*
+  An interface implemented by objects which render image data or
+  pictoral information on to the screen.
+*/
+interface org.freestandards.atspi.Image {
+	/* A textual description of what is visually depicted on the screen. */
+	read property string ImageDescription;
+
+	/* A string corresponding to the local used by the image description. */
+	read property string ImageLocale;
+
+	/* Obtain a bounding box which entirely contains the image contents. */
+	method GetImageExtents {
+		CoordType coord_type;
+	} reply {
+		BoundingBox;
+	}
+
+	/* Get the coordinates of the image on the screen */
+	method GetImagePosition {
+		CoordType coord_type;
+	} reply {
+		int32 x;
+		int32 y;
+	}
+
+	/* Get the size of the current on-screen view of the image. */
+	method GetImageSize reply {
+		int32 width;
+		int32 height;
+	}
+}
diff --git a/idl/listener.didl b/idl/listener.didl
new file mode 100644
index 0000000..7e3f6a1
--- /dev/null
+++ b/idl/listener.didl
@@ -0,0 +1,9 @@
+
+interface org.freestandards.atspi.DeviceEventListener {
+
+	method NotifyEvent {
+		DeviceEvent event;
+	} reply {
+		boolean success;
+	}
+}
diff --git a/idl/selection.didl b/idl/selection.didl
new file mode 100644
index 0000000..66fbef7
--- /dev/null
+++ b/idl/selection.didl
@@ -0,0 +1,54 @@
+
+/*
+  An interface which indicates that an object exposes a 'selection' model,
+  allowing the 'selection' of one or more of its children.
+*/
+interface org.freestandards.atspi.Selection {
+	/* The number of children that are currently selected. */
+	read property int32 NSelectedChildren;
+
+	/* Gets the ith SELECTED child. This is different to the index of all children. */
+	method GetSelectedChild {
+		int32 index;
+	} reply {
+		Reference child;
+	}
+
+	/* Select the child, add it to the list of selected children. */ 
+	method SelectChild {
+		int32 index;
+	} reply {
+		boolean success;
+	}
+
+	/* Deselect a child. The index refers to the index into the list of selected children. */
+	method DeselectSelectedChild {
+		int32 index;
+	} reply {
+		boolean success;
+	}
+
+	/* Determine whether a particular child is currently selected. */
+	method IsChildSelected {
+		int32 index;
+	} reply {
+		boolean selected;
+	}
+
+	/* Apptemt to select all of the containers children. */
+	method SelectAll reply {
+		boolean success;
+	}
+
+	/* Attempt to deselect all selected children. */
+	method ClearSelection reply {
+		boolean success;
+	}
+
+	/* Deselect a child. The index refers to the index into the list of all children. */
+	method DeselectChild {
+		int32 index;
+	} reply {
+		boolean success;
+	}
+}
diff --git a/idl/socket.didl b/idl/socket.didl
new file mode 100644
index 0000000..336ca6c
--- /dev/null
+++ b/idl/socket.didl
@@ -0,0 +1,31 @@
+
+namespace org.freestandards.atspi {
+        /*
+	  Accessible objects with the socket interface are capable of embeding other
+          accessible heirarchies as one of their children. This allows
+          applications to embed themselves in the heirarchy of the desktop object.
+         */
+	interface Socket {
+		method Embed {
+			Reference plug;
+		} reply {
+			Reference socket;
+		}
+
+		method Unembed {
+			Reference plug;
+		}
+
+		/*
+		  The available signal indicates that a socket has been
+		  made available, it is for discovering new sockets.
+                  This is used for when the process containing the desktop
+                  object is re-started.
+
+		  D-Bus bus name must have been granted by the D-Bus bus.
+                  It is used to identify the new socket.
+                 */
+		signal Available {
+			Reference socket;
+		}
+}
diff --git a/idl/table.didl b/idl/table.didl
new file mode 100644
index 0000000..ae1b8f0
--- /dev/null
+++ b/idl/table.didl
@@ -0,0 +1,186 @@
+
+namespace org.freestandards.atspi {
+
+	/*
+	  An interface used by containers whose data is arranged in a tabular form.
+	  Objects within tables are always children of the table object.
+	 */
+	interface Table {
+		read property int32 NRows;
+
+		read property int32 NColumns;
+		
+		read property Reference caption;
+
+		read property Reference summary;
+
+		/* Number of rows where all cells are selected. */
+		read property int32 NSelectedRows;
+
+		/* Number of columns where all cells are selected. */
+		read property int32 NSelectedColumns;
+
+		method GetAccessibleAt {
+			int32 row;
+			int32 column;
+		} reply {
+			Reference cell;
+		}
+
+		/*
+		  Cells in a table are also children of the table in the standard heirarchy.
+		  This method gets the child index of the given cell.
+		 */
+		method GetIndexAt {
+			int32 row;
+			int32 column;
+		} reply {
+			int32 index;
+		}
+
+		/*
+		  Indicates which row the child specified by index is on.
+		 */
+		method GetRowAtIndex {
+			int32 index;
+		} reply {
+			int32 row;
+		}	
+
+		/*
+		  Indicates which column the child specified by index is on.
+		 */
+		method GetColumnAtIndex {
+			int32 index;
+		} reply {
+			int32 column;
+		}
+
+		/*
+		  Get a textual description of a row.
+		 */ 
+		method GetRowDescription {
+			int32 row;
+		} reply {
+			string description;
+		}
+
+		/*
+		  Get a textual description of a particular column.
+		 */
+		method GetColumnDescription {
+			int32 column;
+		} reply {
+			string description;
+		}
+
+		/*
+		  Get the number of rows spanned by the table cell at the specific row and column.
+		method GetRowExtentAt {
+			int32 row;
+			int32 column;
+		} reply {
+			int32 rowspan;
+		}
+
+		/*
+		  Get the number of columns spanned by the table cell at the specific row and column.
+		 */
+		method GetColumnExtentAt {
+			int32 row;
+			int32 column;
+		} reply {
+			int32 column_span;
+		}
+
+		/*
+		  Get the header object associated with a particular table row.
+		 */
+		method GetRowHeader {	
+			int32 row;
+		} reply {
+			Reference header;
+		}
+
+		/*
+		  Get the header object associated with a particular table column.
+		 */
+		method GetColumnHeader {
+			int32 column;
+		} reply {
+			Reference header;
+		}
+
+		/*
+		  Obtain the indicies of all rows which are currently selected.
+		 */
+		method GetSelectedRows reply {
+			int32 indicies [];
+		}
+
+		/*
+		  Obtain the indicies of all columns which are currently selected.
+		 */
+		method GetSelectedColumns reply {
+			int32 indicies [];
+		}
+
+		method IsRowSelected {
+			int32 row;
+		} reply {
+			boolean selected;
+		}
+
+		method IsColumnSelected {
+			int32 column;
+		} reply {
+			boolean selected;
+		}
+
+		method IsSelected {
+			int32 row;
+			int32 column;
+		} reply {
+			boolean selected;
+		}
+
+		method AddRowSelection {
+			int32 row;
+		} reply {
+			boolean success;
+		}
+
+		method AddColumnSelection {
+			int32 column;
+		} reply {
+			boolean success;
+		}
+
+		method RemoveRowSelection {
+			int32 row;
+		} reply {
+			boolean success;
+		}
+
+		method RemoveColumnSelection {
+			int32 column;
+		} reply {
+			boolean success;
+		}
+
+		/*
+		  Given a child index determine the row and column indicies and extents
+		  and whether the cell is currently selected.
+		 */
+		method GetRowColumnExtentsAtIndex {
+			int32 index;
+		} reply {
+			boolean valid;
+			int32 row;
+			int32 column;
+			int32 row_span;
+			int32 column_span;
+			boolean selected;
+		}
+	}
+}
diff --git a/idl/text.didl b/idl/text.didl
new file mode 100644
index 0000000..0796dcb
--- /dev/null
+++ b/idl/text.didl
@@ -0,0 +1,314 @@
+
+namespace org.freestandards.atspi {
+	/* 
+	   The text interface should be implemented by objects which place textual information onscreen
+	   as character strings or glyphs. The text interface allows access to textual content including
+	   display attributes and semantic hints associated with runs of text, and to bounding boc information
+	   for glyphs and substrings. It also alows portions of text to be selected, if the objects StateSet
+	   includes STATE_SELECTABLE_TEXT.
+         */
+	interface Text {
+		/*
+		  Specified the boundary conditions determining a run of text
+		  as returned from:
+		  	GetTextAtOffset
+			GetTextAfterOffset
+			GetTextBeforeOffset
+		 */ 
+		enum <uint32> TextBoundaryType {
+			TEXT_BOUNDARY_CHAR,
+			TEXT_BOUNDARY_WORD_START,
+			TEXT_BOUNDARY_WORD_END,
+			TEXT_BOUNDARY_SENTENCE_START,
+			TEXT_BOUNDARY_SENTENCE_END,
+			TEXT_BOUNDARY_LINE_START,
+			TEXT_BOUNDARY_LINE_END
+		}			
+
+		enum <uint32> TextClipType {
+			TEXT_CLIP_NONE,
+			TEXT_CLIP_MIN,
+			TEXT_CLIP_MAX,
+			TEXT_CLIP_BOTH
+		}
+
+		/*
+		  A structure used to define a contiguous range of text, including
+		  its (unattributed) textual content.
+		 */
+		struct Range {
+			int32   start_offset;
+			int32   end_offset;
+			int32   content;
+			variant data;				
+		}
+		
+		/* The total number of character in the text object including whitespace. */
+		read property int32 CharacterCount;
+
+		/* The current offset of the text caret in the Text object. */
+		read property int32 CaretOffset;
+
+		/* Move the text caret to a given position. */
+		method SetCaretOffset {
+			int32 offset;		
+		} reply {
+			boolean success;
+		}	
+		
+		/* 
+		  Obtain the subset of text content that entirely precedes the given offset,
+		  delimited by character word, line or sentente boundaries.
+		 */
+		method GetTextBeforeOffset {
+			int32 offset;
+			TextBoundaryType type;
+		} reply {
+			string s;
+			int32  start_offset;
+			int32  end_offset;
+		}
+
+		/* 
+		  Obtain the subset of text content that includes the given offset,
+		  delimited by character word, line or sentente boundaries.
+		 */
+		method GetTextAtOffset {
+			int32 offset;
+			TextBoundaryType type;
+		} reply {
+			string s;
+			int32  start_offset;
+			int32  end_offset;
+		}
+
+		/* 
+		  Obtain the subset of text content that entirely follows the given offset,
+		  delimited by character word, line or sentente boundaries.
+		 */
+		method GetTextAfterOffset {
+			int32 offset;
+			TextBoundaryType type;
+		} reply {
+			string s;
+			int32  start_offset;
+			int32  end_offset;
+		}
+
+		method GetCharacterAtOffset {
+			int32 offset;
+		} reply {
+			/* UCS-4 representation of the character or 0 if offset out-of-range. */
+			int32 c;
+		}
+
+		/*
+		  Get the value of a named attribute at a given offset.
+		 */
+		method GetAttributeValue {
+			int32   offset;
+			string  attribute_key;
+		} reply {
+			string  attribute_value;
+			int32   start_offset;
+			int32   end_offset;
+			boolean defined;
+		}	
+
+		/* Deprecated in favor of GetAttributeRun. */
+		method GetAttributes {
+			int32 offset;
+		} reply {
+			Attributes attributes;
+			int32 start_offset;
+			int32 end_offset;
+		}
+
+		/* Deprecated in facor of GetDefaultAttributeSet. */
+		method GetDefaultAttributes reply {
+			Attributes attributes;
+		}
+
+		/*
+		  Obtain a bounding box of the character glyph at a particular character offset,
+		  in the given coordinate system.
+		 */
+		method GetCharacterExtents {
+			int32     offset;
+			CoordType coord;
+		} reply {
+			int32 x;
+			int32 y;
+			int32 width;
+			int32 height;
+		}
+
+		/*
+		  Get the offset of the character at a given on-screen coordinate. The coordinate
+		  system used is determined by the give coordinate type.
+		 */
+		method GetOffsetAtPoint {
+			int32 x;
+			int32 y;
+			CoordType coord;
+		} reply {
+			/* -1 if the point is outside the bounds of any glyph. */
+			int32 offset;
+		}	
+
+		/*
+		  Obtain the number of separate, contiguous selections in the current Text object. 
+		 */
+		method GetNSelections reply {
+			int32 n_selections;
+		}
+
+		method GetSelection {
+			int32 selection_index;
+		} reply {
+			int32 start_offset;
+			int32 end_offset;
+		}
+
+		method AddSelection {
+			int32 start_offset;
+			int32 end_offset;
+		} reply {
+			boolean success;
+		}
+
+		method RemoveSelection {
+			int32 selection_index;
+		} reply {
+			boolean success;
+		}
+
+		method SetSelection {
+			int32 selection_index;
+			int32 start_offset;
+			int32 end_offset;
+		} reply {
+			boolean success;
+		}	
+
+		/*
+		  Obtain the bounding box which entirely contains the given text range.
+		  Negative values may be obtained in the event that part of the text range is
+		  off-screen.
+		 */
+		method GetRangeExtents {
+			int32 start_offset;
+			int32 end_offset;
+			CoordType coord;
+		} reply {
+			int32 x;
+			int32 y;
+			int32 width;
+			int32 height;
+		}
+
+		/*
+		  Return the text content within a bounding box.
+
+		  Depending on the clip type glyphs which are clipped by the bounding box
+		  may, or may not be inclide in the ranges returned.
+		 */
+		method GetBoundedRanges {
+			int32 x;
+			int32 y;
+			int32 width;
+			int32 height;
+			CoordType coord;
+			ClipType  x_clip;
+			ClipType  y_clip;
+		} reply {
+			RangeType ranges [];
+		}
+
+		/*
+		  Gets the attributes of a particular text objects defined at a given offset.
+		  The attributes are invariant over the offsets returned.
+		 */
+		method GetAttributeRun {
+			int32   offset;
+			boolean include_defaults;
+		} reply {
+			Attributes attributes;
+			int32 start_offset;
+			int32 end_offset;
+		}
+		
+		/*
+		  Gets the default attributes that apply to the entire text.
+		 */
+		method GetAttributeSet reply {
+			Attributes attributes'
+		}
+	}
+
+	/*
+	  All objects supporting EditableText should also support the
+	  Text interface.
+	
+	  Provides methods for modifying textual content of components which support editing.
+	  EditableText also interacts with the system clipboard.
+	 */
+	interface EditableText {
+		/*
+		  Replace the text contents with a new string, discarding the old contents.
+		 */
+		method SetTextContents {
+			string new_contents;
+		} reply {
+			boolean success;
+		}
+
+		/*
+		  Insert new text contents into a given location.
+		 */
+		method InsertText {
+			int32  position;
+			string text;
+			int32  length;
+		} reply {
+			boolean success;
+		}
+
+		/*
+		  Copy a range of text in to the system clipboard.
+		 */
+		method CopyText {
+			int32 start_pos;
+			int32 end_pos;
+		}
+
+		/*
+		  Excise a range of text, copying it to the system clipboard.
+		 */
+		method CutText {
+			int32 start_pos;
+			int32 end_pos;
+		} reply {
+			boolean success;
+		} 
+
+		/* 
+		  Excise a range of text from the object without copying to the system clipboard.
+		 */
+		method DeleteText {
+			int32 start_pos;
+			int32 end_pos;
+		} reply {
+			boolean success;
+		}
+
+		/*
+		  Copy the contents of the system clip-board in to the text object.
+		 */
+		method PasteText {
+			int32 position;
+		} reply {
+			boolean success;
+		}	
+	}
+}
diff --git a/idl/types.didl b/idl/types.didl
new file mode 100644
index 0000000..b8c4129
--- /dev/null
+++ b/idl/types.didl
@@ -0,0 +1,25 @@
+/*
+  Type definitions needed by multiple interfaces.
+*/
+
+namespace org.freestandards.atspi {
+
+	/*
+	  A connection independent reference to a D-Bus object. 
+
+	  The D-Bus object that is referenced will support at-least
+	  the org.freestandards.atspi.Accessible interface.
+	 */
+	struct Reference {
+		/* The D-Bus connection name where the object resides. */
+		string name;
+		/* The D-Bus path of the object. */
+		object path;
+	}
+
+	/*
+	  Attributes are weakly typed properties of an object  consisting of string-string
+          key-value pairs.
+         */
+	typedef Attributes dict <string, string>;
+}
diff --git a/idl/value.didl b/idl/value.didl
new file mode 100644
index 0000000..476cb43
--- /dev/null
+++ b/idl/value.didl
@@ -0,0 +1,15 @@
+
+/* 
+  An interface supporting a one-dimensional scalar quantity
+  to be modified, or which reflects a scalar value.
+ */
+interface org.freestandards.atspi.Value {
+	
+	read property double MinimumValue;
+	
+	read property double MaximumValue;
+
+	read property double MinimumIncrement;
+
+	read property double currentValue;
+}
diff --git a/xml/Accessibility.xml b/xml/Accessibility.xml
index 6c4c470..0475db9 100644
--- a/xml/Accessibility.xml
+++ b/xml/Accessibility.xml
@@ -1,98 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<tp:spec xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"; xmlns:xi="http://www.w3.org/2001/XInclude";>
-
-
-<tp:version>1.24.0</tp:version>
-
-
-
-
-
-<tp:docstring>
- !\mainpage AT-SPI Interfaces and Subinterfaces
-
-  This is the main documentation page for the 
-  Assistive Technology Service Provider Interface (AT-SPI). 
-  
-  \section apps Applications and Interface Components
-  Namespace Accessibility includes service APIs implemented by
-  participating applications and their user interface components:\n\n
-  Accessibility::Accessible\n 
-  Accessibility::Application\n
-  Accessibility::Desktop\n
-  Accessibility::Collecgtion\n
-  Accessibility::Component\n
-  Accessibility::Hypertext\n
-  Accessibility::Image\n
-  Accessibility::Selection\n
-  Accessibility::Table\n
-  Accessibility::Text\n
-  Accessibility::EditableText\n
-  Accessibility::Value
- 
-  \section types Enumerated Types
-  Accessibility defines a number of key enumerated types, including:\n\n
-  Accessibility::RelationType\n
-  Accessibility::Role\n
-  Accessibility::StateType\n
-  Accessibility::Event\n
-  Accessibility::EventDetails \n
- 
-  \section Registry
-  Accessibility also includes Accessibility::Registry,
-  which is the service used by assistive technologies and related
-  AT-SPI clients to register interest in certain classes of events,
-  enumerate the currently available desktop and application list,
-  and to synthesize certain kinds of device events.
- 
-  \section listeners Event Listener Interfaces
-  Accessibility::EventListener\n
-  Accessibility::DeviceEventListener
- 
-  \section helpers Helper Interfaces
- 
-  The following interfaces may be implemented by assistive technologies 
-  themselves, in order to export their services in a consistent manner or
-  in order to interoperate with other applications or desktop services.\n
- 
-  Accessibility::LoginHelper : Implemented by adaptive technologies which 
-  need to participate in user-authentication or login activities, and which
-  therefore may need negotiation with authentication agents or processes.\n
- 
-  Accessibility::Selector [NEW]: Implemented by user agents or assistive 
-  technologies which export lists of choices from which the end-user is 
-  expected to make selections.  Useful for various types of remote
-  activation or intercommunication between multiple ATs.
-</tp:docstring>
-
-<!-- Accessibility interfaces and subinterfaces -->
-
-<xi:include href="org.freedesktop.atspi.Accessible.xml"/>
-<xi:include href="org.freedesktop.atspi.Action.xml"/>
-<xi:include href="org.freedesktop.atspi.Collection.xml"/>
-<xi:include href="org.freedesktop.atspi.Component.xml"/>
-<xi:include href="org.freedesktop.atspi.Document.xml"/>
-<xi:include href="org.freedesktop.atspi.Hyperlink.xml"/>
-<xi:include href="org.freedesktop.atspi.Image.xml"/>
-<xi:include href="org.freedesktop.atspi.Selection.xml"/>
-<xi:include href="org.freedesktop.atspi.Table.xml"/>
-<xi:include href="org.freedesktop.atspi.Text.xml"/>
-<xi:include href="org.freedesktop.atspi.Cache.xml"/>
-<xi:include href="org.freedesktop.atspi.Value.xml"/>
-
-<!-- Interfaces derived from Accessibility::Text -->
-<xi:include href="org.freedesktop.atspi.EditableText.xml"/>
-<xi:include href="org.freedesktop.atspi.Hypertext.xml"/>
-<xi:include href="org.freedesktop.atspi.State.xml"/>
-
-<!-- Utility interfaces and interfaces derived from Accessibility::Accessible -->
-
-<xi:include href="org.freedesktop.atspi.Application.xml"/>
-<xi:include href="org.freedesktop.atspi.Registry.xml"/>
-<xi:include href="org.freedesktop.atspi.DeviceEvent.xml"/>
-<xi:include href="org.freedesktop.atspi.Desktop.xml"/>
-<xi:include href="org.freedesktop.atspi.DeviceEventController.xml"/>
-<xi:include href="org.freedesktop.atspi.DeviceEventListener.xml"/>
-<xi:include href="org.freedesktop.atspi.Relation.xml"/>
-<xi:include href="org.freedesktop.atspi.Role.xml"/>
-</tp:spec>
+<spec xmlns:xi="http://www.w3.org/2001/XInclude";>
+  <xi:include href="Accessible.xml" parse="xml"/>
+  <xi:include href="Action.xml" parse="xml"/>
+  <xi:include href="Application.xml" parse="xml"/>
+  <xi:include href="Collection.xml" parse="xml"/>
+  <xi:include href="Component.xml" parse="xml"/>
+  <xi:include href="Document.xml" parse="xml"/>
+  <xi:include href="Hypertext.xml" parse="xml"/>
+  <xi:include href="Hyperlink.xml" parse="xml"/>
+  <xi:include href="Image.xml" parse="xml"/>
+  <xi:include href="Selection.xml" parse="xml"/>
+  <xi:include href="Table.xml" parse="xml"/>
+  <xi:include href="Text.xml" parse="xml"/>
+  <xi:include href="EditableText.xml" parse="xml"/>
+  <xi:include href="Cache.xml" parse="xml"/>
+  <xi:include href="Value.xml" parse="xml"/>
+  <xi:include href="DeviceEventController.xml" parse="xml"/>
+  <xi:include href="DeviceEventListener.xml" parse="xml"/>
+</spec>
diff --git a/xml/Accessible.xml b/xml/Accessible.xml
new file mode 100644
index 0000000..ace5926
--- /dev/null
+++ b/xml/Accessible.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<node name="/node">
+<interface name="org.freedesktop.atspi.Accessible">
+
+  <property name="name" type="s" access="read"/>
+
+  <property name="description" type="s" access="read"/>
+
+  <property name="parent" type="(so)" access="read">
+    <annotation name="com.trolltech.QtDBus.QtTypeName" value="QSpiObjectReference"/>
+  </property>
+
+  <property name="childCount" type="i" access="read"/>
+
+  <method name="GetChildAtIndex">
+    <arg direction="in" name="index" type="i"/>
+    <arg direction="out" type="(so)"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QSpiObjectReference"/>
+  </method>
+
+  <method name="GetIndexInParent">
+    <arg direction="out" type="i"/>
+  </method>
+
+  <method name="GetRelationSet">
+    <arg direction="out" type="a(ua(so))"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QSpiRelationArray"/>
+  </method>
+
+  <method name="GetRole">
+    <arg direction="out" type="u"/>
+  </method>
+
+  <method name="GetRoleName">
+    <arg direction="out" type="s"/>
+  </method>
+
+  <method name="GetLocalizedRoleName">
+    <arg direction="out" type="s"/>
+  </method>
+
+  <method name="GetState">
+    <arg direction="out" type="au"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QSpiIntList"/>
+  </method>
+
+  <method name="GetAttributes">
+    <arg direction="out" type="a{ss}"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QSpiAttributeArray"/>
+  </method>
+
+  <method name="GetApplication">
+    <arg direction="out" type="(so)"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QSpiObjectReference"/>
+  </method>
+
+</interface>
+</node>
diff --git a/xml/Action.xml b/xml/Action.xml
new file mode 100644
index 0000000..8702dca
--- /dev/null
+++ b/xml/Action.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<node name="/node">
+<interface name="org.freedesktop.atspi.Action">
+
+  <property name="nActions" type="i" access="read"/>
+
+  <method name="GetDescription">
+    <arg type="i" name="index" direction="in"/>
+    <arg type="s" direction="out"/>
+  </method>
+
+  <method name="GetName">
+    <arg type="i" name="index" direction="in"/>
+    <arg type="s" direction="out"/>
+  </method>
+
+  <method name="GetKeyBinding">
+    <arg type="i" name="index" direction="in"/>
+    <arg type="s" direction="out"/>
+  </method>
+
+  <method name="GetActions">
+    <arg direction="out" name="index" type="a(sss)"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QSpiActionArray"/>
+  </method>
+
+  <method name="DoAction">
+    <arg direction="in" name="index" type="i"/>
+    <arg direction="out" type="b"/>
+  </method>
+
+</interface>
+</node>
diff --git a/xml/Application.xml b/xml/Application.xml
new file mode 100644
index 0000000..82d2818
--- /dev/null
+++ b/xml/Application.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<node name="/node">
+<interface name="org.freedesktop.atspi.Application">
+
+  <property name="toolkitName" type="s" access="read"/>
+
+  <property name="version" type="s" access="read"/>
+
+  <property name="id" type="i" access="read"/>
+
+  <method name="GetLocale">
+    <arg direction="in" name="lctype" type="u"/>
+    <arg direction="out" type="s"/>
+  </method>
+
+</interface>
+</node>
diff --git a/xml/Cache.xml b/xml/Cache.xml
new file mode 100644
index 0000000..fd6ead1
--- /dev/null
+++ b/xml/Cache.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<node name="/node">
+<interface name="org.freedesktop.atspi.Cache">
+
+  <method name="GetItems">
+    <arg name="nodes" type="a((so)(so)a(so)assusau)" direction="out"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QSpiAccessibleCacheArray"/>
+  </method>
+
+  <signal name="AddAccessible">
+    <arg name="nodeAdded" type="((so)(so)a(so)assusau)"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiAccessibleCacheArray"/>
+  </signal>
+
+  <signal name="RemoveAccessible">
+    <arg name="nodeRemoved" type="(so)"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiObjectReference"/>
+  </signal>
+
+</interface>
+</node>
diff --git a/xml/Collection.xml b/xml/Collection.xml
new file mode 100644
index 0000000..748b851
--- /dev/null
+++ b/xml/Collection.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<node name="/node">
+<interface name="org.freedesktop.atspi.Collection">
+
+  <method name="GetMatches">
+    <arg direction="in" name="rule" type="(auuasuauusub)"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="QSpiMatchRule"/>
+    <arg direction="in" name="sortby" type="u"/>
+    <arg direction="in" name="count" type="i"/>
+    <arg direction="in" name="traverse" type="b"/>
+    <arg direction="out" type="a(so)"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QSpiReferenceSet"/>
+  </method>
+
+  <method name="GetMatchesTo">
+    <arg direction="in" name="current_object" type="o"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiObjectReference"/>
+    <arg direction="in" name="rule" type="(auuasuauusub)"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="QSpiMatchRule"/>
+    <arg direction="in" name="sortby" type="u"/>
+    <arg direction="in" name="tree" type="u"/>
+    <arg direction="in" name="recurse" type="b"/>
+    <arg direction="in" name="count" type="i"/>
+    <arg direction="in" name="traverse" type="b"/>
+    <arg direction="out" type="a(so)"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QSpiReferenceSet"/>
+  </method>
+
+  <method name="GetMatchesFrom">
+    <arg direction="in" name="current_object" type="o"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiObjectReference"/>
+    <arg direction="in" name="rule" type="(auuasuauusub)"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="QSpiMatchRule"/>
+    <arg direction="in" name="sortby" type="u"/>
+    <arg direction="in" name="tree" type="u"/>
+    <arg direction="in" name="count" type="i"/>
+    <arg direction="in" name="traverse" type="b"/>
+    <arg direction="out" type="a(so)"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QSpiReferenceSet"/>
+  </method>
+
+  <method name="GetActiveDescendant">
+    <arg direction="out" type="(so)"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QSpiReferenceSet"/>
+  </method>
+
+</interface>
+</node>
diff --git a/xml/Component.xml b/xml/Component.xml
new file mode 100644
index 0000000..c7d3f94
--- /dev/null
+++ b/xml/Component.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<node name="/node">
+<interface name="org.freedesktop.atspi.Component">
+
+  <method name="Contains">
+    <arg direction="in" name="x" type="i"/>
+    <arg direction="in" name="y" type="i"/>
+    <arg direction="in" name="coord_type" type="u"/>
+    <arg direction="out" type="b"/>
+  </method>
+
+  <method name="GetAccessibleAtPoint">
+    <arg direction="in" name="x" type="i"/>
+    <arg direction="in" name="y" type="i"/>
+    <arg direction="in" name="coord_type" type="u"/>
+    <arg direction="out" type="(so)"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QSpiObjectReference"/>
+  </method>
+
+  <method name="GetExtents">
+    <arg direction="in" name="coord_type" type="u"/>
+    <arg direction="out" type="(iiii)"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QSpiRect"/>
+  </method>
+
+  <method name="GetPosition">
+    <arg direction="in" name="coord_type" type="u"/>
+    <arg direction="out" name="x" type="i"/>
+    <arg direction="out" name="y" type="i"/>
+  </method>
+
+  <method name="GetSize">
+    <arg direction="out" name="width" type="i"/>
+    <arg direction="out" name="height" type="i"/>
+  </method>
+
+  <method name="GetLayer">
+    <arg direction="out" type="u"/>
+  </method>
+
+  <method name="GetMDIZOrder">
+    <arg direction="out" type="n"/>
+  </method>
+
+  <method name="GrabFocus">
+    <arg direction="out" type="b"/>
+  </method>
+
+  <method name="GetAlpha">
+    <arg direction="out" type="d"/>
+  </method>
+
+</interface>
+</node>
diff --git a/xml/DeviceEventController.xml b/xml/DeviceEventController.xml
new file mode 100644
index 0000000..1c76789
--- /dev/null
+++ b/xml/DeviceEventController.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<node name="/node">
+<interface name="org.freedesktop.atspi.DeviceEventController">
+
+  <method name="RegisterKeystrokeListener">
+    <arg direction="in" name="listener" type="o"/>
+    <arg direction="in" name="keys" type="a(iisi)">
+      <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="QSpiKeyTypeArray"/>
+    </arg>
+    <arg direction="in" name="mask" type="u"/>
+    <arg direction="in" name="type" type="au">
+      <annotation name="com.trolltech.QtDBus.QtTypeName.In3" value="QSpiEventTypeArray"/>
+    </arg>
+    <arg direction="in" name="mode" type="(bbb)">
+      <annotation name="com.trolltech.QtDBus.QtTypeName.In4" value="QSpiEventMode"/>
+    </arg>
+    <arg direction="out" type="b"/>
+  </method>
+
+  <method name="DeregisterKeystrokeListener">
+    <arg direction="in" name="listener" type="o"/>
+    <arg direction="in" name="keys" type="a(iisi)">
+      <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="QSpiKeyTypeArray"/>
+    </arg>
+    <arg direction="in" name="mask" type="u"/>
+    <arg direction="in" name="type" type="u"/>
+  </method>
+
+  <method name="RegisterDeviceEventListener">
+    <arg direction="in" name="listener" type="o"/>
+    <arg direction="in" name="types" type="u"/>
+    <arg direction="out" type="b"/>
+  </method>
+
+  <method name="DeregisterDeviceEventListener">
+    <arg direction="in" name="listener" type="o"/>
+    <arg direction="in" name="types" type="u"/>
+  </method>
+
+  <method name="GenerateKeyboardEvent">
+    <arg direction="in" name="keycode" type="i"/>
+    <arg direction="in" name="keystring" type="s"/>
+    <arg direction="in" name="type" type="u"/>
+  </method>
+
+  <method name="GenerateMouseEvent">
+    <arg direction="in" name="x" type="i"/>
+    <arg direction="in" name="y" type="i"/>
+    <arg direction="in" name="eventName" type="s"/>
+  </method>
+
+  <method name="NotifyListenersSync">
+    <arg direction="in" name="event" type="(uinnisb)"/>
+    <arg direction="out" type="b"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiDeviceEvent"/>
+  </method>
+
+  <method name="NotifyListenersAsync">
+    <arg direction="in" name="event" type="(uinnisb)"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiDeviceEvent"/>
+  </method>
+
+</interface>
+</node>
diff --git a/xml/DeviceEventListener.xml b/xml/DeviceEventListener.xml
new file mode 100644
index 0000000..69193e3
--- /dev/null
+++ b/xml/DeviceEventListener.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<node name="/node">
+<interface name="org.freedesktop.atspi.DeviceEventListener">
+
+  <method name="NotifyEvent">
+    <arg direction="in" name="event" type="(uinnisb)"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiDeviceEvent"/>
+    <arg direction="out" type="b"/>
+  </method>
+
+</interface>
+</node>
diff --git a/xml/Document.xml b/xml/Document.xml
new file mode 100644
index 0000000..047b3fc
--- /dev/null
+++ b/xml/Document.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<node name="/node">
+<interface name="org.freedesktop.atspi.Document">
+
+  <method name="GetLocale">
+    <arg direction="out" type="s"/>
+  </method>
+
+  <method name="GetAttributeValue">
+    <arg direction="in" name="attributename" type="s"/>
+    <arg direction="out" type="s"/>
+  </method>
+
+  <method name="GetAttributes">
+    <arg direction="out" type="{ss}"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QSpiAttrubutes"/>
+  </method>
+
+</interface>
+</node>
diff --git a/xml/EditableText.xml b/xml/EditableText.xml
new file mode 100644
index 0000000..62befd4
--- /dev/null
+++ b/xml/EditableText.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<node name="/node">
+<interface name="org.freedesktop.atspi.EditableText">
+
+  <method name="SetTextContents">
+    <arg direction="in" name="newContents" type="s"/>
+    <arg direction="out" type="b"/>
+  </method>
+
+  <method name="InsertText">
+    <arg direction="in" name="position" type="i"/>
+    <arg direction="in" name="text" type="s"/>
+    <arg direction="in" name="length" type="i"/>
+    <arg direction="out" type="b"/>
+  </method>
+
+  <method name="CopyText">
+    <arg direction="in" name="startPos" type="i"/>
+    <arg direction="in" name="endPos" type="i"/>
+  </method>
+
+  <method name="CutText">
+    <arg direction="in" name="startPos" type="i"/>
+    <arg direction="in" name="endPos" type="i"/>
+    <arg direction="out" type="b"/>
+  </method>
+
+  <method name="DeleteText">
+    <arg direction="in" name="startPos" type="i"/>
+    <arg direction="in" name="endPos" type="i"/>
+    <arg direction="out" type="b"/>
+  </method>
+
+  <method name="PasteText">
+    <arg direction="in" name="position" type="i"/>
+    <arg direction="out" type="b"/>
+  </method>
+
+</interface>
+</node>
diff --git a/xml/Event.xml b/xml/Event.xml
new file mode 100644
index 0000000..1731147
--- /dev/null
+++ b/xml/Event.xml
@@ -0,0 +1,190 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<node name="/node">
+
+<interface name="org.freedesktop.atspi.Event.Object">
+	<signal name="PropertyChange"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="BoundsChanged"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="LinkSelected"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="StateChanged"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="ChildrenChanged"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="VisibleDataChanged"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="SelectionChanged"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="ModelChanged"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="ActiveDescendantChanged"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="RowInserted"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="RowReordered"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="RowDeleted"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="ColumnInserted"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="ColumnReordered"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="ColumnDeleted"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="TextBoundsChanged"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="TextSelectionChanged"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="TextChanged"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="TextAttributesChanged"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="TextCaretMoved"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="AttributesChanged"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+</interface>
+
+<interface name="org.freedesktop.atspi.Event.Window">
+	<signal name="PropertyChange"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="Minimize"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="Maximize"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="Restore"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="Close"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="Create"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="Reparent"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="DesktopCreate"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="DesktopDestroy"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="Destroy"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="Activate"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="Deactivate"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="Raise"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="Lower"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="Move"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="Resize"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="Shade"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="uUshade"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="Restyle"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+</interface>
+
+<interface name="org.freedesktop.atspi.Event.Mouse">
+	<signal name="Abs"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="Rel"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="Button"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+</interface>
+
+<interface name="org.freedesktop.atspi.Event.Keyboard">
+	<signal name="Modifiers"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+</interface>
+
+<interface name="org.freedesktop.atspi.Event.Terminal">
+	<signal name="LineChanged"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="ColumncountChanged"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="LinecountChanged"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="ApplicationChanged"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="CharwidthChanged"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+</interface>
+
+<interface name="org.freedesktop.atspi.Event.Document">
+	<signal name="LoadComplete"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="Reload"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="LoadStopped"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="ContentChanged"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+	<signal name="AttributesChanged"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+</interface>
+
+<interface name="org.freedesktop.atspi.Event.Focus">
+	<signal name="Focus"><arg direction="in" type="(suuv)"/>
+          <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiEvent"/>
+        </signal>
+</interface>
+
+</node>
diff --git a/xml/Hyperlink.xml b/xml/Hyperlink.xml
new file mode 100644
index 0000000..bf3b01c
--- /dev/null
+++ b/xml/Hyperlink.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<node name="/node">
+<interface name="org.freedesktop.atspi.Hyperlink">
+
+  <property name="nAnchors" type="n" access="read"/>
+
+  <property name="startIndex" type="i" access="read"/>
+
+  <property name="endIndex" type="i" access="read"/>
+
+  <method name="GetObject">
+    <arg direction="in" name="i" type="i"/>
+    <arg direction="out" type="(so)"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QSpiObjectReference"/>
+  </method>
+
+  <method name="GetURI">
+    <arg direction="in" name="i" type="i"/>
+    <arg direction="out" type="s"/>
+  </method>
+
+  <method name="IsValid">
+    <arg direction="out" type="b"/>
+  </method>
+
+</interface>
+</node>
diff --git a/xml/Hypertext.xml b/xml/Hypertext.xml
new file mode 100644
index 0000000..1a5d7c8
--- /dev/null
+++ b/xml/Hypertext.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<node name="/node">
+<interface name="org.freedesktop.atspi.Hypertext">
+
+  <method name="GetNLinks">
+    <arg direction="out" type="i"/>
+  </method>
+
+  <method name="GetLink">
+    <arg direction="in" name="linkIndex" type="i"/>
+    <arg direction="out" type="(so)"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QSpiObjectReference"/>
+  </method>
+
+  <method name="GetLinkIndex">
+    <arg direction="in" name="characterIndex" type="i"/>
+    <arg direction="out" type="i"/>
+  </method>
+
+</interface>
+</node>
diff --git a/xml/Image.xml b/xml/Image.xml
new file mode 100644
index 0000000..a2aa01d
--- /dev/null
+++ b/xml/Image.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<node name="/node">
+<interface name="org.freedesktop.atspi.Image">
+
+  <property name="imageDescription" type="s" access="read"/>
+
+  <property name="imageLocale" type="s" access="read"/>
+
+  <method name="GetImageExtents">
+    <arg direction="in" name="coordType" type="u"/>
+    <arg direction="out" type="(iiii)"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QSpiRect"/>
+  </method>
+
+  <method name="GetImagePosition">
+    <arg direction="out" name="x" type="i"/>
+    <arg direction="out" name="y" type="i"/>
+    <arg direction="in" name="coordType" type="u"/>
+  </method>
+
+  <method name="GetImageSize">
+    <arg direction="out" name="width" type="i"/>
+    <arg direction="out" name="height" type="i"/>
+  </method>
+
+</interface>
+</node>
diff --git a/xml/Selection.xml b/xml/Selection.xml
new file mode 100644
index 0000000..69727e4
--- /dev/null
+++ b/xml/Selection.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<node name="/node">
+<interface name="org.freedesktop.atspi.Selection">
+
+  <property name="nSelectedChildren" type="i" access="read"/>
+
+  <method name="GetSelectedChild">
+    <arg direction="in" name="selectedChildIndex" type="i"/>
+    <arg direction="out" type="(so)"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QSpiObjectReference"/>
+  </method>
+
+  <method name="SelectChild">
+    <arg direction="in" name="childIndex" type="i"/>
+    <arg direction="out" type="b"/>
+  </method>
+
+  <method name="DeselectSelectedChild">
+    <arg direction="in" name="selectedChildIndex" type="i"/>
+    <arg direction="out" type="b"/>
+  </method>
+
+  <method name="IsChildSelected">
+    <arg direction="in" name="childIndex" type="i"/>
+    <arg direction="out" type="b"/>
+  </method>
+
+  <method name="SelectAll">
+    <arg direction="out" type="b"/>
+  </method>
+
+  <method name="ClearSelection">
+    <arg direction="out" type="b"/>
+  </method>
+
+  <method name="deSelectChild">
+    <arg direction="in" name="childIndex" type="i"/>
+    <arg direction="out" type="b"/>
+  </method>
+
+</interface>
+</node>
diff --git a/xml/Socket.xml b/xml/Socket.xml
new file mode 100644
index 0000000..9b3ad8b
--- /dev/null
+++ b/xml/Socket.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<node name="/node">
+<interface name="org.freedesktop.atspi.Image">
+
+  <method name="Embed">
+    <arg direction="in" name="plug" type="(so)">
+      <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiObjectReference"/>
+    </arg>
+    <arg direction="out" name="socket" type="(so)">
+      <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QSpiObjectReference"/>
+    </arg>
+  </method>
+
+  <method name="Unembed">
+    <arg direction="in" name="plug" type="(so)">
+      <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiObjectReference"/>
+    </arg>
+  </method>
+
+  <signal name="Available">
+    <arg direction="in" name="socket" type="(so)">
+      <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="QSpiObjectReference"/>
+    </arg>
+  </method>
+
+</interface>
+</node>
diff --git a/xml/Table.xml b/xml/Table.xml
new file mode 100644
index 0000000..07d8fb6
--- /dev/null
+++ b/xml/Table.xml
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<node name="/node">
+<interface name="org.freedesktop.atspi.Table">
+
+  <property name="nRows" type="i" access="read"/>
+
+  <property name="nColumns" type="i" access="read"/>
+
+  <property name="caption" type="(so)" access="read">
+    <annotation name="com.trolltech.QtDBus.QtTypeName" value="QSpiObjectReference"/>
+  </property>
+
+  <property name="summary" type="(so)" access="read">
+    <annotation name="com.trolltech.QtDBus.QtTypeName" value="QSpiObjectReference"/>
+  </property>
+
+  <property name="nSelectedRows" type="i" access="read"/>
+
+  <property name="nSelectedColumns" type="i" access="read"/>
+
+  <method name="GetAccessibleAt">
+    <arg direction="in" name="row" type="i"/>
+    <arg direction="in" name="column" type="i"/>
+    <arg direction="out" type="(so)"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QSpiObjectReference"/>
+  </method>
+
+  <method name="GetIndexAt">
+    <arg direction="in" name="row" type="i"/>
+    <arg direction="in" name="column" type="i"/>
+    <arg direction="out" type="i"/>
+  </method>
+
+  <method name="GetRowAtIndex">
+    <arg direction="in" name="index" type="i"/>
+    <arg direction="out" type="i"/>
+  </method>
+
+  <method name="GetColumnAtIndex">
+    <arg direction="in" name="index" type="i"/>
+    <arg direction="out" type="i"/>
+  </method>
+
+  <method name="GetRowDescription">
+    <arg direction="in" name="row" type="i"/>
+    <arg direction="out" type="s"/>
+  </method>
+
+  <method name="GetColumnDescription">
+    <arg direction="in" name="column" type="i"/>
+    <arg direction="out" type="s"/>
+  </method>
+
+  <method name="GetRowExtentAt">
+    <arg direction="in" name="row" type="i"/>
+    <arg direction="in" name="column" type="i"/>
+    <arg direction="out" type="i"/>
+  </method>
+
+  <method name="GetColumnExtentAt">
+    <arg direction="in" name="row" type="i"/>
+    <arg direction="in" name="column" type="i"/>
+    <arg direction="out" type="i"/>
+  </method>
+
+  <method name="GetRowHeader">
+    <arg direction="in" name="row" type="i"/>
+    <arg direction="out" type="(so)"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QSpiObjectReference"/>
+  </method>
+
+  <method name="GetColumnHeader">
+    <arg direction="in" name="column" type="i"/>
+    <arg direction="out" type="(so)"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QSpiObjectReference"/>
+  </method>
+
+  <method name="GetSelectedRows">
+    <arg direction="out" type="ai"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QSpiIntList"/>
+  </method>
+
+  <method name="GetSelectedColumns">
+    <arg direction="out" type="ai"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QSpiIntList"/>
+  </method>
+
+  <method name="IsRowSelected">
+    <arg direction="in" name="row" type="i"/>
+    <arg direction="out" type="b"/>
+  </method>
+
+  <method name="IsColumnSelected">
+    <arg direction="in" name="column" type="i"/>
+    <arg direction="out" type="b"/>
+  </method>
+
+  <method name="IsSelected">
+    <arg direction="in" name="row" type="i"/>
+    <arg direction="in" name="column" type="i"/>
+    <arg direction="out" type="b"/>
+  </method>
+
+  <method name="AddRowSelection">
+    <arg direction="in" name="row" type="i"/>
+    <arg direction="out" type="b"/>
+  </method>
+
+  <method name="AddColumnSelection">
+    <arg direction="in" name="column" type="i"/>
+    <arg direction="out" type="b"/>
+  </method>
+
+  <method name="RemoveRowSelection">
+    <arg direction="in" name="row" type="i"/>
+    <arg direction="out" type="b"/>
+  </method>
+
+  <method name="RemoveColumnSelection">
+    <arg direction="in" name="column" type="i"/>
+    <arg direction="out" type="b"/>
+  </method>
+
+  <method name="GetRowColumnExtentsAtIndex">
+    <arg direction="in" name="index" type="i"/>
+    <arg direction="out" type="b"/>
+    <arg direction="out" name="row" type="i"/>
+    <arg direction="out" name="col" type="i"/>
+    <arg direction="out" name="row_extents" type="i"/>
+    <arg direction="out" name="col_extents" type="i"/>
+    <arg direction="out" name="is_selected" type="b"/>
+  </method>
+
+</interface>
+</node>
diff --git a/xml/Text.xml b/xml/Text.xml
new file mode 100644
index 0000000..349bfbb
--- /dev/null
+++ b/xml/Text.xml
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<node name="/node">
+<interface name="org.freedesktop.atspi.Text">
+
+  <property name="characterCount" type="i" access="read"/>
+
+  <property name="caretOffset" type="i" access="read"/>
+
+  <method name="GetText">
+    <arg direction="in" name="startOffset" type="i"/>
+    <arg direction="in" name="endOffset" type="i"/>
+    <arg direction="out" type="s"/>
+  </method>
+
+  <method name="SetCaretOffset">
+    <arg direction="in" name="offset" type="i"/>
+    <arg direction="out" type="b"/>
+  </method>
+
+  <method name="GetTextBeforeOffset">
+    <arg direction="in" name="offset" type="i"/>
+    <arg direction="in" name="type" type="u"/>
+    <arg direction="out" type="s"/>
+    <arg direction="out" name="startOffset" type="i"/>
+    <arg direction="out" name="endOffset" type="i"/>
+  </method>
+
+  <method name="GetTextAtOffset">
+    <arg direction="in" name="offset" type="i"/>
+    <arg direction="in" name="type" type="u"/>
+    <arg direction="out" type="s"/>
+    <arg direction="out" name="startOffset" type="i"/>
+    <arg direction="out" name="endOffset" type="i"/>
+  </method>
+
+  <method name="GetTextAfterOffset">
+    <arg direction="in" name="offset" type="i"/>
+    <arg direction="in" name="type" type="u"/>
+    <arg direction="out" type="s"/>
+    <arg direction="out" name="startOffset" type="i"/>
+    <arg direction="out" name="endOffset" type="i"/>
+  </method>
+
+  <method name="GetCharacterAtOffset">
+    <arg name="offset" type="i" direction="in"/>
+    <arg type="i" direction="out"/>
+  </method>
+
+  <method name="GetAttributeValue">
+    <arg direction="in" name="offset" type="i"/>
+    <arg direction="in" name="attributeName" type="s"/>
+    <arg direction="out" type="s"/>
+    <arg direction="out" name="startOffset" type="i"/>
+    <arg direction="out" name="endOffset" type="i"/>
+    <arg direction="out" name="defined" type="b"/>
+  </method>
+
+  <method name="GetAttributes">
+    <arg direction="in" name="offset" type="i"/>
+    <arg direction="out" type="a{ss}"/>
+    <arg direction="out" name="startOffset" type="i"/>
+    <arg direction="out" name="endOffset" type="i"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QSpiAttributeArray"/>
+  </method>
+
+  <method name="GetDefaultAttributes">
+    <arg direction="out" type="a{ss}"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QSpiAttributeArray"/>
+  </method>
+
+  <method name="GetCharacterExtents">
+    <arg direction="in" name="offset" type="i"/>
+    <arg direction="out" name="x" type="i"/>
+    <arg direction="out" name="y" type="i"/>
+    <arg direction="out" name="width" type="i"/>
+    <arg direction="out" name="height" type="i"/>
+    <arg direction="in" name="coordType" type="u"/>
+  </method>
+
+  <method name="GetOffsetAtPoint">
+    <arg direction="in" name="x" type="i"/>
+    <arg direction="in" name="y" type="i"/>
+    <arg direction="in" name="coordType" type="u"/>
+    <arg direction="out" type="i"/>
+  </method>
+
+  <method name="GetNSelections">
+    <arg direction="out" type="i"/>
+  </method>
+
+  <method name="GetSelection">
+    <arg direction="in" name="selectionNum" type="i"/>
+    <arg direction="out" name="startOffset" type="i"/>
+    <arg direction="out" name="endOffset" type="i"/>
+  </method>
+
+  <method name="AddSelection">
+    <arg direction="in" name="startOffset" type="i"/>
+    <arg direction="in" name="endOffset" type="i"/>
+    <arg direction="out" type="b"/>
+  </method>
+
+  <method name="RemoveSelection">
+    <arg direction="in" name="selectionNum" type="i"/>
+    <arg direction="out" type="b"/>
+  </method>
+
+  <method name="SetSelection">
+    <arg direction="in" name="selectionNum" type="i"/>
+    <arg direction="in" name="startOffset" type="i"/>
+    <arg direction="in" name="endOffset" type="i"/>
+    <arg direction="out" type="b"/>
+  </method>
+
+  <method name="GetRangeExtents">
+    <arg direction="in" name="startOffset" type="i"/>
+    <arg direction="in" name="endOffset" type="i"/>
+    <arg direction="out" name="x" type="i"/>
+    <arg direction="out" name="y" type="i"/>
+    <arg direction="out" name="width" type="i"/>
+    <arg direction="out" name="height" type="i"/>
+    <arg direction="in" name="coordType" type="u"/>
+  </method>
+
+  <method name="GetBoundedRanges">
+    <arg direction="in" name="x" type="i"/>
+    <arg direction="in" name="y" type="i"/>
+    <arg direction="in" name="width" type="i"/>
+    <arg direction="in" name="height" type="i"/>
+    <arg direction="in" name="coordType" type="u"/>
+    <arg direction="in" name="xClipType" type="u"/>
+    <arg direction="in" name="yClipType" type="u"/>
+    <arg direction="out" type="a(iisv)"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QSpiRangeList"/>
+  </method>
+
+  <method name="GetAttributeRun">
+    <arg direction="in" name="offset" type="i"/>
+    <arg direction="in" name="includeDefaults" type="b"/>
+    <arg direction="out" type="a{ss}"/>
+    <arg direction="out" name="startOffset" type="i"/>
+    <arg direction="out" name="endOffset" type="i"/>
+    <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QSpiAttributeArray"/>
+  </method>
+
+  <method name="GetDefaultAttributeSet">
+    <arg direction="out" type="as"/>
+  </method>
+
+</interface>
+</node>
diff --git a/xml/Value.xml b/xml/Value.xml
new file mode 100644
index 0000000..13e53db
--- /dev/null
+++ b/xml/Value.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<node name="/node">
+<interface name="org.freedesktop.atspi.Value">
+
+        <property name="minimumValue" type="d" access="read"/>
+
+        <property name="maximumValue" type="d" access="read"/>
+
+        <property name="minimumIncrement" type="d" access="read"/>
+
+        <property name="currentValue" type="d" access="readwrite"/>
+
+</interface>
+</node>
diff --git a/xml/create-introspection.sh b/xml/create-introspection.sh
new file mode 100755
index 0000000..78ae328
--- /dev/null
+++ b/xml/create-introspection.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+xsltproc --xinclude remove-annotations.xsl Accessibility.xml -o Processed.xml
+python versioned-introspection.py
diff --git a/xml/remove-annotations.xsl b/xml/remove-annotations.xsl
new file mode 100644
index 0000000..5d25d0e
--- /dev/null
+++ b/xml/remove-annotations.xsl
@@ -0,0 +1,14 @@
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
+
+  <xsl:template match="@*|node()">
+    <xsl:copy>
+      <xsl:apply-templates select="@*|node()"/>
+    </xsl:copy>
+  </xsl:template>
+
+  <xsl:template match="annotation"/>
+
+  <xsl:output method="xml" indent="yes" encoding="UTF-8"
+    omit-xml-declaration="yes"/>
+
+</xsl:stylesheet>
diff --git a/xml/versioned-introspection.py b/xml/versioned-introspection.py
new file mode 100644
index 0000000..1d594a3
--- /dev/null
+++ b/xml/versioned-introspection.py
@@ -0,0 +1,91 @@
+
+import sys
+from xml.etree import ElementTree
+
+CTEMPLATE = \
+"""
+/*
+ * This file has been auto-generated from the introspection data available
+ * in the at-spi2-core repository. The D-Bus procol is defined in this
+ * repository, which can be found at:
+ *
+ * http://download.gnome.org/sources/at-spi2-core/0.1/
+ *
+ * DO NOT EDIT.
+ */
+
+%s
+"""
+
+HTEMPLATE = \
+"""
+/*
+ * This file has been auto-generated from the introspection data available
+ * in the at-spi2-core repository. The D-Bus procol is defined in this
+ * repository, which can be found at:
+ *
+ * http://download.gnome.org/sources/at-spi2-core/0.1/
+ *
+ * DO NOT EDIT.
+ */
+
+#ifndef SPI_INTROSPECTION_DATA_H_
+#define SPI_INTROSPECTION_DATA_H_
+
+%s
+
+#endif /* SPI_INTROSPECTION_DATA_H_ */
+"""
+
+DECTEMPLATE = \
+"""
+const char *%s;
+"""
+
+DEFTEMPLATE = \
+"""
+const char *%s = 
+%s;
+"""
+
+VERSION = "0.1.7"
+
+def convert_name (name):
+	return "spi_" + name.replace (".", "_")
+
+def convert_contents (contents):
+	contents = contents.replace ("\"", "\\\"")
+	literals = ["\"%s\"" % (line) for line in contents.split ("\n")]
+	return "\n".join (literals)
+
+def main (argv):
+	#Open the XML file and process includes.
+	tree = ElementTree.parse ("Processed.xml")
+	root = tree.getroot ()
+
+	#Open the output files.
+	cfile = open ("introspection.c", "w")
+	hfile = open ("introspection.h", "w")
+
+	ccontents = ""
+	hcontents = ""
+
+	for itf in root.findall ("node/interface"):
+		#Get and convert the name of the interface.
+		name = convert_name (itf.attrib["name"])
+
+		#Create the introspection string with version information.
+		itf.attrib["version"] = VERSION
+		contents = convert_contents (ElementTree.tostring (itf))
+
+		hcontents += DECTEMPLATE % (name)
+		ccontents += DEFTEMPLATE % (name, contents)
+
+	cfile.write (CTEMPLATE % (ccontents))
+	hfile.write (HTEMPLATE % (hcontents))
+
+	cfile.close ()
+	hfile.close ()	
+	
+if __name__ == "__main__":
+	sys.exit(main(sys.argv))



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