Bug 1316118: Remove need for ia2_api_all.idl; r?surkov draft
authorAaron Klotz <aklotz@mozilla.com>
Wed, 09 Nov 2016 12:56:23 -0700
changeset 436831 b5e4973bb5b7e5e8239f84fc2e14a2bf3dacf2f9
parent 435535 8b7d439963450f04dd7d6c2cbb3784793c197272
child 536442 bb5f580702b3214dc1253175b538829dd92cae5a
push id35199
push useraklotz@mozilla.com
push dateWed, 09 Nov 2016 20:03:20 +0000
reviewerssurkov
bugs1316118
milestone52.0a1
Bug 1316118: Remove need for ia2_api_all.idl; r?surkov MozReview-Commit-ID: EBAz0MQXmJq
accessible/interfaces/ia2/IA2Typelib.idl
other-licenses/ia2/ia2_api_all.idl
--- a/accessible/interfaces/ia2/IA2Typelib.idl
+++ b/accessible/interfaces/ia2/IA2Typelib.idl
@@ -27,11 +27,35 @@ typedef [wire_marshal(mozHACCEL)] void* 
 typedef [wire_marshal(mozHBRUSH)] void* HBRUSH;
 typedef [wire_marshal(mozHFONT)] void* HFONT;
 typedef [wire_marshal(mozHDC)] void* HDC;
 typedef [wire_marshal(mozHICON)] void* HICON;
 typedef [wire_marshal(mozHRGN)] void* HRGN;
 typedef [wire_marshal(mozHMONITOR)] void* HMONITOR;
 cpp_quote("#endif // 0")
 
+import "Accessible2.idl";
+import "Accessible2_2.idl";
+import "Accessible2_3.idl";
+import "AccessibleAction.idl";
+import "AccessibleApplication.idl";
+import "AccessibleComponent.idl";
+import "AccessibleDocument.idl";
+import "AccessibleEditableText.idl";
+import "AccessibleEventId.idl";
+import "AccessibleHyperlink.idl";
+import "AccessibleHypertext.idl";
+import "AccessibleHypertext2.idl";
+import "AccessibleImage.idl";
+import "AccessibleRelation.idl";
+import "AccessibleRole.idl";
+import "AccessibleStates.idl";
+import "AccessibleTable.idl";
+import "AccessibleTable2.idl";
+import "AccessibleTableCell.idl";
+import "AccessibleText.idl";
+import "AccessibleText2.idl";
+import "AccessibleValue.idl";
+import "IA2CommonTypes.idl";
+
 // We are explicitly using #include instead of import so that the imported
 // IDL is treated as part of this IDL file.
-#include "ia2_api_all.idl"
+#include "IA2TypeLibrary.idl"
deleted file mode 100644
--- a/other-licenses/ia2/ia2_api_all.idl
+++ /dev/null
@@ -1,5474 +0,0 @@
-/*************************************************************************
- *
- *  File Name (api_all_headers.idl)
- * 
- *  IAccessible2 IDL Specification 
- * 
- *  Copyright (c) 2013 Linux Foundation 
- *  All rights reserved. 
- *   
- *   
- *  Redistribution and use in source and binary forms, with or without 
- *  modification, are permitted provided that the following conditions 
- *  are met: 
- *   
- *   1. Redistributions of source code must retain the above copyright 
- *      notice, this list of conditions and the following disclaimer. 
- *   
- *   2. Redistributions in binary form must reproduce the above 
- *      copyright notice, this list of conditions and the following 
- *      disclaimer in the documentation and/or other materials 
- *      provided with the distribution. 
- *
- *   3. Neither the name of the Linux Foundation nor the names of its 
- *      contributors may be used to endorse or promote products 
- *      derived from this software without specific prior written 
- *      permission. 
- *   
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
- *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
- *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
- *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
- *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- *   
- *  This BSD License conforms to the Open Source Initiative "Simplified 
- *  BSD License" as published at: 
- *  http://www.opensource.org/licenses/bsd-license.php 
- *   
- *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
- *  mark may be used in accordance with the Linux Foundation Trademark 
- *  Policy to indicate compliance with the IAccessible2 specification. 
- * 
- ************************************************************************/ 
-
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
-
-/*************************************************************************
- *
- *  File Name (IA2CommonTypes.idl)
- * 
- *  IAccessible2 IDL Specification 
- * 
- *  Copyright (c) 2007, 2013 Linux Foundation 
- *  Copyright (c) 2006 IBM Corporation 
- *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
- *  All rights reserved. 
- *   
- *   
- *  Redistribution and use in source and binary forms, with or without 
- *  modification, are permitted provided that the following conditions 
- *  are met: 
- *   
- *   1. Redistributions of source code must retain the above copyright 
- *      notice, this list of conditions and the following disclaimer. 
- *   
- *   2. Redistributions in binary form must reproduce the above 
- *      copyright notice, this list of conditions and the following 
- *      disclaimer in the documentation and/or other materials 
- *      provided with the distribution. 
- *
- *   3. Neither the name of the Linux Foundation nor the names of its 
- *      contributors may be used to endorse or promote products 
- *      derived from this software without specific prior written 
- *      permission. 
- *   
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
- *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
- *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
- *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
- *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- *   
- *  This BSD License conforms to the Open Source Initiative "Simplified 
- *  BSD License" as published at: 
- *  http://www.opensource.org/licenses/bsd-license.php 
- *   
- *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
- *  mark may be used in accordance with the Linux Foundation Trademark 
- *  Policy to indicate compliance with the IAccessible2 specification. 
- * 
- ************************************************************************/ 
-
- /** These constants control the scrolling of an object or substring into a window.
-
- This enum is used in IAccessible2::scrollTo and IAccessibleText::scrollSubstringTo.
-*/
-enum IA2ScrollType {
-
-  /** Scroll the top left corner of the object or substring such that the top left
-   corner (and as much as possible of the rest of the object or substring) is within
-   the top level window.  In cases where the entire object or substring fits within 
-   the top level window, the placement of the object or substring is dependent on 
-   the application.  For example, the object or substring may be scrolled to the 
-   closest edge, the furthest edge, or midway between those two edges.  In cases
-   where there is a hierarchy of nested scrollable controls, more than one control
-   may have to be scrolled.
-  */
-  IA2_SCROLL_TYPE_TOP_LEFT, 		
-
-  /** Scroll the bottom right corner of the object or substring such that the bottom right
-   corner (and as much as possible of the rest of the object or substring) is within
-   the top level window.  In cases where the entire object or substring fits within 
-   the top level window, the placement of the object or substring is dependent on 
-   the application.  For example, the object or substring may be scrolled to the 
-   closest edge, the furthest edge, or midway between those two edges.  In cases
-   where there is a hierarchy of nested scrollable controls, more than one control
-   may have to be scrolled.
-  */
-  IA2_SCROLL_TYPE_BOTTOM_RIGHT,
-
-  /** Scroll the top edge of the object or substring such that the top edge 
-   (and as much as possible of the rest of the object or substring) is within the
-   top level window.  In cases where the entire object or substring fits within 
-   the top level window, the placement of the object or substring is dependent on 
-   the application.  For example, the object or substring may be scrolled to the 
-   closest edge, the furthest edge, or midway between those two edges.  In cases
-   where there is a hierarchy of nested scrollable controls, more than one control
-   may have to be scrolled.
-  */
-  IA2_SCROLL_TYPE_TOP_EDGE,
-
-  /** Scroll the bottom edge of the object or substring such that the bottom edge 
-   (and as much as possible of the rest of the object or substring) is within the
-   top level window.  In cases where the entire object or substring fits within 
-   the top level window, the placement of the object or substring is dependent on 
-   the application.  For example, the object or substring may be scrolled to the 
-   closest edge, the furthest edge, or midway between those two edges.  In cases
-   where there is a hierarchy of nested scrollable controls, more than one control
-   may have to be scrolled.
-  */
-  IA2_SCROLL_TYPE_BOTTOM_EDGE, 
-
-  /** Scroll the left edge of the object or substring such that the left edge 
-   (and as much as possible of the rest of the object or substring) is within the
-   top level window.  In cases where the entire object or substring fits within 
-   the top level window, the placement of the object or substring is dependent on 
-   the application.  For example, the object or substring may be scrolled to the 
-   closest edge, the furthest edge, or midway between those two edges.  In cases
-   where there is a hierarchy of nested scrollable controls, more than one control
-   may have to be scrolled.
-  */
-  IA2_SCROLL_TYPE_LEFT_EDGE, 
-
-  /** Scroll the right edge of the object or substring such that the right edge 
-   (and as much as possible of the rest of the object or substring) is within the
-   top level window.  In cases where the entire object or substring fits within 
-   the top level window, the placement of the object or substring is dependent on 
-   the application.  For example, the object or substring may be scrolled to the 
-   closest edge, the furthest edge, or midway between those two edges.  In cases
-   where there is a hierarchy of nested scrollable controls, more than one control
-   may have to be scrolled.
-  */
-  IA2_SCROLL_TYPE_RIGHT_EDGE,
-
-  /** Scroll the object or substring such that as much as possible of the 
-   object or substring is within the top level window.  The placement of 
-   the object is dependent on the application.  For example, the object or
-   substring may be scrolled to to closest edge, the furthest edge, or midway
-   between those two edges.
-  */
-  IA2_SCROLL_TYPE_ANYWHERE
-};
-
-/** These constants define which coordinate system a point is located in.
- 
- This enum is used in IAccessible2::scrollToPoint, IAccessibleImage::imagePosition,
- IAccessibleText::characterExtents, and IAccessibleText::offsetAtPoint, and 
- IAccessibleText::scrollSubstringToPoint.
-*/
-enum IA2CoordinateType {
-
-  /// The coordinates are relative to the screen.
-  IA2_COORDTYPE_SCREEN_RELATIVE, 
-
-  /** The coordinates are relative to the upper left corner of the bounding box
-   of the immediate parent.
-  */
-  IA2_COORDTYPE_PARENT_RELATIVE  
-
-};
-
-/** Special offsets for use in IAccessibleText and IAccessibleEditableText methods
-  
-  Refer to @ref _specialOffsets 
-  "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods" 
-  for more information.
-*/
-enum IA2TextSpecialOffsets {
-  IA2_TEXT_OFFSET_LENGTH = -1,	/**< This offset is equivalent to the length of the string.  It eliminates
-								 the need to call IAccessibleText::nCharacters. */
-  IA2_TEXT_OFFSET_CARET = -2	/**< This offset signifies that the text related to the physical location
-								 of the caret should be used. */
-};
-
-/** These constants specify the kind of change made to a table.
-
-   This enum is used in the IA2TableModelChange struct which in turn is used by
-   IAccessibleTable::modelChange and IAccessibleTable2::modelChange.
-*/
-enum IA2TableModelChangeType {
-  IA2_TABLE_MODEL_CHANGE_INSERT,  // = 0;
-  IA2_TABLE_MODEL_CHANGE_DELETE,
-  IA2_TABLE_MODEL_CHANGE_UPDATE
-};
-
-/** A structure defining the type of and extents of changes made to a table
- 
- IAccessibleTable::modelChange and IAccessibleTable2::modelChange return this struct.
- In the case of an insertion or change the row and column offsets define the boundaries
- of the inserted or changed subtable after the operation.  In the case of a deletion
- the row and column offsets define the boundaries of the subtable being removed before
- the removal.
-*/
-typedef struct IA2TableModelChange {
-  enum IA2TableModelChangeType type;	// insert, delete, update
-  long firstRow;		///< 0 based, inclusive
-  long lastRow;			///< 0 based, inclusive
-  long firstColumn;		///< 0 based, inclusive
-  long lastColumn;		///< 0 based, inclusive
-} IA2TableModelChange;
-/*************************************************************************
- *
- *  File Name (AccessibleRelation.idl)
- * 
- *  IAccessible2 IDL Specification 
- * 
- *  Copyright (c) 2007, 2013 Linux Foundation 
- *  Copyright (c) 2006 IBM Corporation 
- *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
- *  All rights reserved. 
- *   
- *   
- *  Redistribution and use in source and binary forms, with or without 
- *  modification, are permitted provided that the following conditions 
- *  are met: 
- *   
- *   1. Redistributions of source code must retain the above copyright 
- *      notice, this list of conditions and the following disclaimer. 
- *   
- *   2. Redistributions in binary form must reproduce the above 
- *      copyright notice, this list of conditions and the following 
- *      disclaimer in the documentation and/or other materials 
- *      provided with the distribution. 
- *
- *   3. Neither the name of the Linux Foundation nor the names of its 
- *      contributors may be used to endorse or promote products 
- *      derived from this software without specific prior written 
- *      permission. 
- *   
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
- *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
- *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
- *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
- *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- *   
- *  This BSD License conforms to the Open Source Initiative "Simplified 
- *  BSD License" as published at: 
- *  http://www.opensource.org/licenses/bsd-license.php 
- *   
- *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
- *  mark may be used in accordance with the Linux Foundation Trademark 
- *  Policy to indicate compliance with the IAccessible2 specification. 
- * 
- ************************************************************************/ 
-
-
-
-
-
-/** @defgroup grpRelations Relations 
-  Use the following constants to compare against the BSTRs returned by 
-  IAccessibleRelation::relationType.
-*/ 
-///@{
-
-/** The target object is the containing application object. */
-const WCHAR *const IA2_RELATION_CONTAINING_APPLICATION = L"containingApplication";
-
-/** The target object is the containing document object. The target object implements
- the IAccessibleDocument interface.
-*/
-const WCHAR *const IA2_RELATION_CONTAINING_DOCUMENT = L"containingDocument";
-
-/** The target object is the containing tab pane object. */
-const WCHAR *const IA2_RELATION_CONTAINING_TAB_PANE = L"containingTabPane";
-
-/** The target object is the containing window object. */
-const WCHAR *const IA2_RELATION_CONTAINING_WINDOW = L"containingWindow";
-
-/** Some attribute of this object is affected by a target object. */
-const WCHAR *const IA2_RELATION_CONTROLLED_BY = L"controlledBy";
-
-/** This object is interactive and controls some attribute of a target object. */
-const WCHAR *const IA2_RELATION_CONTROLLER_FOR = L"controllerFor";
-
-/** This object is described by the target object. */
-const WCHAR *const IA2_RELATION_DESCRIBED_BY = L"describedBy";
-
-/** This object is describes the target object. */
-const WCHAR *const IA2_RELATION_DESCRIPTION_FOR = L"descriptionFor";
-
-/** This object is embedded by a target object. */
-const WCHAR *const IA2_RELATION_EMBEDDED_BY = L"embeddedBy";
-
-/** This object embeds a target object. This relation can be used on the
- OBJID_CLIENT accessible for a top level window to show where the content 
- areas are.
-*/
-const WCHAR *const IA2_RELATION_EMBEDS = L"embeds";
-
-/** Content flows to this object from a target object. 
- This relation and IA2_RELATION_FLOWS_TO are useful to tie text and non-text
- objects together in order to allow assistive technology to follow the
- intended reading order.
-*/
-const WCHAR *const IA2_RELATION_FLOWS_FROM = L"flowsFrom";
-
-/** Content flows from this object to a target object. */
-const WCHAR *const IA2_RELATION_FLOWS_TO = L"flowsTo";
-
-/** This object is label for a target object. */
-const WCHAR *const IA2_RELATION_LABEL_FOR = L"labelFor";
-
-/** This object is labelled by a target object. Note that the double L spelling
- which follows is preferred.  Please use it instead.  This single L version may
- be removed in a later version.
-*/
-const WCHAR *const IA2_RELATION_LABELED_BY = L"labelledBy";
-
-/** This object is labelled by a target object. */
-const WCHAR *const IA2_RELATION_LABELLED_BY = L"labelledBy";
-
-/** This object is a member of a group of one or more objects. When 
- there is more than one object in the group each member may have one and the 
- same target, e.g. a grouping object.  It is also possible that each member has 
- multiple additional targets, e.g. one for every other member in the group.
-*/
-const WCHAR *const IA2_RELATION_MEMBER_OF = L"memberOf";
-
-/** The target object is the next object in the tab order. */
-const WCHAR *const IA2_RELATION_NEXT_TABBABLE = L"nextTabbable";
-
-/** This object is a logical child of a target object.  This relation is the reciprocal
- of the IA2_RELATION_NODE_PARENT_OF relation. In some cases an application's accessible
- tree is such that objects can be in a logical parent-child relationship which is
- different from the hierarchy of the accessible tree. */
-const WCHAR *const IA2_RELATION_NODE_CHILD_OF = L"nodeChildOf";
-
-/** This object is a logical parent of a target object. This relation is the reciprocal
- of the IA2_RELATION_NODE_CHILD_OF relation. In some cases an application's accessible
- tree is such that objects can be in a logical parent-child relationship which is
- different from the hierarchy of the accessible tree. */
-const WCHAR *const IA2_RELATION_NODE_PARENT_OF = L"nodeParentOf";
-
-/** This object is a parent window of the target object. */
-const WCHAR *const IA2_RELATION_PARENT_WINDOW_OF = L"parentWindowOf";
-
-/** This object is a transient component related to the target object. 
- When this object is activated the target object doesn't lose focus.
-*/
-const WCHAR *const IA2_RELATION_POPUP_FOR = L"popupFor";
-
-/** The target object is the previous object in the tab order. */
-const WCHAR *const IA2_RELATION_PREVIOUS_TABBABLE = L"previousTabbable";
-
-/** This object is a sub window of a target object. */
-const WCHAR *const IA2_RELATION_SUBWINDOW_OF = L"subwindowOf";
-
-///@}
-
-/** This interface gives access to an object's set of relations.
-*/
-[object, uuid(7CDF86EE-C3DA-496a-BDA4-281B336E1FDC)]
-interface IAccessibleRelation : IUnknown
-{
-  /** @brief Returns the type of the relation.
-   @param [out] relationType
-    The strings returned are defined @ref grpRelations "in this section of the documentation".
-   @retval S_OK
-  */
-  [propget] HRESULT relationType
-    (
-     [out, retval] BSTR *relationType
-    );
-
-  /** @brief Returns a localized version of the relation type.
-   @param [out] localizedRelationType
-   @retval S_OK
-  */
-  [propget] HRESULT localizedRelationType
-    (
-     [out, retval] BSTR *localizedRelationType
-    );
-
-  /** @brief Returns the number of targets for this relation.
-   @param [out] nTargets
-   @retval S_OK
-  */
-  [propget] HRESULT nTargets
-    (
-     [out, retval] long *nTargets
-    );
-
-  /** @brief Returns one accessible relation target.
-   @param [in] targetIndex
-    0 based index
-   @param [out] target
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-   @note Use QueryInterface to get IAccessible2.
-  */
-  [propget] HRESULT target
-    (
-     [in] long targetIndex,
-     [out, retval] IUnknown **target 
-    );
-
-  /** @brief Returns multiple accessible relation targets
-   @param [in] maxTargets
-    maximum size of the array allocated by the client
-   @param [out] targets
-    The array of target objects.  Note that this array is to be allocated by the
-	client and freed when no longer needed.  Refer to @ref _arrayConsideration 
-	"Special Consideration when using Arrays" for more details.  You will need to use 
-	QueryInterface on the IUnknown to get the IAccessible2.
-   @param [out] nTargets
-	actual number of targets in the returned array (not more than maxTargets)
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed, e.g. a negative value
-  */
-  [propget] HRESULT targets
-    (
-     [in] long maxTargets, 
-     [out, size_is(maxTargets), length_is(*nTargets)]
-       IUnknown **targets, 
-     [out, retval] long *nTargets 
-    );
-
-}
-/*************************************************************************
- *
- *  File Name (AccessibleAction.idl)
- *
- *  IAccessible2 IDL Specification 
- * 
- *  Copyright (c) 2007, 2013 Linux Foundation 
- *  Copyright (c) 2006 IBM Corporation 
- *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
- *  All rights reserved. 
- *   
- *   
- *  Redistribution and use in source and binary forms, with or without 
- *  modification, are permitted provided that the following conditions 
- *  are met: 
- *   
- *   1. Redistributions of source code must retain the above copyright 
- *      notice, this list of conditions and the following disclaimer. 
- *   
- *   2. Redistributions in binary form must reproduce the above 
- *      copyright notice, this list of conditions and the following 
- *      disclaimer in the documentation and/or other materials 
- *      provided with the distribution. 
- *
- *   3. Neither the name of the Linux Foundation nor the names of its 
- *      contributors may be used to endorse or promote products 
- *      derived from this software without specific prior written 
- *      permission. 
- *   
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
- *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
- *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
- *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
- *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- *   
- *  This BSD License conforms to the Open Source Initiative "Simplified 
- *  BSD License" as published at: 
- *  http://www.opensource.org/licenses/bsd-license.php 
- *   
- *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
- *  mark may be used in accordance with the Linux Foundation Trademark 
- *  Policy to indicate compliance with the IAccessible2 specification. 
- * 
- ************************************************************************/ 
-
-
-
-
-
-/** This enum defines values which are predefined actions for use when implementing
- support for media.
-
- This enum is used when specifying an action for IAccessibleAction::doAction.
-*/
-
-enum IA2Actions {
-  IA2_ACTION_OPEN = -1,         /**< Used to inform the server that the client will
-                                signal via IA2_ACTION_COMPLETE when it has consumed
-                                the content provided by the object.  This action
-                                allows the object's server to wait for all clients
-                                to signal their readiness for additional content.
-                                Any form of content generation that requires
-                                synchronization with an AT would require use of this
-                                action.  One example is the generation of text describing
-                                visual content not obvious from a video's sound track.
-                                In this scenario the Text to Speech or Braille output
-                                may take more time than the related length of silence
-                                in the video's sound track. */
-  IA2_ACTION_COMPLETE = -2,  	/**< Used by the client to inform the server that it has
-                                consumed the most recent content provided by this object. */
-  IA2_ACTION_CLOSE = -3         /**< Used to inform the server that the client no longer
-                                requires synchronization. */
-};
-        
-/** @brief This interface gives access to actions that can be executed
-  for accessible objects.
-
- Every accessible object that can be manipulated via the native GUI beyond the 
-  methods available either in the MSAA IAccessible interface or in the set of 
-  IAccessible2 interfaces (other than this IAccessibleAction interface) should 
-  support the IAccessibleAction interface in order to provide Assistive Technology
-  access to all the actions that can be performed by the object.  Each action can 
-  be performed or queried for a name, description or associated key bindings.  
-  Actions are needed more for ATs that assist the mobility impaired, such as
-  on-screen keyboards and voice command software.  By providing actions directly,
-  the AT can present them to the user without the user having to perform the extra
-  steps to navigate a context menu.
-
- The first action should be equivalent to the MSAA default action.  If there is 
-  only one action, %IAccessibleAction should also be implemented.
-*/
-[object, uuid(B70D9F59-3B5A-4dba-AB9E-22012F607DF5)]
-interface IAccessibleAction : IUnknown
-{
-
-  /** @brief Returns the number of accessible actions available in this object.
-    
-   If there are more than one, the first one is considered the
-    "default" action of the object.
-   @param [out] nActions
-    The returned value of the number of actions is zero if there are
-    no actions.
-   @retval S_OK
-   @note This method is missing a [propget] prefix in the IDL.  The result is the
-    method is named nActions in generated C++ code instead of get_nActions.
-  */
-  HRESULT nActions
-    (
-     [out,retval] long* nActions
-    );
-
-  /** @brief Performs the specified Action on the object.
-   @param [in] actionIndex
-    0 based index specifying the action to perform.  If it lies outside
-    the valid range no action is performed.
-   @retval S_OK
-   @retval S_FALSE if action could not be performed
-   @retval E_INVALIDARG if bad [in] passed
-   @note If implementing support for media, refer to the predefined constants in the ::IA2Actions enum.
-    */
-  HRESULT doAction
-    (
-     [in] long actionIndex
-    );
-
-  /** @brief Returns a description of the specified action of the object.
-   @param [in] actionIndex
-    0 based index specifying which action's description to return.
-    If it lies outside the valid range an empty string is returned.
-   @param [out] description
-    The returned value is a localized string of the specified action.
-   @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] value is NULL 
-   @retval E_INVALIDARG if bad [in] passed
-    */
-  [propget] HRESULT description
-    (
-     [in] long actionIndex,
-     [out, retval] BSTR *description
-    );
-
-  /** @brief Returns an array of BSTRs describing one or more key bindings, if
-   there are any, associated with the specified action.
-
-   The returned strings are the localized human readable key sequences to be
-   used to activate each action, e.g. "Ctrl+Shift+D".  Since these key
-   sequences are to be used when the object has focus, they are like
-   mnemonics (access keys), and not like shortcut (accelerator) keys.
-
-   There is no need to implement this method for single action controls since
-   that would be redundant with the standard MSAA programming practice of
-   getting the mnemonic from get_accKeyboardShortcut.
-
-   An AT such as an On Screen Keyboard might not expose these bindings but
-   provide alternative means of activation.
-
-   Note: the client allocates and passes in an array of pointers.  The server
-   allocates the BSTRs and passes back one or more pointers to these BSTRs into
-   the array of pointers allocated by the client.  The client is responsible 
-   for deallocating the BSTRs.
-
-   @param [in] actionIndex
-    0 based index specifying which action's key bindings should be returned.
-   @param [in] nMaxBindings
-    This parameter is ignored. Refer to @ref _arrayConsideration
-	"Special Consideration when using Arrays" for more details.
-   @param [out] keyBindings
-    An array of BSTRs, allocated by the server, one for each key binding.
-	The client must free it with CoTaskMemFree.
-   @param [out] nBindings
-    The number of key bindings returned; the size of the returned array.
-   @retval S_OK
-   @retval S_FALSE if there are no key bindings, [out] values are NULL and 0 respectively 
-   @retval E_INVALIDARG if bad [in] passed
-	*/
-  [propget] HRESULT keyBinding
-    (
-     [in] long actionIndex,
-     [in] long nMaxBindings,
-     [out, size_is(,nMaxBindings), length_is(,*nBindings)] BSTR **keyBindings,
-	 [out, retval] long *nBindings
-    );
-
-  /** @brief Returns the non-localized name of specified action.
-   @param [in] actionIndex
-    0 based index specifying which action's non-localized name should be returned.
-   @param [out] name
-   @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] value is NULL 
-   @retval E_INVALIDARG if bad [in] passed
-   */
-  [propget] HRESULT name
-    (
-     [in] long actionIndex,
-     [out, retval] BSTR *name
-    );
-
-  /** @brief Returns the localized name of specified action.
-   @param [in] actionIndex
-    0 based index specifying which action's localized name should be returned.
-   @param [out] localizedName
-   @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] value is NULL 
-   @retval E_INVALIDARG if bad [in] passed
-   */
-  [propget] HRESULT localizedName
-    (
-     [in] long actionIndex,
-     [out, retval] BSTR *localizedName
-    );
-
-}
-/*************************************************************************
- *
- *  File Name (AccessibleRole.idl)
- * 
- *  IAccessible2 IDL Specification 
- * 
- *  Copyright (c) 2007, 2013 Linux Foundation 
- *  Copyright (c) 2006 IBM Corporation 
- *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
- *  All rights reserved. 
- *   
- *   
- *  Redistribution and use in source and binary forms, with or without 
- *  modification, are permitted provided that the following conditions 
- *  are met: 
- *   
- *   1. Redistributions of source code must retain the above copyright 
- *      notice, this list of conditions and the following disclaimer. 
- *   
- *   2. Redistributions in binary form must reproduce the above 
- *      copyright notice, this list of conditions and the following 
- *      disclaimer in the documentation and/or other materials 
- *      provided with the distribution. 
- *
- *   3. Neither the name of the Linux Foundation nor the names of its 
- *      contributors may be used to endorse or promote products 
- *      derived from this software without specific prior written 
- *      permission. 
- *   
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
- *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
- *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
- *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
- *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- *   
- *  This BSD License conforms to the Open Source Initiative "Simplified 
- *  BSD License" as published at: 
- *  http://www.opensource.org/licenses/bsd-license.php 
- *   
- *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
- *  mark may be used in accordance with the Linux Foundation Trademark 
- *  Policy to indicate compliance with the IAccessible2 specification. 
- * 
- ************************************************************************/ 
-
-
-
-/** Collection of roles
-
-  This enumerator defines an extended set of accessible roles of objects implementing
-  the %IAccessible2 interface. These roles are in addition to the MSAA roles obtained
-  through the MSAA get_accRole method.  Examples are 'footnote', 'heading', and 
-  'label'. You obtain an object's %IAccessible2 roles by calling IAccessible2::role.
-*/
-enum IA2Role {
-
-  /** Unknown role. The object contains some Accessible information, but its 
-   role is not known.
-  */
-  IA2_ROLE_UNKNOWN = 0,
-
-  /** An object that can be drawn into and to manage events from the objects
-   drawn into it.  Also refer to ::IA2_ROLE_FRAME,
-   ::IA2_ROLE_GLASS_PANE, and ::IA2_ROLE_LAYERED_PANE. 
-  */
-  IA2_ROLE_CANVAS = 0x401,
-
-  /// A caption describing another object.
-  IA2_ROLE_CAPTION,
-
-  /// Used for check buttons that are menu items.
-  IA2_ROLE_CHECK_MENU_ITEM,
-
-  /// A specialized dialog that lets the user choose a color.
-  IA2_ROLE_COLOR_CHOOSER,
-
-  /// A date editor.
-  IA2_ROLE_DATE_EDITOR,
-
-  /** An iconified internal frame in an ::IA2_ROLE_DESKTOP_PANE. 
-   Also refer to ::IA2_ROLE_INTERNAL_FRAME.
-  */
-  IA2_ROLE_DESKTOP_ICON,
-
-  /** A desktop pane. A pane that supports internal frames and iconified 
-   versions of those internal frames.  Also refer to ::IA2_ROLE_INTERNAL_FRAME.
-  */
-  IA2_ROLE_DESKTOP_PANE,
-
-  /** A directory pane. A pane that allows the user to navigate through 
-   and select the contents of a directory. May be used by a file chooser.   
-   Also refer to ::IA2_ROLE_FILE_CHOOSER.
-  */
-  IA2_ROLE_DIRECTORY_PANE,
-
-  /** An editable text object in a toolbar. <b>Deprecated.</b>
-   The edit bar role was meant for a text area in a tool bar. However, to detect
-   a text area in a tool bar the AT can query the parent.
-  */
-  IA2_ROLE_EDITBAR,
-
-  /// Embedded (OLE) object.
-  IA2_ROLE_EMBEDDED_OBJECT,
-
-  /// Text that is used as an endnote (footnote at the end of a chapter or section).
-  IA2_ROLE_ENDNOTE,
-
-  /** A file chooser. A specialized dialog that displays the files in the 
-   directory and lets the user select a file, browse a different directory, 
-   or specify a filename. May use the directory pane to show the contents of 
-   a directory.  
-   Also refer to ::IA2_ROLE_DIRECTORY_PANE.
-  */
-  IA2_ROLE_FILE_CHOOSER,
-
-  /** A font chooser. A font chooser is a component that lets the user pick 
-   various attributes for fonts.
-  */
-  IA2_ROLE_FONT_CHOOSER,
-
-  /** Footer of a document page.
-   Also refer to ::IA2_ROLE_HEADER.
-  */
-  IA2_ROLE_FOOTER,
-
-  /// Text that is used as a footnote.  Also refer to ::IA2_ROLE_ENDNOTE.
-  IA2_ROLE_FOOTNOTE,
-
-  /** A container of form controls.  An example of the use of this role is to
-   represent an HTML FORM tag.
-  */
-  IA2_ROLE_FORM,
-
-  /** Frame role. A top level window with a title bar, border, menu bar, etc.  
-   It is often used as the primary window for an application.  Also refer to
-   ::IA2_ROLE_CANVAS and the MSAA roles of dialog and window.
-  */
-  IA2_ROLE_FRAME,
-
-  /** A glass pane. A pane that is guaranteed to be painted on top of all panes
-   beneath it.  Also refer to ::IA2_ROLE_CANVAS, ::IA2_ROLE_INTERNAL_FRAME, and
-   ::IA2_ROLE_ROOT_PANE.
-  */
-  IA2_ROLE_GLASS_PANE,
-
-  /** Header of a document page.
-   Also refer to ::IA2_ROLE_FOOTER.
-  */
-  IA2_ROLE_HEADER,
-
-  /// Heading.  Use the IAccessible2::attributes level attribute to determine the heading level.
-  IA2_ROLE_HEADING,
-
-  /// A small fixed size picture, typically used to decorate components.
-  IA2_ROLE_ICON,
-
-  /** An image map object.  Usually a graphic with multiple hotspots, where 
-   each hotspot can be activated resulting in the loading of another document
-   or section of a document.
-  */
-  IA2_ROLE_IMAGE_MAP,
-
-  /** An object which is used to allow input of characters not found on a keyboard,
-   such as the input of Chinese characters on a Western keyboard.
-  */
-  IA2_ROLE_INPUT_METHOD_WINDOW,
-
-  /** An internal frame. A frame-like object that is clipped by a desktop pane.  
-   The desktop pane, internal frame, and desktop icon objects are often used to 
-   create multiple document interfaces within an application.
-   Also refer to ::IA2_ROLE_DESKTOP_ICON, ::IA2_ROLE_DESKTOP_PANE, and ::IA2_ROLE_FRAME.
-  */
-  IA2_ROLE_INTERNAL_FRAME,
-
-  /// An object used to present an icon or short string in an interface.
-  IA2_ROLE_LABEL,
-
-  /** A layered pane. A specialized pane that allows its children to be drawn 
-   in layers, providing a form of stacking order. This is usually the pane that 
-   holds the menu bar as  well as the pane that contains most of the visual 
-   components in a window.
-   Also refer to ::IA2_ROLE_CANVAS, ::IA2_ROLE_GLASS_PANE, and ::IA2_ROLE_ROOT_PANE.
-  */
-  IA2_ROLE_LAYERED_PANE,
-
-  /** A section whose content is parenthetic or ancillary to the main content
-   of the resource.
-  */
-  IA2_ROLE_NOTE,
-
- /** A specialized pane whose primary use is inside a dialog.
-   Also refer to MSAA's dialog role.
-  */
-  IA2_ROLE_OPTION_PANE,
-
-  /** An object representing a page of document content.  It is used in documents
-   which are accessed by the user on a page by page basis.
-  */
-  IA2_ROLE_PAGE,
-
-  /// A paragraph of text.
-  IA2_ROLE_PARAGRAPH,
-
-  /** A radio button that is a menu item.
-   Also refer to MSAA's button and menu item roles.
-  */
-  IA2_ROLE_RADIO_MENU_ITEM,
-
-  /** An object which is redundant with another object in the accessible hierarchy.
-   ATs typically ignore objects with this role.
-  */
-  IA2_ROLE_REDUNDANT_OBJECT,
-
-  /** A root pane. A specialized pane that has a glass pane and a layered pane 
-   as its children.
-   Also refer to ::IA2_ROLE_GLASS_PANE and ::IA2_ROLE_LAYERED_PANE
-  */
-  IA2_ROLE_ROOT_PANE,
-
-  /** A ruler such as those used in word processors.
-  */
-  IA2_ROLE_RULER,
-
-  /** A scroll pane. An object that allows a user to incrementally view a large 
-   amount of information.  Its children can include scroll bars and a viewport.
-   Also refer to ::IA2_ROLE_VIEW_PORT and MSAA's scroll bar role.
-  */
-  IA2_ROLE_SCROLL_PANE,
-
-  /** A container of document content.  An example of the use of this role is to
-   represent an HTML DIV tag.  A section may be used as a region.  A region is a 
-   group of elements that together form a perceivable unit.  A region does not 
-   necessarily follow the logical structure of the content, but follows the 
-   perceivable structure of the page.  A region may have an attribute in the set 
-   of IAccessible2::attributes which indicates that it is "live".  A live region 
-   is content that is likely to change in response to a timed change, a user 
-   event, or some other programmed logic or event.
-  */
-  IA2_ROLE_SECTION,
-
-  /// Object with graphical representation used to represent content on draw pages.
-  IA2_ROLE_SHAPE,
-
-  /** A split pane. A specialized panel that presents two other panels at the 
-   same time. Between the two panels is a divider the user can manipulate to make 
-   one panel larger and the other panel smaller.
-  */
-  IA2_ROLE_SPLIT_PANE,
-
-  /** An object that forms part of a menu system but which can be "undocked" 
-   from or "torn off" the menu system to exist as a separate window.
-  */
-  IA2_ROLE_TEAR_OFF_MENU,
-
-  /// An object used as a terminal emulator.
-  IA2_ROLE_TERMINAL,
-
-  /// Collection of objects that constitute a logical text entity.
-  IA2_ROLE_TEXT_FRAME,
-
-  /** A toggle button. A specialized push button that can be checked or unchecked, 
-   but does not provide a separate indicator for the current state.
-   Also refer to MSAA's roles of push button, check box, and radio button.
-   <BR><B>Note:</B> IA2_ROLE_TOGGLE_BUTTON should not be used.  Instead, use MSAA's 
-   ROLE_SYSTEM_PUSHBUTTON and STATE_SYSTEM_PRESSED.
-  */
-  IA2_ROLE_TOGGLE_BUTTON,
-
-  /** A viewport. An object usually used in a scroll pane. It represents the 
-   portion of the entire data that the user can see. As the user manipulates 
-   the scroll bars, the contents of the viewport can change.
-   Also refer to ::IA2_ROLE_SCROLL_PANE.
-  */
-  IA2_ROLE_VIEW_PORT,
-
-  /** An object containing content which is complementary to the main content of
-   a document, but remains meaningful when separated from the main content.  There
-   are various types of content that would appropriately have this role.  For example,
-   in the case where content is delivered via a web portal to a web browser, this may
-   include but not be limited to show times, current weather, related articles, or
-   stocks to watch.  The complementary role indicates that contained content is relevant
-   to the main content.  If the complementary content is completely separable main
-   content, it may be appropriate to use a more general role.
-  */
-  IA2_ROLE_COMPLEMENTARY_CONTENT
-  
-};
-/*************************************************************************
- *
- *  File Name (AccessibleStates.idl)
- * 
- *  IAccessible2 IDL Specification 
- * 
- *  Copyright (c) 2007, 2010 Linux Foundation 
- *  Copyright (c) 2006 IBM Corporation 
- *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
- *  All rights reserved. 
- *   
- *   
- *  Redistribution and use in source and binary forms, with or without 
- *  modification, are permitted provided that the following conditions 
- *  are met: 
- *   
- *   1. Redistributions of source code must retain the above copyright 
- *      notice, this list of conditions and the following disclaimer. 
- *   
- *   2. Redistributions in binary form must reproduce the above 
- *      copyright notice, this list of conditions and the following 
- *      disclaimer in the documentation and/or other materials 
- *      provided with the distribution. 
- *
- *   3. Neither the name of the Linux Foundation nor the names of its 
- *      contributors may be used to endorse or promote products 
- *      derived from this software without specific prior written 
- *      permission. 
- *   
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
- *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
- *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
- *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
- *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- *   
- *  This BSD License conforms to the Open Source Initiative "Simplified 
- *  BSD License" as published at: 
- *  http://www.opensource.org/licenses/bsd-license.php 
- *   
- *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
- *  mark may be used in accordance with the Linux Foundation Trademark 
- *  Policy to indicate compliance with the IAccessible2 specification. 
- * 
- ************************************************************************/ 
-
-
-
-typedef long AccessibleStates;
-
-/** %IAccessible2 specific state bit constants
-
-  This enum defines the state bits returned by IAccessible2::states.  The 
-  %IAccessible2 state bits are in addition to those returned by MSAA.
-*/
-enum IA2States {
-
-/** Indicates a window is currently the active window, or is an active subelement 
-  within a container or table.
-
- This state can be used to indicate the current active item in a container, even 
-  if the container itself is not currently active. In other words this would indicate
-  the item that will get focus if you tab to the container.
-
- This information is important for knowing what to report for trees and potentially 
-  other containers in a virtual buffer.
-
- Also, see ::IA2_STATE_MANAGES_DESCENDANTS for more information.
-*/
-IA2_STATE_ACTIVE =					0x1,
-
-/** Indicates that the object is armed.
-
- Used to indicate that the control is "pressed" and will be invoked when the 
-  actuator, e.g. a mouse button, is "released".  An AT which either monitors the 
-  mouse or synthesizes mouse events might need to know that, and possibly a talking
-  interface would even let the user know about it.  It could also potentially be
-  useful to on screen keyboards or test tools since the information does indicate
-  something about the state of the interface, for example, code operating asynchronously
-  might need to wait for the armed state to change before doing something else.
-
-*/
-IA2_STATE_ARMED =					0x2,
-
-/** Indicates the user interface object corresponding to this object no longer exists. */
-IA2_STATE_DEFUNCT =					0x4,
-
-/** An object with this state has a caret and implements the IAccessibleText interface.
-  
- Such fields may be read-only, so STATE_SYSTEM_READONLY is valid in combination
-  with IA2_STATE_EDITABLE.
-
-*/
-IA2_STATE_EDITABLE =				0x8,
-
-/** Indicates the orientation of this object is horizontal. */
-IA2_STATE_HORIZONTAL =				0x10,
-
-/** Indicates this object is minimized and is represented only by an icon. */
-IA2_STATE_ICONIFIED =				0x20,
-
-/** Indicates an input validation failure. */
-IA2_STATE_INVALID_ENTRY =			0x40,
-
-/** Indicates that this object manages its children.
-
- Note: Due to the fact that MSAA's WinEvents don't allow the active child index
-  to be passed on the IA2_EVENT_ACTIVE_DESCENDANT_CHANGED event, the manages
-  descendants	scheme can't be used.  Instead the active child object has to fire
-  MSAA's EVENT_OBJECT_FOCUS.  In a future release a new event mechanism may be
-  added to provide for event specific data to be passed with the event.  At that
-  time the IA2_EVENT_ACTIVE_DECENDENT_CHANGED event and
-  IA2_STATE_MANAGES_DESCENDANTS state would be useful.
-*/
-IA2_STATE_MANAGES_DESCENDANTS =		0x80,
-
-/** Indicates that an object is modal.
-
- Modal objects have the behavior that something must be done with the object 
-  before the user can interact with an object in a different window.
-*/
-IA2_STATE_MODAL =					0x100,
-
-/** Indicates this text object can contain multiple lines of text. */
-IA2_STATE_MULTI_LINE =				0x200,
-
-/** Indicates this object paints every pixel within its rectangular region. */
-IA2_STATE_OPAQUE =					0x400,
-
-/** Indicates that user interaction is required.
-
- An example of when this state is used is when a field in a form must be filled 
-  before a form can be processed.
-*/
-IA2_STATE_REQUIRED =				0x800,
-
-/** Indicates an object which supports text selection.
-
- Note: This is different than MSAA STATE_SYSTEM_SELECTABLE.
-*/
-IA2_STATE_SELECTABLE_TEXT =			0x1000,
-
-/** Indicates that this text object can contain only a single line of text. */
-IA2_STATE_SINGLE_LINE =				0x2000,
-
-/** Indicates that the accessible object is stale.
-
- This state is used when the accessible object no longer accurately 
-  represents the state of the object which it is representing such as when an
-  object is transient or when an object has been or is in the process of being
-  destroyed or when the object's index in its parent has changed.
-*/
-IA2_STATE_STALE =					0x4000,
-
-/** Indicates that the object implements autocompletion.
-
- This state indicates that a text control will respond to the input of 
- one ore more characters and cause a sub-item to become selected.  The 
- selection may also result in events fired on the parent object.
-*/
-IA2_STATE_SUPPORTS_AUTOCOMPLETION =	0x8000,
-
-/** Indicates this object is transient.
-
- An object has this state when its parent object has the state ::IA2_STATE_MANAGES_DESCENDANTS.
- For example, a list item object may be managed by its parent list object and may only 
- exist as long as the object is actually rendered.  Similarly a table cell's accessible 
- object may exist only while the cell has focus.  However, from the perspective of an 
- assistive technology a transient object behaves like a non-transient object.  As a 
- result it is likely that this state is not of use to an assistive technology, but it 
- is provided in case an assistive technology determines that knowledge of the transient 
- nature of the object is useful and also for harmony with the Linux accessibility API.
-
- Also, see ::IA2_STATE_MANAGES_DESCENDANTS for more information.
- */
-IA2_STATE_TRANSIENT =				0x10000,
-
-/** Indicates the orientation of this object is vertical. */
-IA2_STATE_VERTICAL =				0x20000,
-
-/** Indicates this object is checkable.
-
- The standard checkable objects are check boxes, radio buttons, check box menu
- items, radio menu items, and toggle buttons.  Since assistive technology will
- determine that these objects are checkable via the object's role the checkable
- state is not required.  However, this state is necessary in those cases where
- an object has a role which is not one of the previously mentioned roles.  An
- example is a table cell which indicates whether or not an email has an attachment,
- whether or not an mail is considered spam, and whether or not an email has been read.
- */
-IA2_STATE_CHECKABLE =				0x40000,
-
-/** Indicates this object is pinned.
-
- This state indicates that an object is fixed at a certain location.  One example
- is a browser tab that when pinned cannot be moved until unpinned.  Another example
- is a movable or floating object that when pinned remains in its pinned location
- until being unpinned.
- */
-IA2_STATE_PINNED =					0x80000
-
-};
-/*************************************************************************
- *
- *  File Name (Accessible2.idl)
- * 
- *  IAccessible2 IDL Specification 
- * 
- *  Copyright (c) 2007, 2013 Linux Foundation 
- *  Copyright (c) 2006 IBM Corporation 
- *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
- *  All rights reserved. 
- *   
- *   
- *  Redistribution and use in source and binary forms, with or without 
- *  modification, are permitted provided that the following conditions 
- *  are met: 
- *   
- *   1. Redistributions of source code must retain the above copyright 
- *      notice, this list of conditions and the following disclaimer. 
- *   
- *   2. Redistributions in binary form must reproduce the above 
- *      copyright notice, this list of conditions and the following 
- *      disclaimer in the documentation and/or other materials 
- *      provided with the distribution. 
- *
- *   3. Neither the name of the Linux Foundation nor the names of its 
- *      contributors may be used to endorse or promote products 
- *      derived from this software without specific prior written 
- *      permission. 
- *   
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
- *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
- *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
- *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
- *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- *   
- *  This BSD License conforms to the Open Source Initiative "Simplified 
- *  BSD License" as published at: 
- *  http://www.opensource.org/licenses/bsd-license.php 
- *   
- *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
- *  mark may be used in accordance with the Linux Foundation Trademark 
- *  Policy to indicate compliance with the IAccessible2 specification. 
- * 
- ************************************************************************/ 
-
-/** @mainpage
-
- @section _interfaces Interfaces
-  IAccessible2\n
-  IAccessible2_2\n
-  IAccessibleAction\n
-  IAccessibleApplication\n
-  IAccessibleComponent\n
-  IAccessibleDocument\n
-  IAccessibleEditableText\n
-  IAccessibleHypertext\n
-  IAccessibleHypertext2\n
-  IAccessibleHyperlink\n
-  IAccessibleImage\n
-  IAccessibleRelation\n
-  IAccessibleTable [Deprecated]\n
-  IAccessibleTable2\n
-  IAccessibleTableCell\n
-  IAccessibleText\n
-  IAccessibleText2\n
-  IAccessibleValue
-
- @section _structs Structs
-  IA2Locale\n
-  IA2TableModelChange\n
-  IA2TextSegment
-
- @section _enums Enums
-  ::IA2Actions values are predefined actions for use when implementing support for HTML5 media.\n
-  ::IA2CoordinateType values define the requested coordinate type (screen or parent window).\n
-  ::IA2EventID values identify events.\n
-  ::IA2Role values defines roles which are in addition to the existing MSAA roles.\n
-  ::IA2ScrollType values define where to place an object or substring on the screen.\n
-  ::IA2States values define states which are in addition to the existing MSAA states.\n
-  ::IA2TableModelChangeType values describe the kinds of changes made to a table (insert, delete, update).\n
-  ::IA2TextBoundaryType values define the requested text unit (character, word, sentence, line, paragraph).\n
-  ::IA2TextSpecialOffsets values define special offsets for use in the text interfaces.
-
- @section _constants Constants
-  @ref grpRelations
-
- @section _misc Miscellaneous
-  @ref _licensePage "BSD License"\n
-  @ref _generalInfo "General Information"\n
-
- @page _licensePage BSD License
-  %IAccessible2 IDL Specification
-
-  Copyright (c) 2007, 2013 Linux Foundation\n
-  Copyright (c) 2006 IBM Corporation\n
-  Copyright (c) 2000, 2006 Sun Microsystems, Inc.\n
-  All rights reserved.
-
-  Redistribution and use in source and binary forms, with or without 
-  modification, are permitted provided that the following conditions 
-  are met: 
-    
-   1. Redistributions of source code must retain the above copyright 
-      notice, this list of conditions and the following disclaimer. 
- 
-   2. Redistributions in binary form must reproduce the above 
-      copyright notice, this list of conditions and the following 
-      disclaimer in the documentation and/or other materials 
-      provided with the distribution. 
- 
-   3. Neither the name of the Linux Foundation nor the names of its 
-      contributors may be used to endorse or promote products 
-      derived from this software without specific prior written 
-      permission. 
- 
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
-  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
-  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
-  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
-  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
-  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
-  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
-  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
-  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
-  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
-  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- 
-  This BSD License conforms to the Open Source Initiative "Simplified 
-  BSD License" as published at: 
-  http://www.opensource.org/licenses/bsd-license.php 
- 
-  %IAccessible2 is a trademark of the Linux Foundation. The %IAccessible2 
-  mark may be used in accordance with the
-  <a href="http://www.linuxfoundation.org/collaborate/workgroups/accessibility/trademark-policy">
-  Linux Foundation Trademark Policy</a> to indicate compliance with the %IAccessible2 specification. 
-
- @page _generalInfo General Information 
-  The following information is applicable to two or more interfaces.
-
- @ref _errors\n
- @ref _memory\n
- &nbsp;&nbsp;@ref _arrayConsideration\n
- @ref _indexes\n
- @ref _enumBase\n
- @ref _specialOffsets\n
- @ref _dicoveringInterfaces\n
- @ref _changingInterfaces\n
- @ref _applicationInfo\n
- @ref _childIDs\n
- @ref _variants\n
- @ref _iaaction-iahyperlink\n
- @ref _trademark
-
- @section _errors Error Handling
-  HRESULT values are defined by the Microsoft&reg; Win32&reg; API.  For more information, refer to
-  <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa378137%28v=vs.85%29.aspx">
-  Interpreting HRESULT Values</a> in MSDN&reg;.
-
-  Note that the S_FALSE return value is considered a non-error value and the 
-  SUCCEEDED macro will return TRUE.  S_FALSE is used when there is no failure
-  but there was nothing valid to return, e.g. in IAccessible2::attributes when
-  there are no attributes.  When S_FALSE is returned [out] pointer types should 
-  be NULL and [out] longs should generally be 0, but sometimes -1 is used such
-  as IAccessible2::indexInParent, IAccessibleText::caretOffset, and
-  IAccessibleHypertext::hyperlinkIndex.
-
-  Note that for BSTR [out] variables common COM practice is that the server does 
-  the SysAllocString and the client does the SysFreeString.  Also note that when
-  NULL is returned there is no need for the client to call SysFreeString.  Please
-  refer to the documentation for each method for more details regarding error handling.
-
- @section _memory Memory Management
-  The following memory management issues should be considered:
-  @li Although [out] BSTR variables are declared by the client, their space is 
-   allocated by the server.  They need to be freed with SysFreeString by the 
-   client at end of life; the same is true when BSTRs are used in structs or 
-   arrays which are passed to the server.
-  @li If there is no valid [out] BSTR to return, the server should return S_FALSE and 
-   assign NULL to the output, e.g. *theOutBSTR = NULL;. 
-  @li COM interfaces need to be referenced with AddRef when used and dereferenced
-   with Release at end of life.
-  @li Single [out] longs, HWNDs, booleans, and structs are declared by the caller
-   and passed by reference. The marshaller does all the memory management.
-  
-  The following articles may be helpful for understanding memory management issues:
-  @li An article by Don Box in a
-   <a href="http://www.microsoft.com/msj/1196/activex1196.aspx">Q & A section</a>
-   of the November 1996 edition of the Microsoft Systems Journal.
-  @li A posting to a CodeGuru forum, 
-   <a href="http://www.codeguru.com/forum/showthread.php?t=364511">Windows SDK 
-   String: What are the rules for BSTR allocation and deallocation?</a>
-
- @subsection _arrayConsideration Special Consideration when using Arrays
-  There are several methods which return arrays.  In the case of IAccessible2::relations
-  and IAccessibleRelation::targets the client must allocate and free the arrays.
-
-  For the remaining methods which return arrays, the server must allocate the array
-  and the client must free the array when no longer needed.  These methods are
-  IAccessible2::extendedStates, IAccessible2::localizedExtendedStates,
-  IAccessible2_2::relationTargetsOfType, IAccessibleAction::keyBinding, 
-  IAccessibleHypertext2::hyperlinks, IAccessibleTable::selectedChildren, 
-  IAccessibleTable::selectedColumns, IAccessibleTable::selectedRows,
-  IAccessibleTable2::selectedCells, IAccessibleTable2::selectedColumns,
-  IAccessibleTable2::selectedRows, IAccessibleTableCell::columnHeaderCells,
-  and IAccessibleTableCell::rowHeaderCells.
-  For those methods, the server must allocate both the top level array and any storage 
-  associated with it, e.g. for BSTRs.  The server must allocate the arrays with 
-  CoTaskMemAlloc and any BSTRs with SysAllocString.  The client must use CoTaskMemFree
-  to free the array and any BSTRs must be freed with SysFreeString.  
-  
-  Also, the IDL for IAccessible2::extendedStates, IAccessible2::localizedExtendedStates, 
-  IAccessibleAction::keyBinding, IAccessibleTable::selectedChildren, 
-  IAccessibleTable::selectedColumns, and IAccessibleTable::selectedRows includes an
-  extraneous [in] parameter for the caller to specify the max size of the array.
-  This parameter will be ignored by the COM server.
-
- @section _indexes Zero and One Based Indexes
-  Unless otherwise specified all offsets and indexes are 0 based. 
-
- @section _enumBase Enum Base
-  Note that enums start at 0.
-
- @section _specialOffsets Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods
-  IAccessibleText and IAccessibleEditableText can use one or more of the following
-  special offset values.  They are defined in the ::IA2TextSpecialOffsets enum.
-  @li Using ::IA2_TEXT_OFFSET_LENGTH (-1) as an offset in any of the IAccessibleText or
-   IAccessibleEditableText methods is the same as specifying the length of the string.
-  @li Using ::IA2_TEXT_OFFSET_CARET (-2) as an offset for IAccessibleText::textBeforeOffset, 
-   IAccessibleText::textAtOffset, and IAccessibleText::textAfterOffset indicates that the 
-   text related to the physical location of the caret should be used.  This is needed for 
-   applications that consider the character offset of the end of one line (as reached by 
-   pressing the End key) the same as the offset of the first character on the next line.
-   Since the same offset is associated with two different lines a special means is needed 
-   to fetch text from the line where the caret is physically located.
-
- @section _dicoveringInterfaces Discovery of Interfaces
-  In general AT (Assistive Technology) should try IAccessible2 interfaces, followed by using 
-  the MSAA (Microsoft&reg; Active Accessibility&reg;) interfaces.  (In cases where the an application
-  is known to have custom interfaces which provide information not supplied by IAccessible2
-  or MSAA, then those custom interfaces can be used.)  The AT can then, by default, support
-  unknown IAccessible2/MSAA applications, without the application developers having to request
-  AT vendors for support on an individual application by application basis.
-
-  When you have a reference to an IAccessible and require a reference to an IAccessible2 use 
-  QueryService as follows:
-  @code
-  // pAcc is a reference to the accessible object's IAccessible interface. 
-  IServiceProvider *pService = NULL; 
-  hr = pAcc->QueryInterface(IID_IServiceProvider, (void **)&pService); 
-  if(SUCCEEDED(hr)) { 
-    IAccessible2 *pIA2 = NULL; 
-    hr = pService->QueryService(IID_IAccessible, IID_IAccessible2, (void**)&pIA2); 
-    if (SUCCEEDED(hr) && pIA2) { 
-      // The control supports IAccessible2. 
-      // pIA2 is the reference to the accessible object's IAccessible2 interface.
-    } 
-  } 
-  @endcode
-
-  @section _changingInterfaces Changing between Accessible Interfaces
-  Note that developers must always implement MSAA's IAccessible and, if needed, some
-  of the interfaces in the set of IAccessible2 interfaces.  Although the IAccessible2
-  IDL is coded such that IAccessible2 is a subclass of MSAA's IAccessible, none of
-  MSAA's IAccessible methods are redefined by IAccessible2.
-
-  QueryService must be used to switch from a reference to an MSAA IAccessible interface 
-  to another interface.  This has been 
-  <a href="http://www.atia.org/files/public/Introducing_IAccessibleEx.doc">
-  documented</a> and the pertinent facts have been extracted below: 
-
-  @par 
-   Why use QueryService instead of just using QueryInterface to get IAccessibleEx 
-   directly? The reason is that since MSAA 2.0, clients don't talk to a server's 
-   IAccessible interface directly; instead they talk to an intermediate MSAA-provided 
-   wrapper that calls through to the original IAccessible. This wrapper provides services 
-   such as implementing IDispatch, supplying information from MSAA 2.0's Dynamic Annotation 
-   service, and scaling locations when running on Windows Vista with DPI scaling enabled. 
-   QueryService is the supported way to expose additional interfaces from an existing 
-   IAccessible and was originally used by MSHTML to expose IHTMLElement objects corresponding 
-   to IAccessibles. QueryService is often more convenient for servers to implement than 
-   QueryInterface because it does not have the same requirements for preserving object 
-   identity or symmetry/transitivity as QueryInterface, so QueryService allows servers to 
-   easily implement the interface on the same object or a separate object. The latter is 
-   often hard to do with QueryInterface unless the original object supports aggregation. 
-
-  Two related references in MSDN&reg; are: 
-  @li <a href="http://msdn.microsoft.com/en-us/library/ms696078(VS.85).aspx">
-  "Using QueryService to expose a native object model interface for an IAccessible object"</a>
-  @li <a href="http://msdn.microsoft.com/en-us/library/ms528415.aspx#acc_obj"> 
-  "Accessing the Internet Explorer Object Associated with an Accessible Object"</a>
-
-  Based on this information from Microsoft, QueryService must be used to switch back and forth 
-  between a reference to an MSAA IAccessible interface and any of the IAccessible2 interfaces. 
-
-  Regarding switching between any of the IAccessible2 interfaces, applications implementing
-  IAccessible2 should implement the IAccessible2 interfaces on a single object since ATs
-  will be using QueryInterface to switch between the IAccessilbe2 interfaces.  Implementing
-  the IAccessible2 interfaces on separate objects would require the use of QueryService.
-  There is one exception, IAccessibleApplication can be implemented on a separate object so
-  its common code doesn't have to be included in each accessible object.  ATs should use
-  QueryService to access IAccessibleApplication.
-
- @section _applicationInfo Access to Information about the Application
-  Servers implementing IAccessible2 should provide access to the IAccessibleApplication 
-  interface via QueryService from any object so that ATs can easily determine specific 
-  information about the application such as its name or version.
-
- @section _childIDs Child IDs
-  The IAccessible2 interfaces do not support child IDs, i.e. simple child elements.
-  Full accessible objects must be created for each object that supports IAccessible2.
-  Therefore MSAA's get_accChild should never return a child ID (other than CHILDID_SELF)
-  for an object that implements any of the IAccessible2 interfaces.
-
-  Microsoft's UI Automation specification has the same limitation and this was resolved
-  in the UI Automation Express specification by adding IAccessibleEx::GetObjectForChild
-  and IAccessibleEx::GetIAccessiblePair.  These methods allow mapping back and forth 
-  between an IAccessibleEx and an {IAccessible, Child ID} pair.  A future version of 
-  IAccessible2 may include similar methods to map back and forth between an IAccessible2
-  and an {IAccessible, Child ID} pair.
-
- @section _variants VARIANTs
-  Some methods return a VARIANT.  Implementers need to make sure that the return type is 
-  specified, i.e. VT_I4, VT_IDISPATCH, etc.  The methods that return VARIANTs are 
-  IAccessibleHyperlink::anchor, IAccessibleHyperlink::anchorTarget, IAccessibleValue::currentValue,
-  IAccessibleValue::maximumValue, IAccessibleValue::minimumValue.
-
- @section _iaaction-iahyperlink IAccessibleHyperlink as subclass of IAccessibleAction
-  In this version of the IDL, IAccessibleHyperlink is a subclass of IAccessibleAction.  
-  However, there is no practical need for that inheritance and in some cases, such as
-  an image map of smart tags, it doesn't make sense because such an image map doesn't 
-  have actionable objects; it's the secondary smart tags that are actionable.  As a 
-  result, implementations should not rely on the inheritance as it may be removed in 
-  a later version of the IDL.
-
- @section _trademark Trademark Attribution
-  The names of actual companies and products mentioned herein may be the trademarks of
-  their respective owners.  In particular, Active Accessibility, Microsoft, MSDN, and Win32
-  are trademarks of the Microsoft group of companies in the U.S.A. and/or other countries.
-
-**/
-
-
-
-
-
-
-
-
-/** A structure defining the locale of an accessible object.
- 
-IAccessible2::locale returns this struct.
-*/
-typedef struct IA2Locale {
-  BSTR language; ///< ISO 639-1 Alpha-2 two character language code
-  BSTR country;  ///< ISO 3166-1 Alpha-2 two character country code
-  BSTR variant;  ///< Application specific variant of the locale
-} IA2Locale;
-
-/** @brief This interface exposes the primary set of information about an
- IAccessible2 enabled accessible object.
-
- This interface must always be provided for objects that support some
- portion of the collection of the %IAccessible2 interfaces.
-
- Please refer to @ref _changingInterfaces "Changing between Accessible Interfaces"
- for special considerations related to use of the MSAA IAccessible interface and 
- the set of %IAccessible2 interfaces.
- */
-[object, uuid(E89F726E-C4F4-4c19-BB19-B647D7FA8478)]
-interface IAccessible2 : IAccessible
-{
-
-  /** @brief Returns the number of accessible relations for this object.
-   @param [out] nRelations
-   @retval S_OK
-  */
-  [propget] HRESULT nRelations
-    (
-     [out, retval] long *nRelations
-    );
-
-  /** @brief Returns one accessible relation for this object.
-   @param [in] relationIndex
-     0 based
-   @param [out] relation
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  [propget] HRESULT relation
-    (
-     [in] long relationIndex,
-     [out, retval] IAccessibleRelation **relation
-    );
-
-  /** @brief Returns multiple accessible relations for this object.
-   @param [in] maxRelations
-     maximum size of the array allocated by the client
-   @param [out] relations
-    The array of accessible relation objects.  Note that this array is to be
-	allocated by the client and freed when no longer needed.  Refer to @ref 
-	_arrayConsideration "Special Consideration when using Arrays" for more details.
-   @param [out] nRelations 
-    actual number of relations in the returned array (not more than maxRelations)
-   @retval S_OK
-   @retval S_FALSE if there are no relations, nRelations is set to 0
-   @note As a performant alternative, client code should consider using IAccessible2_2::relationTargetsOfType.
-  */
-  [propget] HRESULT relations
-    (
-     [in] long maxRelations, 
-     [out, size_is(maxRelations), length_is(*nRelations)]
-       IAccessibleRelation **relations, 
-     [out, retval] long *nRelations 
-    );
-
-  /** @brief Returns the role of an %IAccessible2 object.
-   @param [out] role
-    The role of an %IAccessible2 object.
-   @retval S_OK
-   @note 
-   @li For convenience MSAA roles are also passed through this method so the
-    AT doesn't have to also fetch roles through MSAA's get_accRole.
-   @li %IAccessible2 roles should not be passed through MSAA's get_accRole.
-   @li For compatibility with non IAccessible2 enabled ATs, IAccessible2 
-    applications should also add support to get_accRole to return the closest 
-	MSAA role or ROLE_SYSTEM_CLIENT (the MSAA defined default role) if there 
-	is not a good match.  
-   @li This method is missing a [propget] prefix in the IDL.  The result is the
-    method is named role in generated C++ code instead of get_role.
-  */
-  HRESULT role
-    (
-     [out, retval] long *role
-    );
-
-  /** @brief Makes an object visible on the screen.
-   @param [in] scrollType
-    Defines where the object should be placed on the screen.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  HRESULT scrollTo
-    (
-     [in] enum IA2ScrollType scrollType 
-    );
-
-  /** @brief Moves the top left of an object to a specified location.
-
-   @param [in] coordinateType
-    Specifies whether the coordinates are relative to the screen or the parent object.
-   @param [in] x
-    Defines the x coordinate.
-   @param [in] y
-    Defines the y coordinate.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  HRESULT scrollToPoint
-    (
-     [in] enum IA2CoordinateType coordinateType,
-	 [in] long x,
-	 [in] long y 
-    );
-
-  /** @brief Returns grouping information.
-   
-   Used for tree items, list items, tab panel labels, radio buttons, etc.
-   Also used for collections of non-text objects.
-
-   @param [out] groupLevel
-    1 based, 0 indicates that this value is not applicable
-   @param [out] similarItemsInGroup
-    1 based, 0 indicates that this value is not applicable
-   @param [out] positionInGroup
-    1 based, 0 indicates that this value is not applicable. This is an index
-    into the objects in the current group, not an index into all the objects
-    at the same group level.
-   @retval S_OK if at least one value is valid
-   @retval S_FALSE if no values are valid, [out] values are 0s
-   @note This method is meant to describe the nature of an object's containment
-    structure.  It's exposed by trees, tree grids, nested lists, nested menus,
-    but not headings, which uses the level object attribute.  It is also exposed
-    by radio buttons (with groupLevel == 0).
-   @note This is normally not implemented on a combo box to describe the nature
-    of its contents.  Normally an AT will get that information from its child list 
-    object.  However, in some cases when non-edit combo boxes are not able to be structured
-    such that the list is a child of the combo box, this method is implemented on
-    the combo box itself. ATs can use this interface if a child list is not found.
-	*/
-  [propget] HRESULT groupPosition
-    (
-     [out] long *groupLevel,
-     [out] long *similarItemsInGroup,
-     [out, retval] long *positionInGroup 
-    );
-
-  /** @brief Returns the bit strip containing any IAccessible2 states.
-  
-   The IAccessible2 states are in addition to the MSAA states and are defined in
-   the IA2States enum.
-
-   @param [out] states
-   @retval S_OK
-  */
-  [propget] HRESULT states
-    (
-	 [out, retval] AccessibleStates *states
-    );
-
-  /** @brief Returns the extended role.
-   
-   An extended role is a role which is dynamically generated by the application.
-   It is not predefined by the %IAccessible2 specification.
-   
-   @param [out] extendedRole
-   @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] value is NULL
-  */
-  [propget] HRESULT extendedRole
-    (
-	 [out, retval] BSTR *extendedRole
-    );
-
-  /** @brief Returns the localized extended role.
-   @param [out] localizedExtendedRole
-   @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] value is NULL
-  */
-  [propget] HRESULT localizedExtendedRole
-    (
-	 [out, retval] BSTR *localizedExtendedRole
-    );
-
-  /** @brief Returns the number of extended states.
-   @param [out] nExtendedStates
-   @retval S_OK
-  */
-  [propget] HRESULT nExtendedStates
-    (
-     [out, retval] long *nExtendedStates
-    );
-
-  /** @brief Returns the extended states (array of strings).
-
-   An extended state is a state which is dynamically generated by the application.
-   It is not predefined by the %IAccessible2 specification.
-
-   @param [in] maxExtendedStates
-    This parameter is ignored. Refer to @ref _arrayConsideration 
-	"Special Consideration when using Arrays" for more details.
-   @param [out] extendedStates
-    This array is allocated by the server.  The client must free it with CoTaskMemFree.
-   @param [out] nExtendedStates
-    The number of extended states returned; the size of the returned array.
-   @retval S_OK
-   @retval S_FALSE if there are no states, [out] values are NULL and 0 respectively
-  */
-  [propget] HRESULT extendedStates
-    (
-     [in] long maxExtendedStates,
-     [out, size_is(,maxExtendedStates), length_is(,*nExtendedStates)] BSTR **extendedStates,
-     [out, retval] long *nExtendedStates
-    );
-
-  /** @brief Returns the localized extended states (array of strings).
-
-   @param [in] maxLocalizedExtendedStates
-    This parameter is ignored. Refer to @ref _arrayConsideration 
-	"Special Consideration when using Arrays" for more details.
-   @param [out] localizedExtendedStates
-    This array is allocated by the server.  The client must free it with CoTaskMemFree. 
-   @param [out] nLocalizedExtendedStates
-    The number of localized extended states returned; the size of the returned array.
-   @retval S_OK
-   @retval S_FALSE if there are no states, [out] values are NULL and 0 respectively
-  */
-  [propget] HRESULT localizedExtendedStates
-    (
-     [in] long maxLocalizedExtendedStates,
-     [out, size_is(,maxLocalizedExtendedStates), length_is(,*nLocalizedExtendedStates)] BSTR **localizedExtendedStates,
-     [out, retval] long *nLocalizedExtendedStates
-    );
-
-  /** @brief Returns the unique ID.
-   
-   The uniqueID is an identifier for this object, is unique within the
-   current window, and remains the same for the lifetime of the accessible
-   object. 
-   
-   The uniqueID is not related to:
-   - the MSAA objectID which is used by the server to disambiguate between
-   IAccessibles per HWND or
-   - the MSAA childID which is used to disambiguate between children being
-   managed by an IAccessible.
-
-   This value is provided so the AT can have access to a unique runtime persistent 
-   identifier even when not handling an event for the object.
-   
-   An example of when this value is useful is if the AT wants to build a cache. 
-   The AT could cache the uniqueIDs in addition to other data being cached. 
-   When an event is fired the AT could map the uniqueID to its internal model.
-   Thus, if there's a REORDER/SHOW/HIDE event the AT knows which part of the 
-   internal structure has been invalidated and can refetch just that part.
-
-   This value can also be used by an AT to determine when the current control
-   has changed. If the role is the same for two controls that are adjacent in 
-   the tab order, this can be used to detect the new control.
-
-   Another use of this value by an AT is to identify when a grouping object has 
-   changed, e.g. when moving from a radio button in one group to a radio button in a 
-   different group.
-
-   One means of implementing this would be to create a factory with a 32 bit number 
-   generator and a reuse pool.  The number generator would emit numbers starting 
-   at 1.  Each time an object's life cycle ended, its number would be saved into a 
-   reuse pool.  The number generator would be used whenever the reuse pool was empty.
-
-   Another way to create a unique ID is to generate it from a pointer value, e.g. an
-   object's address. That would be unique because no two active objects can use the
-   same allocated memory space.
-
-   @param [out] uniqueID
-   @retval S_OK
-  */
-  [propget] HRESULT uniqueID
-    (
-     [out, retval] long *uniqueID
-    );
-
-  /** @brief Returns the window handle for the parent window which contains this object.
-
-   This is the same window handle which will be passed for any events that occur on the 
-   object, but is cached in the accessible object for use when it would be helpful to 
-   access the window handle in cases where an event isn't fired on this object.
-
-   A use case is when a screen reader is grabbing an entire web page on a page load. 
-   Without the availability of windowHandle, the AT would have to get the window handle
-   by using WindowFromAccessibleObject on each IAccessible, which is slow because it's 
-   implemented by oleacc.dll as a loop which crawls up the ancestor chain and looks for 
-   a ROLE_WINDOW object, mapping that back to a window handle.
-   
-   @param [out] windowHandle
-   @retval S_OK
-  */
-  [propget] HRESULT windowHandle
-    (
-     [out, retval] HWND *windowHandle
-    );
- 
-  /** @brief Returns the index of this object in its parent object.
-   @param [out] indexInParent
-     0 based; -1 indicates there is no parent; the upper bound is the value 
-	 returned by the parent's IAccessible::get_accChildCount.
-   @retval S_OK
-   @retval S_FALSE if no parent, [out] value is -1
-  */
-  [propget] HRESULT indexInParent
-    (
-     [out, retval] long *indexInParent
-    );
-
-  /** @brief Returns the IA2Locale of the accessible object. 
-   @param [out] locale
-   @retval S_OK
-  */
-  [propget] HRESULT locale
-    (
-     [out, retval] IA2Locale *locale
-    );
-
-  /** @brief Returns the attributes specific to this object, such as a cell's formula.
-   @param [out] attributes
-   @retval S_OK
-   @retval S_FALSE returned if there is nothing to return, [out] value is NULL
-  */
-  [propget] HRESULT attributes
-    (
-     [out, retval] BSTR *attributes
-    );
-
-}
-
-/*************************************************************************
- *
- *  File Name (Accessible2_2.idl)
- * 
- *  IAccessible2 IDL Specification 
- * 
- *  Copyright (c) 2007, 2013 Linux Foundation 
- *  Copyright (c) 2006 IBM Corporation 
- *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
- *  All rights reserved. 
- *   
- *   
- *  Redistribution and use in source and binary forms, with or without 
- *  modification, are permitted provided that the following conditions 
- *  are met: 
- *   
- *   1. Redistributions of source code must retain the above copyright 
- *      notice, this list of conditions and the following disclaimer. 
- *   
- *   2. Redistributions in binary form must reproduce the above 
- *      copyright notice, this list of conditions and the following 
- *      disclaimer in the documentation and/or other materials 
- *      provided with the distribution. 
- *
- *   3. Neither the name of the Linux Foundation nor the names of its 
- *      contributors may be used to endorse or promote products 
- *      derived from this software without specific prior written 
- *      permission. 
- *   
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
- *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
- *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
- *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
- *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- *   
- *  This BSD License conforms to the Open Source Initiative "Simplified 
- *  BSD License" as published at: 
- *  http://www.opensource.org/licenses/bsd-license.php 
- *   
- *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
- *  mark may be used in accordance with the Linux Foundation Trademark 
- *  Policy to indicate compliance with the IAccessible2 specification. 
- * 
- ************************************************************************/ 
-
-
-
-
-
-
-/** @brief This interface exposes the primary set of information about an
- IAccessible2 enabled accessible object.
-
- This interface must always be provided for objects that support some
- portion of the collection of the %IAccessible2 interfaces.
-
- Please refer to @ref _changingInterfaces "Changing between Accessible Interfaces"
- for special considerations related to use of the MSAA IAccessible interface and 
- the set of %IAccessible2 interfaces.
- */
-[object, uuid(6C9430E9-299D-4E6F-BD01-A82A1E88D3FF)]
-interface IAccessible2_2 : IAccessible2
-{
-  /** @brief Returns the attribute value of a specified attribute specific to this object.
-   @param [in] name
-   @param [out] attribute
-   @retval S_OK
-   @retval S_FALSE returned if there is nothing to return, [out] value is NULL.
-   @retval E_INVALIDARG if bad [in] passed.
-   @note The output value is a VARIANT.  Typically it will be a VT_BSTR, but there
-     are some cases where it will be a VT_I4 or VT_BOOL.  Refer to the <a href=
-     "http://www.linuxfoundation.org/collaborate/workgroups/accessibility/iaccessible2/objectattributesIAccessible2">
-     Object Attributes specification</a> for more information.
-  */
-  [propget] HRESULT attribute
-    (
-     [in] BSTR name,
-     [out, retval] VARIANT *attribute
-    );
-
-  /** @brief Returns the deepest hypertext accessible in the subtree of this object, and the caret offset within it.
-   @param [out] accessible
-   @param [out] caretOffset
-   @retval S_OK
-   @retval S_FALSE returned if there is no caret in any of the objects in the subtree, [out] accessible is NULL and [out] caretOffset is -1.
-  */
-  [propget] HRESULT accessibleWithCaret
-    (
-     [out] IUnknown **accessible,
-     [out, retval] long *caretOffset
-    );
-
-  /** @brief Returns relation targets for a specified target type.
-   @param [in] type
-    The requested @ref grpRelations "relation type".
-   @param [in] maxTargets
-    The number of targets requested.  0 indicates that all targets should be returned.
-   @param [out] targets
-    This array is allocated by the server.  The client must free it with CoTaskMemFree.
-   @param [out] nTargets
-    The number of targets returned; the size of the returned array.
-   @retval S_OK
-   @retval S_FALSE if there are no targets, [out] values are NULL and 0 respectively.
-   @retval E_INVALIDARG if bad [in] passed.
-  */
-  [propget] HRESULT relationTargetsOfType
-    (
-     [in] BSTR type,
-     [in] long maxTargets,
-     [out, size_is(,*nTargets)] IUnknown ***targets,
-     [out, retval] long *nTargets
-    );
-
-}
-
-/*************************************************************************
- *
- *  File Name (AccessibleComponent.idl)
- * 
- *  IAccessible2 IDL Specification 
- * 
- *  Copyright (c) 2007, 2010 Linux Foundation 
- *  Copyright (c) 2006 IBM Corporation 
- *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
- *  All rights reserved. 
- *   
- *   
- *  Redistribution and use in source and binary forms, with or without 
- *  modification, are permitted provided that the following conditions 
- *  are met: 
- *   
- *   1. Redistributions of source code must retain the above copyright 
- *      notice, this list of conditions and the following disclaimer. 
- *   
- *   2. Redistributions in binary form must reproduce the above 
- *      copyright notice, this list of conditions and the following 
- *      disclaimer in the documentation and/or other materials 
- *      provided with the distribution. 
- *
- *   3. Neither the name of the Linux Foundation nor the names of its 
- *      contributors may be used to endorse or promote products 
- *      derived from this software without specific prior written 
- *      permission. 
- *   
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
- *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
- *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
- *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
- *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- *   
- *  This BSD License conforms to the Open Source Initiative "Simplified 
- *  BSD License" as published at: 
- *  http://www.opensource.org/licenses/bsd-license.php 
- *   
- *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
- *  mark may be used in accordance with the Linux Foundation Trademark 
- *  Policy to indicate compliance with the IAccessible2 specification. 
- * 
- ************************************************************************/ 
-
-
-
-
-
-/** A value specifying a color in ARGB format, where each 8 bit color component
-specifies alpha, red, green, and blue respectively.  The alpha value is optional.
-*/
-typedef long IA2Color;
-
-/** @brief This interface is implemented by any object that can be rendered 
- on the screen.
-
- This interface provides the standard mechanism for an assistive technology
-  to retrieve information concerning the graphical representation of an object. 
-  Coordinates used by the functions of this interface are specified in
-  different coordinate systems.  Their scale is the same and is equal to
-  that of the screen coordinate system.  In other words all coordinates
-  are measured in pixels.  They differ in their respective origin:
-  <ul>
-   <li>The screen coordinate system has its origin in the upper left
-    corner of the current screen.</li>
-   <li>The origin of the parent coordinate system is the upper left corner
-    of the parent's bounding box.  With no parent the screen coordinate
-    system is used instead.</li>
-  </ul>
-*/
-[object, uuid(1546D4B0-4C98-4bda-89AE-9A64748BDDE4)]
-interface IAccessibleComponent : IUnknown
-{
-
-  /** @brief Returns the location of the upper left corner of the object's
-    bounding box relative to the immediate parent object.
-	
-	The coordinates of the bounding box are given relative to the parent's 
-	coordinate system. The coordinates of the returned position are relative 
-	to this object's parent or relative to the screen on which this object
-    is rendered if it has no parent. If the object is not on any screen
-    the returned position is (0,0).
-   
-   @param [out] x
-   @param [out] y
-   @retval S_OK
-  */
-  [propget] HRESULT locationInParent
-    (
-	 [out] long *x,
-     [out, retval] long *y
-    );
-
-  /** @brief Returns the foreground color of this object.
-   @param [out] foreground
-    The returned color is the foreground color of this object or, if
-    that is not supported, the default foreground color.
-   @retval S_OK
-  */ 
-  [propget] HRESULT foreground
-    (
-     [out, retval] IA2Color *foreground
-    );
-
-   /** @brief Returns the background color of this object.
-    @param [out] background
-     The returned color is the background color of this object or, if
-     that is not supported, the default background color.
-    @retval S_OK
-   */ 
-  [propget] HRESULT background
-    (
-     [out, retval] IA2Color *background
-    );
-}
-/*************************************************************************
- *
- *  File Name (AccessibleValue.idl)
- * 
- *  IAccessible2 IDL Specification 
- * 
- *  Copyright (c) 2007, 2010 Linux Foundation 
- *  Copyright (c) 2006 IBM Corporation 
- *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
- *  All rights reserved. 
- *   
- *   
- *  Redistribution and use in source and binary forms, with or without 
- *  modification, are permitted provided that the following conditions 
- *  are met: 
- *   
- *   1. Redistributions of source code must retain the above copyright 
- *      notice, this list of conditions and the following disclaimer. 
- *   
- *   2. Redistributions in binary form must reproduce the above 
- *      copyright notice, this list of conditions and the following 
- *      disclaimer in the documentation and/or other materials 
- *      provided with the distribution. 
- *
- *   3. Neither the name of the Linux Foundation nor the names of its 
- *      contributors may be used to endorse or promote products 
- *      derived from this software without specific prior written 
- *      permission. 
- *   
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
- *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
- *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
- *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
- *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- *   
- *  This BSD License conforms to the Open Source Initiative "Simplified 
- *  BSD License" as published at: 
- *  http://www.opensource.org/licenses/bsd-license.php 
- *   
- *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
- *  mark may be used in accordance with the Linux Foundation Trademark 
- *  Policy to indicate compliance with the IAccessible2 specification. 
- * 
- ************************************************************************/ 
-
-
-
-
-
-/** @brief This interface gives access to a single numerical value.
-
- The %IAccessibleValue interface represents a single numerical value and should 
-  be implemented by any class that supports numerical value like progress bars 
-  and spin boxes.  This interface lets you access the value and its upper and 
-  lower bounds.
-*/
-[object, uuid(35855B5B-C566-4fd0-A7B1-E65465600394)]
-interface IAccessibleValue : IUnknown
-{
-
-  /** @brief Returns the value of this object as a number.
-        
-   The exact return type is implementation dependent.  Typical types are long and 
-    double.
-   @param [out] currentValue
-    Returns the current value represented by this object.  See the section about 
-	@ref _variants "VARIANTs" for additional information.
-   @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] value is a VARIANT with vt = VT_EMPTY
-  */
-  [propget] HRESULT currentValue
-    (
-     [out, retval] VARIANT *currentValue
-    );
-
-  /** @brief Sets the value of this object to the given number.
-        
-   The argument is clipped to the valid interval whose upper and lower 
-    bounds are returned by the methods IAccessibleValue::maximumValue and 
-	IAccessibleValue::minimumValue, i.e. if it is 	lower than the minimum 
-	value the new value will be the minimum and if it is greater than the 
-	maximum then the new value will be the maximum.
-
-   @param [in] value
-    The new value represented by this object.  The set of admissible types for 
-    this argument is implementation dependent.
-   @retval S_OK
-  */
-  HRESULT setCurrentValue
-    (
-     [in] VARIANT value
-    );
-
-  /** @brief Returns the maximal value that can be represented by this object.
-        
-   The type of the returned value is implementation dependent.  It does not have 
-    to be the same type as that returned by method IAccessibleValue::currentValue.
-
-   @param [out] maximumValue
-    Returns the maximal value in an implementation dependent type. If this object 
-    has no upper bound then an empty object is returned.  See the section about 
-	@ref _variants "VARIANTs" for additional information.
-   @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] value is a VARIANT with vt = VT_EMPTY
-  */
-  [propget] HRESULT maximumValue
-    (
-     [out, retval] VARIANT *maximumValue
-    );
-
-  /** @brief Returns the minimal value that can be represented by this object.
-        
-   The type of the returned value is implementation dependent.  It does not have 
-    to be the same type as that returned by method IAccessibleValue::currentValue.
-   
-   @param [out] minimumValue
-    Returns the minimal value in an implementation dependent type. If this object 
-    has no lower bound then an empty object is returned.  See the section about 
-	@ref _variants "VARIANTs" for additional information.
-   @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] value is a VARIANT with vt = VT_EMPTY
-  */
-  [propget] HRESULT minimumValue
-    (
-     [out, retval] VARIANT *minimumValue
-    );
-
-};
-/*************************************************************************
- *
- *  File Name (AccessibleText.idl)
- * 
- *  IAccessible2 IDL Specification 
- * 
- *  Copyright (c) 2007, 2013 Linux Foundation 
- *  Copyright (c) 2006 IBM Corporation 
- *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
- *  All rights reserved. 
- *   
- *   
- *  Redistribution and use in source and binary forms, with or without 
- *  modification, are permitted provided that the following conditions 
- *  are met: 
- *   
- *   1. Redistributions of source code must retain the above copyright 
- *      notice, this list of conditions and the following disclaimer. 
- *   
- *   2. Redistributions in binary form must reproduce the above 
- *      copyright notice, this list of conditions and the following 
- *      disclaimer in the documentation and/or other materials 
- *      provided with the distribution. 
- *
- *   3. Neither the name of the Linux Foundation nor the names of its 
- *      contributors may be used to endorse or promote products 
- *      derived from this software without specific prior written 
- *      permission. 
- *   
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
- *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
- *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
- *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
- *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- *   
- *  This BSD License conforms to the Open Source Initiative "Simplified 
- *  BSD License" as published at: 
- *  http://www.opensource.org/licenses/bsd-license.php 
- *   
- *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
- *  mark may be used in accordance with the Linux Foundation Trademark 
- *  Policy to indicate compliance with the IAccessible2 specification. 
- * 
- ************************************************************************/ 
-
-
-
-
-
-
-/** A structure containing a substring and the start and end offsets in the enclosing string.
- 
- IAccessibleText::newText and IAccessibleText::oldText return this struct.
-*/
-typedef struct IA2TextSegment {
-  BSTR text;	///< A copy of a segment of text taken from an enclosing paragraph.
-  long start;	///< Index of the first character of the segment in the enclosing text.  
-  long end;		///< Index of the character following the last character of the segment in the enclosing text. 
-} IA2TextSegment;
-
-/** This enum defines values which specify a text boundary type.
-
- IA2_TEXT_BOUNDARY_SENTENCE is optional.  When a method doesn't implement this 
- method it must return S_FALSE.  Typically this feature would not be implemented
- by an application.  However, if the application developer was not satisfied with
- how screen readers have handled the reading of sentences this boundary type
- could be implemented and screen readers could use the application's version of a 
- sentence rather than the screen reader's.
-
- The rest of the boundary types must be supported.
-
- This enum is used in IAccessibleText::textBeforeOffset, IAccessibleText::textAtOffset,
- and IAccessibleText::textAfterOffset.
-*/
-
-enum IA2TextBoundaryType {
-  IA2_TEXT_BOUNDARY_CHAR,       /**< Typically, a single character is returned.  In some cases more than
-                                 one character is returned, for example, when a document contains field
-                                 data such as a field containing a date, time, or footnote reference.
-                                 In this case the caret can move over several characters in one movement
-                                 of the caret.  Note that after the caret moves, the caret offset changes
-                                 by the number of characters in the field, e.g. by 8 characters in the 
-                                 following date: 03/26/07. */
-  IA2_TEXT_BOUNDARY_WORD,       /**< The range provided matches the range observed when the application
-                                 processes the Ctrl + left arrow and Ctrl + right arrow key sequences.
-                                 Typically this is from the start of one word to the start of the next, but
-                                 various applications are inconsistent in the handling of the end of a line. */
-  IA2_TEXT_BOUNDARY_SENTENCE,   ///< Range is from start of one sentence to the start of another sentence.
-  IA2_TEXT_BOUNDARY_PARAGRAPH,  ///< Range is from start of one paragraph to the start of another paragraph.
-  IA2_TEXT_BOUNDARY_LINE,       /**< Range is from start of one line to the start of another line. This
-                                 often means that an end-of-line character will appear at the end of the
-                                 range. However in the case of some applications an end-of-line character
-                                 indicates the end of a paragraph and the lines composing the paragraph,
-                                 other than the last line, do not contain an end of line character. */
-  IA2_TEXT_BOUNDARY_ALL         ///< Using this value will cause all text to be returned.
-};
-
-/** @brief This interface gives read-only access to text.
-
- The %IAccessibleText interface should be implemented by all components 
-  that present textual information on the display like  buttons, 
-  text entry fields, or text portions of the document window.  The interface 
-  provides access to the text's content, attributes, and spatial location.  
-  However, text can not be modified with this interface.  That is the task 
-  of the IAccessibleEditableText interface.
-        
- The text length, i.e. the number of characters in the text, is
-  returned by IAccessibleText::nCharacters. All methods that operate 
-  on particular characters (e.g. IAccessibleText::textAtOffset) use character 
-  indices from 0 to length-1. All methods that operate on character positions 
-  (e.g. IAccessibleText::text) use indices from 0 to length.
-
- Please note that accessible text does not necessarily support selection.  
-  In this case it should behave as if there where no selection.  An empty 
-  selection is used for example to express the current cursor position.
-
- Refer to @ref _specialOffsets 
-  "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods" 
-  for information about special offsets that can be used in %IAccessibleText methods.
-
- E_FAIL is returned in the following cases
- @li endOffset < startOffset
- @li endoffset > length
-*/
-[object, uuid(24FD2FFB-3AAD-4a08-8335-A3AD89C0FB4B)]
-interface IAccessibleText : IUnknown
-{
-
-  /** @brief Adds a text selection
-   @param [in] startOffset
-    Starting offset ( 0 based).
-   @param [in] endOffset
-    Offset of first character after new selection (0 based).
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-   @note  Refer to @ref _specialOffsets 
-    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods" 
-    for information about special offsets that can be used in %IAccessibleText methods.
-  */
-  HRESULT addSelection
-    (
-     [in] long startOffset,
-     [in] long endOffset
-    );
-
-  /** @brief Returns text attributes.
-   @param [in] offset
-    Text offset (0 based).  Refer to @ref _specialOffsets 
-    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods" 
-    for information about special offsets that can be used in %IAccessibleText methods.
-   @param [out] startOffset    
-    The starting offset of the character range over which all text attributes match 
-    those of offset. (0 based)
-   @param [out] endOffset    
-    The offset of the first character past the character range over which all text 
-    attributes match those of offset. (0 based)
-   @param [out] textAttributes  
-    A string of attributes describing the text.  The attributes are described in the
-    <a href="http://www.linuxfoundation.org/en/Accessibility/IAccessible2/TextAttributes">
-    text attributes specification</a> on the %IAccessible2 web site.
-   @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] values are 0s and NULL respectively 
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  [propget] HRESULT attributes
-    (
-     [in] long offset,	
-     [out] long *startOffset,
-     [out] long *endOffset,	
-     [out, retval] BSTR *textAttributes
-    );
-
-  /** @brief Returns the position of the caret.
-
-   Returns the 0-based offset of the caret within the text.  If the text is 
-   implemented as a tree of text objects with embed characters in higher levels
-   representing substrings of child text objects and the caret is in one of the 
-   child text objects, then the offset in the higher level text object would be
-   at the embed character representing child text object that contains the caret.
-
-   For example, if the string "one two three" is implemented as a two text objects,
-   with a top level text object containing an embed character "one ? three" and a
-   child text object containing "two" and if the caret is in the descendant object
-   just before the 'o' in "two", then:
-   <ul>
-   <li>the caretOffset for the "one ? three" object would be 4, matching the embed character</li>
-   <li>the caretOffset for "two" would be 2, matching the "o"</li>
-   </ul>
-   The caret position/offset is that of the character logically following it, e.g.
-   to the right of it in a left to right language, or to the left of it in a right
-   to left language.
-   @param [out] offset
-    The returned offset is relative to the text represented by this object.
-   @retval S_OK
-   @retval S_FALSE if the caret is not currently active on this object, i.e. the
-    caret is located on some other object.  The returned offset value will be -1.
-   @note S_FALSE (and an offset of -1) will not be returned if the caret is somewhere
-   in the text object or one of its descendants. 
-  */
-  [propget] HRESULT caretOffset
-    (
-     [out, retval] long *offset
-    );
-
-
-  /** @brief Returns the bounding box of the specified position.
-        
-   The virtual character after the last character of the represented
-    text, i.e. the one at position length is a special case. It represents the 
-    current input position and will therefore typically be queried by AT more 
-    often than other positions.  Because it does not represent an existing character 
-    its bounding box is defined in relation to preceding characters.  It should be 
-    roughly equivalent to the bounding box of some character when inserted at the 
-    end of the text.  Its height typically being the maximal height of all the
-    characters in the text or the height of the preceding character, its width being 
-    at least one pixel so that the bounding box is not degenerate.
-
-   Note that the index 'length' is not always valid.  Whether it is or not is 
-    implementation dependent.  It typically is when text is editable or otherwise 
-    when on the screen the caret can be placed behind the text.  You can be sure 
-    that the index is valid after you have received a ::IA2_EVENT_TEXT_CARET_MOVED
-    event for this index.
-   @param [in] offset
-    Index of the character for which to return its bounding box. The valid range 
-    is 0..length.  Refer to @ref _specialOffsets 
-    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods" 
-    for information about special offsets that can be used in %IAccessibleText methods.
-   @param [in] coordType
-    Specifies if the coordinates are relative to the screen or to the parent window.
-   @param [out] x
-    X coordinate of the top left corner of the bounding box of the referenced character. 
-   @param [out] y
-    Y coordinate of the top left corner of the bounding box of the referenced character. 
-   @param [out] width
-    Width of the bounding box of the referenced character. 
-   @param [out] height
-    Height of the bounding box of the referenced character. 
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  [propget] HRESULT characterExtents
-    (
-     [in] long offset,
-     [in] enum IA2CoordinateType coordType,
-     [out] long *x,
-     [out] long *y,
-     [out] long *width,
-     [out, retval] long *height
-    );
-
-
-  /** @brief Returns the number of active non-contiguous selections
-   @param [out] nSelections
-   @retval S_OK
-  */
-  [propget] HRESULT nSelections
-    (
-     [out, retval] long *nSelections
-    );
-
-  /** @brief Returns the text position for the specified screen position.
-    
-   Given a point return the zero-based index of the character under that
-   point.  The same functionality could be achieved by using the bounding
-   boxes for each character as returned by IAccessibleText::characterExtents.
-   The method IAccessibleText::offsetAtPoint, however, can be implemented 
-   more efficiently.
-            
-   @param [in] x
-    The position's x value for which to look up the index of the character that
-    is rendered on to the display at that point.
-   @param [in] y
-    The position's y value for which to look up the index of the character that
-    is rendered on to the display at that point.            
-   @param [in] coordType
-    Screen coordinates or window coordinates.
-   @param [out] offset
-    Index of the character under the given point or -1 if the point
-    is invalid or there is no character under the point.
-   @retval S_OK
-   @retval S_FALSE if nothing to return, [out] value is -1
-
-   @retval E_INVALIDARG if bad [in] passed
-    */
-  [propget] HRESULT offsetAtPoint
-    (
-     [in] long x,
-     [in] long y,
-     [in] enum IA2CoordinateType coordType,
-     [out, retval] long *offset
-    );
-
-  /** @brief Returns the character offsets of Nth active text selection
-
-   Returns the 0-based starting and ending offsets of the Nth selection.  If the
-   text is implemented as a tree of text objects with embed characters in higher
-   levels representing substrings of child text objects, consider the following.
-   If the starting selection offset is in one of the child text objects, then the
-   starting offset in the higher level text object would be at the embed character
-   representing the child text object that contains the starting selection offset.
-   If the ending selection offset is in one of the child text objects, then the
-   ending offset in the higher level text object would be just after the embed
-   character representing the child text object that contains the ending selection
-   offset.
-
-   For example, if the string "one two three" is implemented as a two text objects,
-   with a top level text object containing an embed character "one ? three" and a
-   child text object containing "two" and if the selection is the string "two" then:
-   <ul>
-   <li>the startOffset for the "one ? three" object would be 4, matching the embed character and the endOffset would be 5.</li>
-   <li>the startOffset for the "two" object would be 0, and the endOffset would be 3</li>
-   </ul>
-   Selection offsets are that of the character logically following it, e.g.
-   to the right of it in a left to right language or to the left of it in a right to left language.
-   @param [in] selectionIndex
-    Index of selection (0 based).
-   @param [out] startOffset
-    0 based offset of first selected character
-   @param [out] endOffset
-    0 based offset of one past the last selected character.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  [propget] HRESULT selection
-    (
-     [in] long selectionIndex,
-     [out] long *startOffset,
-     [out, retval] long *endOffset
-    );
-
-  /** @brief Returns the substring between the two given indices.
-
-   The substring starts with the character at startOffset (inclusive) and up to 
-    the character at endOffset (exclusive), if startOffset is less or equal 
-    endOffset.  If endOffset is lower than startOffset, the result is the same 
-    as a call with the two arguments being exchanged.
-
-   The whole text can be requested by passing the indices zero and 
-    IAccessibleText::nCharacters. If both indices have the same value, an empty 
-    string is returned.
-   @param [in] startOffset
-    Index of the first character to include in the returned string. The valid range 
-    is 0..length.
-   @param [in] endOffset
-    Index of the last character to exclude in the returned string. The valid range 
-    is 0..length.
-   @param [out] text
-    Returns the substring starting with the character at startOffset (inclusive) 
-    and up to the character at endOffset (exclusive), if startOffset is less than 
-    or equal to endOffset.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-   @note
-   @li The returned string may be longer than endOffset-startOffset bytes if text 
-    contains multi-byte characters.
-   @li Refer to @ref _specialOffsets 
-    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods" 
-    for information about special offsets that can be used in %IAccessibleText methods.
-  */
-  [propget] HRESULT text
-    (
-     [in] long startOffset,
-     [in] long endOffset,
-     [out, retval] BSTR *text
-    );
-
-  /** @brief Returns a text portion before the given position.
-    
-   Returns the substring of the specified text type that is located before the 
-    given character and does not include it. The result of this method should be 
-    same as a result for IAccessibleText::textAtOffset with a suitably decreased 
-    index value.
-
-   For example, if text type is ::IA2_TEXT_BOUNDARY_WORD, then the complete 
-    word that is closest to and located before offset is returned.
-
-   If the index is valid, but no text is found, S_FALSE is returned along with out
-    values of 0, 0, and a NULL pointer.  This would happen for boundary types other
-    than character when the text consists entirely of whitespace.
-
-   @param [in] offset
-    Index of the character for which to return the text part before it.  The index 
-    character will not be part of the returned string. The valid range is 0..length.
-    Refer to @ref _specialOffsets 
-    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods" 
-    for information about special offsets that can be used in %IAccessibleText methods.
-   @param [in] boundaryType
-    The type of the text portion to return.  See ::IA2TextBoundaryType for the 
-    complete list.
-   @param [out] startOffset
-    0 based offset of first character.
-   @param [out] endOffset
-    0 based offset of one past the last character.
-   @param [out] text
-    Returns the requested text portion.  This portion may be empty or invalid when 
-    no appropriate text portion is found or text type is invalid.
-   @retval S_OK
-   @retval S_FALSE if the requested boundary type is not implemented, such as 
-    ::IA2_TEXT_BOUNDARY_SENTENCE, or if there is nothing to return; 
-    [out] values are 0s and NULL respectively 
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  [propget] HRESULT textBeforeOffset
-    (
-     [in] long offset,
-     [in] enum IA2TextBoundaryType boundaryType,
-     [out] long *startOffset,
-     [out] long *endOffset,
-     [out, retval] BSTR *text
-    );
-
-  /** @brief Returns a text portion after the given position.
-    
-   Returns the substring of the specified text type that is located after the 
-    given character and does not include it. The result of this method should be 
-    same as a result for IAccessibleText::textAtOffset with a suitably increased 
-    index value.
-
-   For example, if text type is ::IA2_TEXT_BOUNDARY_WORD, then the complete 
-    word that is closest to and located after offset is returned.
-
-   If the index is valid, but no text is found, S_FALSE is returned along with out
-    values of 0, 0, and a NULL pointer.  This would happen for boundary types other
-    than character when the text consists entirely of whitespace.
-
-   @param [in] offset
-    Index of the character for which to return the text part after it.  The index 
-    character will not be part of the returned string. The valid range is 0..length.
-    Refer to @ref _specialOffsets 
-    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods" 
-    for information about special offsets that can be used in %IAccessibleText methods.
-   @param [in] boundaryType
-    The type of the text portion to return.  See ::IA2TextBoundaryType for the complete 
-    list.
-   @param [out] startOffset
-    0 based offset of first character.
-   @param [out] endOffset
-    0 based offset of one past the last character.
-   @param [out] text
-    Returns the requested text portion.  This portion may be empty or invalid when 
-    no appropriate text portion is found or text type is invalid.
-   @retval S_OK
-   @retval S_FALSE if the requested boundary type is not implemented, such as 
-    ::IA2_TEXT_BOUNDARY_SENTENCE, or if there is nothing to return; 
-    [out] values are 0s and NULL respectively 
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  [propget] HRESULT textAfterOffset
-    (
-     [in] long offset,
-     [in] enum IA2TextBoundaryType boundaryType,
-     [out] long *startOffset,
-     [out] long *endOffset,
-     [out, retval] BSTR *text
-    );
-
-  /** @brief Returns a text portion that spans the given position.
-
-   Returns the substring defined by the specified boundary type at the specified
-    offset.  Refer to IA2TextBoundaryType for more details.
-
-   For the word boundary type the returned string will contain the word at the
-    offset if the offset is inside a word and will contain the word before the
-    offset if the offset is not inside a word.  All offsets from the first to the
-    last characters of a word are considered inside the word.  Boundary types of
-    sentence and paragraph should exhibit similar behavior.
-
-   If the index is valid, but no text is found, S_FALSE is returned along with out
-    values of 0, 0, and a NULL pointer.  This would happen for boundary types other
-    than character when the text consists entirely of whitespace.
-
-   @param [in] offset
-    Index of the character for which to return the text part it belongs to.  The valid
-    range is 0..length.
-    Refer to @ref _specialOffsets 
-    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods" 
-    for information about special offsets that can be used in %IAccessibleText methods.
-   @param [in] boundaryType
-    The type of the text portion to return.  See ::IA2TextBoundaryType for the complete 
-    list.
-   @param [out] startOffset
-    0 based offset of first character.
-   @param [out] endOffset
-    0 based offset of one past the last character.
-   @param [out] text
-    Returns the requested text portion.  This portion may be empty or invalid when 
-    no appropriate text portion is found or text type is invalid.
-   @retval S_OK
-   @retval S_FALSE if the requested boundary type is not implemented, such as 
-    ::IA2_TEXT_BOUNDARY_SENTENCE, or if there is nothing to return; 
-    [out] values are 0s and NULL respectively 
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  [propget] HRESULT textAtOffset
-    (
-     [in] long offset,
-     [in] enum IA2TextBoundaryType boundaryType,
-     [out] long *startOffset,
-     [out] long *endOffset,
-     [out, retval] BSTR *text
-    );
-
-  /** @brief Unselects a range of text.
-   @param [in] selectionIndex
-    Index of selection to remove (0 based).
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  HRESULT removeSelection
-    (
-     [in] long selectionIndex
-    );
-
-  /** @brief Sets the position of the caret.
-
-   The caret position/offset is that of the character logically following it,
-   e.g. to the right of it in a left to right language.
-
-   Setting the caret position may or may not alter the current selection.  A 
-    change of the selection is notified to the accessibility event listeners with 
-    an ::IA2_EVENT_TEXT_SELECTION_CHANGED event.
-
-   When the new caret position differs from the old one (which, of course, is the 
-    standard case) this is notified to the accessibility event listeners with an
-    ::IA2_EVENT_TEXT_CARET_MOVED event.
-   @param [in] offset
-    The new index of the caret.  This caret is actually placed to the left side of 
-    the character with that index.  An index of 0 places the caret so that the next 
-    insertion goes before the first character.  An index of IAccessibleText::nCharacters 
-    leads to insertion after the last character.  Refer to @ref _specialOffsets 
-    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods" 
-    for information about special offsets that can be used in %IAccessibleText methods.
-   @retval S_OK
-   @retval E_FAIL if the caret cannot be set
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  HRESULT setCaretOffset
-    (
-     [in] long offset
-    );
-
-  /** @brief Changes the bounds of an existing selection.
-   @param [in] selectionIndex
-    Index of selection to change (0 based)
-   @param [in] startOffset
-    New starting offset (0 based)
-   @param [in] endOffset
-    New ending offset (0 based) - the offset of the character just past the last character of the selection.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-   @note Refer to @ref _specialOffsets 
-    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods" 
-    for information about special offsets that can be used in %IAccessibleText methods.
-  */
-  HRESULT setSelection
-    (
-     [in] long selectionIndex,
-     [in] long startOffset,
-     [in] long endOffset
-    );
-
-  /** @brief Returns total number of characters.
-
-   Note that this may be different than the total number of bytes required to store the 
-    text, if the text contains multi-byte characters.
-   @param [out] nCharacters
-   @retval S_OK
-  */
-  [propget] HRESULT nCharacters
-    (
-     [out, retval] long *nCharacters
-    );
-
-  /** @brief Makes a specific part of string visible on screen.
-   @param [in] startIndex
-    0 based character offset.
-   @param [in] endIndex
-    0 based character offset - the offset of the character just past the last character of the string.
-   @param [in] scrollType
-    Defines where the object should be placed on the screen.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-   @note Refer to @ref _specialOffsets 
-    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods" 
-    for information about special offsets that can be used in %IAccessibleText methods.
-  */
-  HRESULT scrollSubstringTo
-    (
-     [in] long startIndex,
-     [in] long endIndex,
-     [in] enum IA2ScrollType scrollType
-    );
-
-  /** @brief Moves the top left of a substring to a specified location.
-
-   @param [in] startIndex
-    0 based character offset.
-   @param [in] endIndex
-    0 based character offset - the offset of the character just past the last character of the string.
-   @param [in] coordinateType
-    Specifies whether the coordinates are relative to the screen or the parent object.
-   @param [in] x
-    Defines the x coordinate.
-   @param [in] y
-    Defines the y coordinate.
-   @retval S_OK
-   @retval S_FALSE if the object is already at the specified location.
-   @retval E_INVALIDARG if bad [in] passed
-   @note Refer to @ref _specialOffsets 
-    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods" 
-    for information about special offsets that can be used in %IAccessibleText methods.
-  */
-  HRESULT scrollSubstringToPoint
-    (
-     [in] long startIndex,
-     [in] long endIndex,
-     [in] enum IA2CoordinateType coordinateType,
-     [in] long x,
-     [in] long y 
-    );
-
-  /** @brief Returns any inserted text.
-
-   Provided for use by the ::IA2_EVENT_TEXT_INSERTED and ::IA2_EVENT_TEXT_UPDATED 
-    event handlers.
-
-   This data is only guaranteed to be valid while the thread notifying the event 
-   continues. Once the handler has returned, the validity of the data depends on 
-   how the server manages the life cycle of its objects. Also, note that the server 
-   may have different life cycle management strategies for controls depending on 
-   whether or not a control manages its children. Lists, trees, and tables can have 
-   a large number of children and thus it's possible that the child objects for those 
-   controls would only be created as needed. Servers should document their life cycle 
-   strategy as this will be of interest to assistive technology or script engines 
-   accessing data out of process or from other threads. Servers only need to save the 
-   last inserted block of text and a scope of the entire application is adequate.
-
-   @param [out] newText
-    The text that was just inserted.
-   @retval S_OK
-   @retval S_FALSE If there is nothing to return, the values of IA2TextSegment
-    struct are set as follows:  text = NULL, start = 0, end = 0.
-
-  */
-  [propget] HRESULT newText
-    (
-     [out, retval] IA2TextSegment *newText
-    );
-
-  /** @brief Returns any removed text.
-
-   Provided for use by the IA2_EVENT_TEXT_REMOVED/UPDATED event handlers.
-   
-   This data is only guaranteed to be valid while the thread notifying the event 
-   continues. Once the handler has returned, the validity of the data depends on 
-   how the server manages the life cycle of its objects. Also, note that the server 
-   may have different life cycle management strategies for controls depending on 
-   whether or not a control manages its children. Lists, trees, and tables can have 
-   a large number of children and thus it's possible that the child objects for those 
-   controls would only be created as needed. Servers should document their life cycle 
-   strategy as this will be of interest to assistive technology or script engines 
-   accessing data out of process or from other threads. Servers only need to save the 
-   last removed block of text and a scope of the entire application is adequate.
-
-   @param [out] oldText
-    The text that was just removed.
-   @retval S_OK
-   @retval S_FALSE If there is nothing to return, the values of IA2TextSegment
-    struct are set as follows:  text = NULL, start = 0, end = 0.
-  */
-  [propget] HRESULT oldText
-    (
-     [out, retval] IA2TextSegment *oldText
-    );
-
-}
-/*************************************************************************
- *
- *  File Name (AccessibleText2.idl)
- * 
- *  IAccessible2 IDL Specification 
- * 
- *  Copyright (c) 2007, 2013 Linux Foundation 
- *  Copyright (c) 2006 IBM Corporation 
- *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
- *  All rights reserved. 
- *   
- *   
- *  Redistribution and use in source and binary forms, with or without 
- *  modification, are permitted provided that the following conditions 
- *  are met: 
- *   
- *   1. Redistributions of source code must retain the above copyright 
- *      notice, this list of conditions and the following disclaimer. 
- *   
- *   2. Redistributions in binary form must reproduce the above 
- *      copyright notice, this list of conditions and the following 
- *      disclaimer in the documentation and/or other materials 
- *      provided with the distribution. 
- *
- *   3. Neither the name of the Linux Foundation nor the names of its 
- *      contributors may be used to endorse or promote products 
- *      derived from this software without specific prior written 
- *      permission. 
- *   
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
- *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
- *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
- *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
- *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- *   
- *  This BSD License conforms to the Open Source Initiative "Simplified 
- *  BSD License" as published at: 
- *  http://www.opensource.org/licenses/bsd-license.php 
- *   
- *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
- *  mark may be used in accordance with the Linux Foundation Trademark 
- *  Policy to indicate compliance with the IAccessible2 specification. 
- * 
- ************************************************************************/ 
-
-
-
-
-
-
-
-/** @brief This interface gives read-only access to text.
-
- The %IAccessibleText2 interface extends the functionality of the
- %IAccessibleText interface.
-*/
-[object, uuid(9690A9CC-5C80-4DF5-852E-2D5AE4189A54)]
-interface IAccessibleText2 : IAccessibleText
-{
-
-  /** @brief Returns the range and of the specified set of attributes.
-
-   Return the range (start and end offsets) and text attributes that correspond
-    to the given attributes filter at the given offset.
-
-   @param [in] offset
-    The offset at which to search for the attributes specified in the filter.
-   @param [in] filter
-    The requested attribute names.  The filter format is "attribute1, attribute2".
-   @param [out] startOffset
-    The starting (0-based) offset of the text containing the specified attributes.
-   @param [out] endOffset
-    The (0-based) offset one past the last character of the text containing the
-    specified attributes.
-   @param [out] attributeValues
-    The values of the requested attributes.
-   @retval S_OK
-   @retval S_FALSE if nothing to return, [out] values are -1, -1, NULL respectively.
-   @retval E_INVALIDARG if bad [in] passed.
-   */
-  [propget] HRESULT attributeRange
-    (
-     [in] long offset,
-     [in] BSTR filter,
-     [out] long *startOffset,
-     [out] long *endOffset,	
-     [out, retval] BSTR *attributeValues
-    );
-
-}
-/*************************************************************************
- *
- *  File Name (AccessibleEditableText.idl)
- * 
- *  IAccessible2 IDL Specification 
- * 
- *  Copyright (c) 2007, 2012 Linux Foundation 
- *  Copyright (c) 2006 IBM Corporation 
- *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
- *  All rights reserved. 
- *   
- *   
- *  Redistribution and use in source and binary forms, with or without 
- *  modification, are permitted provided that the following conditions 
- *  are met: 
- *   
- *   1. Redistributions of source code must retain the above copyright 
- *      notice, this list of conditions and the following disclaimer. 
- *   
- *   2. Redistributions in binary form must reproduce the above 
- *      copyright notice, this list of conditions and the following 
- *      disclaimer in the documentation and/or other materials 
- *      provided with the distribution. 
- *
- *   3. Neither the name of the Linux Foundation nor the names of its 
- *      contributors may be used to endorse or promote products 
- *      derived from this software without specific prior written 
- *      permission. 
- *   
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
- *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
- *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
- *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
- *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- *   
- *  This BSD License conforms to the Open Source Initiative "Simplified 
- *  BSD License" as published at: 
- *  http://www.opensource.org/licenses/bsd-license.php 
- *   
- *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
- *  mark may be used in accordance with the Linux Foundation Trademark 
- *  Policy to indicate compliance with the IAccessible2 specification. 
- * 
- ************************************************************************/ 
-
-
-
-
-
-
-/** @brief This interface provides clipboard capability to text objects.
-
- This interface is typically used in conjunction with the IAccessibleText 
-  interface and complements that interface with the additional capability of
-  clipboard operations.  Note that even a read only text object can support
-  the copy capability so this interface is not limited to editable objects.
-
- The substrings used with this interface are specified as follows:
-  If startOffset is less than endOffset, the substring starts with the 
-  character at startOffset and ends with the character just before endOffset.
-  If endOffset is lower than startOffset,  the result is the same as a call 
-  with the two arguments exchanged. The whole text can be defined by passing 
-  the indices zero and IAccessibleText::nCharacters. If both indices have the 
-  same value, an empty string is defined. 
-
- Refer to the @ref _specialOffsets
-  "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods" 
-  for information about a special offset constant that can be used in %IAccessibleEditableText methods.
-*/
-[object, uuid(A59AA09A-7011-4b65-939D-32B1FB5547E3)]
-interface IAccessibleEditableText : IUnknown
-{
-
-  /** @brief Copies the text range into the clipboard.
-    
-   The selection is set to the specified offsets and then selection is copied into
-   the system clipboard.
-        
-   @param [in] startOffset
-    Start index of the text to moved into the clipboard.
-    The valid range is 0..length.
-   @param [in] endOffset
-    End index of the text to moved into the clipboard.
-    The valid range is 0..length.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-   @note Refer to @ref _specialOffsets 
-    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods" 
-    for information about special offsets that can be used in %IAccessibleEditableText
-    methods.
-   @deprecated This function is available via the application's GUI.
-  */
-  HRESULT copyText
-    (
-     [in] long startOffset, 
-     [in] long endOffset 
-    );
-
-  /** @brief Deletes a range of text.
-    
-   The text between and including the two given indices is deleted
-    from the text represented by this object.
-
-   @param [in] startOffset
-    Start index of the text to be deleted.
-    The valid range is 0..length.
-   @param [in] endOffset
-    End index of the text to be deleted.
-    The valid range is 0..length.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-   @note Refer to @ref _specialOffsets 
-    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods" 
-    for information about special offsets that can be used in %IAccessibleEditableText
-    methods.
-  */
-  HRESULT deleteText
-    (
-     [in] long startOffset, 
-     [in] long endOffset 
-    );
-  
-  /** @brief Inserts text at the specified position.
-    
-   The specified string is inserted at the given index into the text
-    represented by this object.
-
-   @param [in] offset
-    Index at which to insert the text.
-    The valid range is 0..length.
-	Refer to @ref _specialOffsets 
-    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods" 
-    for information about special offsets that can be used in %IAccessibleEditableText
-    methods.
-   @param [in] text
-    Text that is inserted.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  HRESULT insertText
-    (
-     [in] long offset,
-     [in] BSTR *text
-    );
-  
-  /** @brief Deletes a range of text and copies it to the clipboard.
-    
-   The selection is set to the specified offsets, the selection is then copied into
-    the system clipboard, and then the selection is deleted.
-
-   @param [in] startOffset
-    Start index of the text to be deleted.
-    The valid range is 0..length.
-   @param [in] endOffset 	
-    End index of the text to be deleted.
-    The valid range is 0..length.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-   @note Refer to @ref _specialOffsets 
-    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods" 
-    for information about special offsets that can be used in %IAccessibleEditableText
-    methods.
-   @deprecated This function is available via the application's GUI.
-  */
-  HRESULT cutText
-    (
-     [in] long startOffset,
-     [in] long endOffset
-    );
-
-  /** @brief Pastes content from the clipboard.
-    
-   Any existing selection is removed, the clipboard content is then pasted into 
-    this object's text at the given offset.  This method is similar to the insertText
-    method.  If the index is not valid the system clipboard content is not inserted. The
-    behavior is the same as	when Ctrl+V is used, i.e. the pasted contents are not
-    necessarily plain text.
-  
-   @param [in] offset
-    Index at which to insert the content from the system clipboard into
-    the text represented by this object.
-    The valid range is 0..length.
-	Refer to @ref _specialOffsets 
-    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods" 
-    for information about special offsets that can be used in %IAccessibleEditableText
-    methods.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-   @deprecated This function is available via the application's GUI.
-  */
-  HRESULT pasteText
-    (
-     [in] long offset
-    );
-
-  /** @brief Replaces text.
-    
-   The text between the two given indices is replaced by the specified 
-    replacement string. This method is equivalent to calling first
-    IAccessibleEditableText::deleteText with the two indices and then 
-    calling IAccessibleEditableText::insertText with the replacement text
-	at the start index.
-       
-   @param [in] startOffset
-    Start index of the text to be replaced.
-    The valid range is 0..length.
-   @param [in] endOffset
-    End index of the text to be replaced.
-    The valid range is 0..length.
-   @param [in] text
-    The Text that replaces the text between the given indices.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-   @note Refer to @ref _specialOffsets 
-    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods" 
-    for information about special offsets that can be used in %IAccessibleEditableText
-    methods.
-  */
-  HRESULT replaceText
-    (
-     [in] long startOffset,
-     [in] long endOffset,
-     [in] BSTR *text
-    );
-
-  /** @brief Replaces the attributes of a text range by the given set of attributes.
-    
-   Sets the attributes for the text between the two given indices. The old
-    attributes are replaced by the new list of attributes.
-        
-   @param [in] startOffset
-    Start index of the text whose attributes are modified.
-    The valid range is 0..length.
-   @param [in] endOffset
-    End index of the text whose attributes are modified.
-    The valid range is 0..length.
-   @param [in] attributes
-    Set of attributes that replaces the old list of attributes of
-    the specified text portion.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-   @note Refer to @ref _specialOffsets 
-    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods" 
-    for information about special offsets that can be used in %IAccessibleEditableText
-    methods.
-  */
-  HRESULT setAttributes
-    (
-     [in] long startOffset,
-     [in] long endOffset,
-     [in] BSTR *attributes
-    );
-}
-
-/*************************************************************************
- *
- *  File Name (AccessibleHyperlink.idl)
- * 
- *  IAccessible2 IDL Specification 
- * 
- *  Copyright (c) 2007, 2010 Linux Foundation 
- *  Copyright (c) 2006 IBM Corporation 
- *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
- *  All rights reserved. 
- *   
- *   
- *  Redistribution and use in source and binary forms, with or without 
- *  modification, are permitted provided that the following conditions 
- *  are met: 
- *   
- *   1. Redistributions of source code must retain the above copyright 
- *      notice, this list of conditions and the following disclaimer. 
- *   
- *   2. Redistributions in binary form must reproduce the above 
- *      copyright notice, this list of conditions and the following 
- *      disclaimer in the documentation and/or other materials 
- *      provided with the distribution. 
- *
- *   3. Neither the name of the Linux Foundation nor the names of its 
- *      contributors may be used to endorse or promote products 
- *      derived from this software without specific prior written 
- *      permission. 
- *   
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
- *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
- *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
- *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
- *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- *   
- *  This BSD License conforms to the Open Source Initiative "Simplified 
- *  BSD License" as published at: 
- *  http://www.opensource.org/licenses/bsd-license.php 
- *   
- *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
- *  mark may be used in accordance with the Linux Foundation Trademark 
- *  Policy to indicate compliance with the IAccessible2 specification. 
- * 
- ************************************************************************/ 
-
-
-
-
-
-
-/** @brief This interface represents hyperlinks.
-
- This interface represents a hyperlink associated with a single substring 
-  of text or single non-text object.  Non-text objects can have either a 
-  single link or a collection of links such as when the non-text object is 
-  an image map.
-
- Linked objects and anchors are implementation dependent. This interface is derived
-  from IAccessibleAction.  IAccessibleAction::nActions is one greater than the 
-  maximum value for the indices used with the methods of this interface.
-        
- Furthermore, the object that implements this interface has to be connected 
-  implicitly or explicitly with an object that implements IAccessibleText.
-  IAccessibleHyperlink::startIndex and IAccessibleHyperlink::endIndex are
-  indices with respect to the text exposed by IAccessibleText.
-
- This interface provides access to a single object which can have multiple actions.
-  An example is an image map which is an image with multiple links each of which is
-  associated with a separate non-overlapping area of the image.  This interface could
-  also be applied to other kinds of objects with multiple actions such as "smart tags"
-  which are objects, typically strings, which have multiple actions such as
-  "Activate URI", "Bookmark URI", etc.
-
- An interesting use case is an image map where each area is associated with multiple
-  actions, e.g. an image map of smart tags.  In this case you would have to implement
-  two levels of accessible hyperlinks.  The first level hyperlinks would only implement
-  anchor and anchorTarget.  The anchors would all reference the image object.  The
-  anchorTargets would reference the second level accessible hyperlink objects.  None
-  of the IAccessibleAction methods would be implemented on the first level hyperlink
-  objects.  The second level hyperlink objects would implement the IAccessibleAction
-  methods.  Their anchors would also reference the image object and their anchorTargets
-  would reference URLs or the objects that would be activated.
-
- This use case demonstrates that in some cases there is no need for IAccessibleHyperlink
-  to derive from IAccessibleAction.  As a result it may be removed in a later version of
-  the IDL and it is suggested that implementations should not rely on the inheritance.
-
-*/
-[object, uuid(01C20F2B-3DD2-400f-949F-AD00BDAB1D41)]
-interface IAccessibleHyperlink : IAccessibleAction
-{
-
-  /** @brief Returns an object that represents the link anchor, as appropriate
-   for the link at the specified index.       
-   @param [in] index
-    A 0 based index identifies the anchor when, as in the case of an image map,
-    there is more than one link represented by this object.  The valid maximal
-    index is indicated by IAccessibleAction::nActions.
-   @param [out] anchor
-    This is an implementation dependent value.  For example, for a text link this 
-	method could return the substring of the containing string where the substring
-	is overridden with link behavior, and for an image link this method could return 
-	an IUnknown VARIANT for IAccessibleImage.  See the section about 
-	@ref _variants "VARIANTs" for additional information.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  [propget] HRESULT anchor
-    (
-     [in] long index,
-     [out, retval] VARIANT *anchor
-    );
-
-  /** @brief Returns an object representing the target of the link, as appropriate
-   for the link at the specified index.       
-   @param [in] index
-    A 0 based index identifies the anchor when, as in the case of an image map,
-    there is more than one link represented by this object.  The valid maximal
-    index is indicated by IAccessibleAction::nActions.
-   @param [out] anchorTarget
-    This is an implementation dependent value.  For example this method could
-	return a BSTR VARIANT of the URI.  Alternatively this method could return an
-	IUnknown VARIANT of a COM interface representing a target object to be 
-	activated when the link is activated.  See the section about 
-	@ref _variants "VARIANTs" for additional information.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  [propget] HRESULT anchorTarget
-    (
-     [in] long index,
-     [out, retval] VARIANT *anchorTarget
-    );
-
-  /** @brief Returns the 0 based character offset at which the textual representation of the hyperlink starts.
-
-   The returned value is related to the IAccessibleText interface of the object that 
-   owns this hyperlink. 
-   @param [out] index
-   @retval S_OK
-  */
-  [propget] HRESULT startIndex
-    (
-     [out, retval] long *index
-    );
-
-  /** @brief Returns the 0 based character offset at which the textual representation of the hyperlink ends.
-    
-   The returned value is related to the IAccessibleText interface of the object that 
-   owns this hyperlink. The character at the index is not part of the hypertext.  
-   @param [out] index
-   @retval S_OK
-  */
-  [propget] HRESULT endIndex
-    (
-     [out, retval] long *index
-    );
-
-  /** @brief Returns whether the target object referenced by this link is still valid.
-        
-   This is a volatile state that may change without sending an appropriate event.
-   Returns TRUE if the referenced target is still valid and FALSE otherwise.
-
-   This has also been used to indicate whether or not the URI of the anchorTarget
-   is malformed.
-
-   @param [out] valid
-    If false, one or more of the object's links are invalid.
-	If true, all of the object's links are valid.
-   @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] value is FALSE
-   @note This method is not being used, is deprecated, and should not be implemented or
-    used.  It is likely that this method will be removed in a later version of the IDL.
-  */
-  [propget] HRESULT valid
-    (
-     [out, retval] boolean *valid
-    );
-}
-/*************************************************************************
- *
- *  File Name (AccessibleHypertext.idl)
- * 
- *  IAccessible2 IDL Specification 
- * 
- *  Copyright (c) 2007, 2010 Linux Foundation 
- *  Copyright (c) 2006 IBM Corporation 
- *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
- *  All rights reserved. 
- *   
- *   
- *  Redistribution and use in source and binary forms, with or without 
- *  modification, are permitted provided that the following conditions 
- *  are met: 
- *   
- *   1. Redistributions of source code must retain the above copyright 
- *      notice, this list of conditions and the following disclaimer. 
- *   
- *   2. Redistributions in binary form must reproduce the above 
- *      copyright notice, this list of conditions and the following 
- *      disclaimer in the documentation and/or other materials 
- *      provided with the distribution. 
- *
- *   3. Neither the name of the Linux Foundation nor the names of its 
- *      contributors may be used to endorse or promote products 
- *      derived from this software without specific prior written 
- *      permission. 
- *   
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
- *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
- *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
- *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
- *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- *   
- *  This BSD License conforms to the Open Source Initiative "Simplified 
- *  BSD License" as published at: 
- *  http://www.opensource.org/licenses/bsd-license.php 
- *   
- *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
- *  mark may be used in accordance with the Linux Foundation Trademark 
- *  Policy to indicate compliance with the IAccessible2 specification. 
- * 
- ************************************************************************/ 
-
-
-
-
-
-
-
-/** @brief This interface exposes information about hypertext in a document.
-
- The %IAccessibleHypertext interface is the main interface to expose
-  hyperlinks in a document, typically a text document, that are used 
-  to reference other documents.  A typical implementation is to implement 
-  this interface on the smallest text object such as a paragraph of text.
-*/
-[object, uuid(6B4F8BBF-F1F2-418a-B35E-A195BC4103B9)]
-interface IAccessibleHypertext : IAccessibleText
-{
-
-  /** @brief Returns the number of links and link groups contained within this hypertext 
-    paragraph.
-   @param [out] hyperlinkCount
-    The number of links and link groups within this hypertext paragraph.  
-    Returns 0 if there is no link.
-   @retval S_OK
-  */
-  [propget] HRESULT nHyperlinks
-    (
-     [out, retval] long *hyperlinkCount
-    );
-
-  /** @brief Returns the specified link.
-    
-   The returned IAccessibleHyperlink object encapsulates the hyperlink and 
-    provides several kinds of information describing it.
-   @param [in] index
-    This 0 based index specifies the hyperlink to return.
-   @param [out] hyperlink
-    If the given index is valid, i.e. lies in the interval from 0 to the number 
-    of links minus one, a reference to the specified hyperlink object is returned.  
-    If the index is invalid then a NULL pointer is returned.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  [propget] HRESULT hyperlink
-    (
-     [in] long index,
-     [out, retval] IAccessibleHyperlink **hyperlink
-    );
-
-  /** @brief Returns the index of the hyperlink that is associated with this character index.
-        
-   This is the case when a link spans the given character index.
-   @param [in] charIndex
-    A 0 based index of the character for which to return the link index.  If 
-	IAccessibleText is used to represent the text containing the link, then the 
-	character index is only  valid if it is greater than or equal to zero and 
-	lower than the number of characters in the text.
-   @param [out] hyperlinkIndex
-    Returns the 0 based index of the hyperlink that is associated with this 
-	character index, or -1 if charIndex is not on a link.
-   @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] value is -1
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  [propget] HRESULT hyperlinkIndex
-    (
-     [in] long charIndex,
-     [out, retval] long *hyperlinkIndex
-    );
-
-}
-/*************************************************************************
- *
- *  File Name (AccessibleHypertext2.idl)
- * 
- *  IAccessible2 IDL Specification 
- * 
- *  Copyright (c) 2007, 2013 Linux Foundation 
- *  Copyright (c) 2006 IBM Corporation 
- *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
- *  All rights reserved. 
- *   
- *   
- *  Redistribution and use in source and binary forms, with or without 
- *  modification, are permitted provided that the following conditions 
- *  are met: 
- *   
- *   1. Redistributions of source code must retain the above copyright 
- *      notice, this list of conditions and the following disclaimer. 
- *   
- *   2. Redistributions in binary form must reproduce the above 
- *      copyright notice, this list of conditions and the following 
- *      disclaimer in the documentation and/or other materials 
- *      provided with the distribution. 
- *
- *   3. Neither the name of the Linux Foundation nor the names of its 
- *      contributors may be used to endorse or promote products 
- *      derived from this software without specific prior written 
- *      permission. 
- *   
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
- *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
- *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
- *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
- *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- *   
- *  This BSD License conforms to the Open Source Initiative "Simplified 
- *  BSD License" as published at: 
- *  http://www.opensource.org/licenses/bsd-license.php 
- *   
- *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
- *  mark may be used in accordance with the Linux Foundation Trademark 
- *  Policy to indicate compliance with the IAccessible2 specification. 
- * 
- ************************************************************************/ 
-
-
-
-
-
-
-
-/** @brief This interface exposes information about hypertext in a document.
-
- The %IAccessibleHypertext2 interface extends the functinality of the
- %IAccessibleHypertext inteface.
-*/
-[object, uuid(CF64D89F-8287-4B44-8501-A827453A6077)]
-interface IAccessibleHypertext2 : IAccessibleHypertext
-{
-
- /** @brief Returns the links for this object.
-
-   The returned IAccessibleHyperlink objects encapsulate the hyperlink and 
-    provides several kinds of information describing it.
-
-   @param [out] hyperlinks
-    This array is allocated by the server.  The client must free it with CoTaskMemFree.
-   @param [out] nHyperlinks
-    The number of links returned; the size of the returned array.
-   @retval S_OK
-   @retval S_FALSE if there are no links, [out] values are NULL and 0 respectively
-  */
-  [propget] HRESULT hyperlinks
-    (
-     [out, size_is(,*nHyperlinks)] IAccessibleHyperlink ***hyperlinks,
-     [out, retval] long *nHyperlinks
-    );
-
-}
-/*************************************************************************
- *
- *  File Name (AccessibleTable.idl)
- * 
- *  IAccessible2 IDL Specification 
- * 
- *  Copyright (c) 2007, 2013 Linux Foundation 
- *  Copyright (c) 2006 IBM Corporation 
- *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
- *  All rights reserved. 
- *   
- *   
- *  Redistribution and use in source and binary forms, with or without 
- *  modification, are permitted provided that the following conditions 
- *  are met: 
- *   
- *   1. Redistributions of source code must retain the above copyright 
- *      notice, this list of conditions and the following disclaimer. 
- *   
- *   2. Redistributions in binary form must reproduce the above 
- *      copyright notice, this list of conditions and the following 
- *      disclaimer in the documentation and/or other materials 
- *      provided with the distribution. 
- *
- *   3. Neither the name of the Linux Foundation nor the names of its 
- *      contributors may be used to endorse or promote products 
- *      derived from this software without specific prior written 
- *      permission. 
- *   
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
- *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
- *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
- *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
- *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- *   
- *  This BSD License conforms to the Open Source Initiative "Simplified 
- *  BSD License" as published at: 
- *  http://www.opensource.org/licenses/bsd-license.php 
- *   
- *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
- *  mark may be used in accordance with the Linux Foundation Trademark 
- *  Policy to indicate compliance with the IAccessible2 specification. 
- * 
- ************************************************************************/ 
-
-
-
-
-
-
-
-/** @brief This interface gives access to a two-dimensional table. 
-       
- Typically all accessible objects that represent cells or cell-clusters of a table 
-  will be at the same time children of the table.  In this case IAccessible2::indexInParent
-  will return the child index which then can be used when calling IAccessibleTable::rowIndex
-  and IAccessibleTable::columnIndex.
-
- However, in some cases that kind of implementation will not be possible.  When
-  the table cells are not direct children of a table, the object representing
-  the cell can define a "table-cell-index" object attribute identifying the 0 
-  based table cell index.  This object attribute is obtained by parsing the
-  attribute string returned by IAccessible2::attributes.  The "table-cell-index"
-  attribute can be used just like a child index of the typical case.  ATs should 
-  first test for the presence of the "table-cell-index" attribute and if it is not
-  present then IAccessible2::indexInParent can be used as in the typical case
-  where cells are direct children of the table.
-              
- The range of valid coordinates for this interface are implementation dependent.  
-  However, that range includes at least the intervals from the from the first row 
-  or column with the index 0 up to the last (but not including) used row or column 
-  as returned by IAccessibleTable::nRows and IAccessibleTable::nColumns.
-
- Note that newer implementations are now using IAccessibleTable2 and IAccessibleTableCell
-  rather than this interface.
-*/
-[object, uuid(35AD8070-C20C-4fb4-B094-F4F7275DD469)]
-interface IAccessibleTable : IUnknown
-{
-
-  /** @brief Returns the accessible object at the specified row and column in 
-    the table.  This object could be an IAccessible or an IAccessible2.
-   @param [in] row
-    The 0 based row index for which to retrieve the cell.
-   @param [in] column
-    The 0 based column index for which to retrieve the cell.
-   @param [out] accessible
-    If both row and column index are valid then the corresponding accessible 
-    object is returned that represents the requested cell regardless of whether 
-    the cell is currently visible (on the screen).
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed, [out] value is NULL 
-  */
-  [propget] HRESULT accessibleAt
-    (
-     [in] long row, 
-     [in] long column,
-     [out, retval] IUnknown **accessible 
-    );
-
-  /** @brief Returns the caption for the table.  The returned object could be 
-    an IAccessible or an IAccessible2.
-   @param [out] accessible
-    If the table has a caption then a reference to it is returned, else a NULL 
-    pointer is returned.
-   @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] value is NULL 
-  */
-  [propget] HRESULT caption
-    (
-     [out, retval] IUnknown **accessible 
-    );
-	  
-  /** @brief Translates the given row and column indexes into the corresponding cell index.
-   @param [in] rowIndex
-    0 based row index for the cell.
-   @param [in] columnIndex
-    0 based column index for the cell.
-   @param [out] cellIndex
-    Returns the 0 based index of the cell at the specified row and column indexes.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed, [out] value is 0
-   @note The returned value is not necessarily a child index of the immediate parent.
-    In cases where the table cells are not direct children of the table the index 
-    is actually the cell index, i.e. conceptually it's an index into a one dimensional
-	array of cells laid out in row order.
-  */
-  [propget] HRESULT childIndex
-	(
-	 [in] long rowIndex,
-	 [in] long columnIndex,
-	 [out, retval] long *cellIndex
-	);
-
-  /** @brief Returns the description text of the specified column in the table.
-   @param [in] column
-    The 0 based index of the column for which to retrieve the description.
-   @param [out] description
-    Returns the description text of the specified column in the table if such a 
-    description exists.  Otherwise a NULL pointer is returned.
-   @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] value is NULL 
-   @retval E_INVALIDARG if bad [in] passed, [out] value is NULL
-  */
-  [propget] HRESULT columnDescription
-    (
-     [in] long column,
-     [out, retval] BSTR *description
-    );
-
-  /** @brief Returns the number of columns occupied by the accessible object 
-    at the specified row and column in the table.
-        
-   The result is greater than 1 if the specified cell spans multiple columns.
-   @param [in] row
-    0 based row index of the accessible for which to return the column extent.
-   @param [in] column
-    0 based column index of the accessible for which to return the column extent.
-   @param [out] nColumnsSpanned
-    Returns the 1 based column extent of the specified cell.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed, [out] value is 0
-  */
-  [propget] HRESULT columnExtentAt
-    (
-     [in] long row,
-     [in] long column,
-     [out, retval] long *nColumnsSpanned 
-    );
-
-  /** @brief Returns the column headers as an %IAccessibleTable object.
-        
-   Content and size of the returned table are implementation dependent.
-   @param [out] accessibleTable
-    The column header
-   @param [out] startingRowIndex
-    The 0 based row index where the header starts, usually 0.
-   @retval S_OK
-   @retval S_FALSE if there is no header, [out] values are NULL and 0 respectively 
-  */
-  [propget] HRESULT columnHeader
-    (
-     [out] IAccessibleTable **accessibleTable,
-	 [out, retval] long *startingRowIndex
-    );
-
-  /** @brief Translates the given cell index into the corresponding column index.
-   @param [in] cellIndex
-    0 based index of the cell in the parent or closest ancestor table.  Typically this
-	is the value returned from IAccessible2::indexInParent, but in the case where the 
-	table cells are not direct children of the table this is the cell index specified 
-	by the "table-cell-index" object attribute obtained from parsing the attributes 
-	string returned by calling IAccessible2::attributes on the cell object.
-   @param [out] columnIndex
-    Returns the 0 based column index of the cell of the specified child or the index of 
-    the first column if the child spans multiple columns.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed, [out] value is 0
-  */
-  [propget] HRESULT columnIndex
-    (
-	 [in] long cellIndex,
-	 [out, retval] long *columnIndex
-	);
-
-  /** @brief Returns the total number of columns in table
-   @param [out] columnCount
-    Number of columns in table (including columns outside the current viewport)
-   @retval S_OK
-  */
-  [propget] HRESULT nColumns
-    (
-     [out, retval] long *columnCount 
-    );
-
-  /** @brief Returns the total number of rows in table
-   @param [out] rowCount
-    Number of rows in table (including rows outside the current viewport)
-   @retval S_OK
-  */
-  [propget] HRESULT nRows
-    (
-     [out, retval] long *rowCount 
-    );
-
-  /** @brief Returns the total number of selected cells
-   @param [out] cellCount
-    Number of cells currently selected
-   @retval S_OK
-  */
-  [propget] HRESULT nSelectedChildren
-    (
-	 [out, retval] long *cellCount
-	);
-
-  /** @brief Returns the total number of selected columns
-   @param [out] columnCount
-    Number of columns currently selected
-   @retval S_OK
-  */
-  [propget] HRESULT nSelectedColumns
-    (
-     [out, retval] long *columnCount 
-    );
-
-  /** @brief Returns the total number of selected rows
-   @param [out] rowCount
-    Number of rows currently selected
-   @retval S_OK
-  */
-  [propget] HRESULT nSelectedRows
-    (
-     [out, retval] long *rowCount 
-    );
-
-  /** @brief Returns the description text of the specified row in the table.
-   @param [in] row
-    The 0 based index of the row for which to retrieve the description.
-   @param [out] description
-    Returns the description text of the specified row in the table if such a 
-    description exists.  Otherwise a NULL pointer is returned.
-   @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] value is NULL 
-   @retval E_INVALIDARG if bad [in] passed, [out] value is NULL
-  */
-  [propget] HRESULT rowDescription
-    (
-     [in] long row, 
-     [out, retval] BSTR *description
-    );
-
-  /** @brief Returns the number of rows occupied by the accessible object 
-    at the specified row and column in the table.
-        
-   The result is greater than 1 if the specified cell spans multiple rows.
-   @param [in] row
-    0 based row index of the accessible for which to return the row extent.
-   @param [in] column
-    0 based column index of the accessible for which to return the row extent.
-   @param [out] nRowsSpanned
-    Returns the row extent of the specified cell.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed, [out] value is 0
-  */
-  [propget] HRESULT rowExtentAt
-    (
-     [in] long row,
-     [in] long column,
-     [out, retval] long *nRowsSpanned
-    );
-
-  /** @brief Returns the row headers as an %IAccessibleTable object.
-        
-   Content and size of the returned table are implementation dependent.
-   @param [out] accessibleTable
-    The row header.
-   @param [out] startingColumnIndex
-    The 0 based column index where the header starts, usually 0.
-   @retval S_OK
-   @retval S_FALSE if there is no header, [out] values are NULL and 0 respectively 
-  */
-  [propget] HRESULT rowHeader
-    (
-     [out] IAccessibleTable **accessibleTable,
-	 [out, retval] long *startingColumnIndex
-    );
-
-  /** @brief Translates the given cell index into a row index.
-   @param [in] cellIndex
-    0 based index of the cell in the parent or closest ancestor table.  Typically this 
-	is the value returned from IAccessible2::indexInParent, but in the case where the 
-	table cells are not direct children of the table this is the cell index specified 
-	by the "table-cell-index" object attribute obtained from parsing the attributes 
-	string returned by calling IAccessible2::attributes on the cell object.
-   @param [out] rowIndex
-    0 based row index
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed, [out] value is 0
-  */
-  [propget] HRESULT rowIndex
-    (
-	 [in] long cellIndex,
-	 [out, retval] long *rowIndex 
-	);
-
-  /** @brief Returns a list of cell indexes currently selected (0 based).
-   @param [in] maxChildren
-    This parameter is ignored. Refer to @ref _arrayConsideration
-	"Special Consideration when using Arrays" for more details.
-   @param [out] children
-    An array of cell indexes of selected cells (each index is 0 based), 
-	allocated by the server. The client must free it with CoTaskMemFree.
-   @param [out] nChildren
-    The number of cell indexes returned; the size of the returned array.
-   @retval S_OK
-   @retval S_FALSE if there are none, [out] values are NULL and 0 respectively 
-  */
-  [propget] HRESULT selectedChildren
-    (
-     [in] long maxChildren,
-     [out, size_is(,maxChildren), length_is(,*nChildren)] long **children,
-     [out, retval] long *nChildren
-    );
-
-  /** @brief Returns a list of column indexes currently selected (0 based).
-   @param [in] maxColumns
-    This parameter is ignored. Refer to @ref _arrayConsideration 
-	"Special Consideration when using Arrays" for more details.
-   @param [out] columns
-	An array of column indexes of selected columns (each index is 0 based), allocated
-	by the server. The client must free it with CoTaskMemFree.
-   @param [out] nColumns
-    The number of column indexes returned; the size of the returned array.
-   @retval S_OK
-   @retval S_FALSE if there are none, [out] values are NULL and 0 respectively 
-  */
-  [propget] HRESULT selectedColumns
-    (
-     [in] long maxColumns,
-     [out, size_is(,maxColumns), length_is(,*nColumns)] long **columns,
-     [out, retval] long *nColumns
-    );
-
-  /** @brief Returns a list of row indexes currently selected (0 based).
-   @param [in] maxRows
-    This parameter is ignored. Refer to @ref _arrayConsideration
-	"Special Consideration when using Arrays" for more details.
-   @param [out] rows
-    An array of row indexes of selected rows (each index is 0 based), allocated
-	by the server. The client must free it with CoTaskMemFree.
-   @param [out] nRows
-    The number of row indexes returned; the size of the returned array.
-   @retval S_OK
-   @retval S_FALSE if there are none, [out] values are NULL and 0 respectively 
-  */
-  [propget] HRESULT selectedRows
-    (
-     [in] long maxRows, 
-     [out, size_is(,maxRows), length_is(,*nRows)] long **rows, 
-     [out, retval] long *nRows 
-    );
-
-  /** @brief Returns the summary description of the table.  The returned object could be 
-    an IAccessible or an IAccessible2.
-   @param [out] accessible
-    Returns a reference to an implementation dependent accessible object 
-    representing the table's summary or a NULL pointer if the table 
-    does not support a summary.
-   @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] value is NULL 
-  */
-  [propget] HRESULT summary
-    (
-     [out, retval] IUnknown **accessible 
-    );
-
-  /** @brief Returns a boolean value indicating whether the specified column is 
-    completely selected.
-   @param [in] column
-    0 based index of the column for which to determine whether it is selected.
-   @param [out] isSelected
-    Returns TRUE if the specified column is selected completely and FALSE otherwise.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed, [out] value is FALSE
-  */
-  [propget] HRESULT isColumnSelected
-    (
-     [in] long column,
-     [out, retval] boolean *isSelected
-    );
-
-  /** @brief Returns a boolean value indicating whether the specified row is completely 
-    selected.
-   @param [in] row
-    0 based index of the row for which to determine whether it is selected.
-   @param [out] isSelected
-    Returns TRUE if the specified row is selected completely and FALSE otherwise.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed, [out] value is FALSE
-  */
-  [propget] HRESULT isRowSelected
-    (
-     [in] long row,
-     [out, retval] boolean *isSelected
-    );
-
-  /** @brief Returns a boolean value indicating whether the specified cell is selected.
-   @param [in] row
-    0 based index of the row for the cell to determine whether it is selected.
-   @param [in] column
-    0 based index of the column for the cell to determine whether it is selected.
-   @param [out] isSelected
-    Returns TRUE if the specified cell is selected and FALSE otherwise.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed, [out] value is FALSE
-  */
-  [propget] HRESULT isSelected
-    (
-     [in] long row,
-     [in] long column,
-     [out, retval] boolean *isSelected 
-    );
-
-  /** @brief Selects a row and unselects all previously selected rows.
-   @param [in] row
-    0 based index of the row to be selected.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  HRESULT selectRow
-    (
-     [in] long row 
-    );
-
-  /** @brief Selects a column and unselects all previously selected columns.
-   @param [in] column
-    0 based index of the column to be selected.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  HRESULT selectColumn
-    (
-     [in] long column
-    );
-
-  /** @brief Unselects one row, leaving other selected rows selected (if any).
-   @param [in] row
-    0 based index of the row to be unselected.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  HRESULT unselectRow
-    (
-     [in] long row
-    );
-
-  /** @brief Unselects one column, leaving other selected columns selected (if any).
-   @param [in] column
-    0 based index of the column to be unselected.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  HRESULT unselectColumn
-    (
-     [in] long column
-    );
-  
-  /** @brief Given a cell index, gets the row and column indexes and extents of a cell 
-    and whether or not it is selected.
-
-   This is a convenience function.  It is not mandatory to implement it.
-   @param [in] index
-    0 based index of this cell in the table.
-   @param [out] row
-    0 based row index.
-   @param [out] column
-    0 based column index.
-   @param [out] rowExtents
-    Number of cells spanned by this cell in this row.
-   @param [out] columnExtents
-    Number of cells spanned by this cell in this column.
-   @param [out] isSelected
-    Indicates if the specified cell is selected.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed, [out] values are 0s and FALSE respectively
-  */
-  [propget] HRESULT rowColumnExtentsAtIndex
-    (
-	 [in] long index, 
-	 [out] long *row,  
-	 [out] long *column,
-	 [out] long *rowExtents,
-	 [out] long *columnExtents,
-	 [out, retval] boolean *isSelected
-	);
-
-  /** @brief Returns the type and extents describing how a table changed.
-  
-   Provided for use by the IA2_EVENT_TABLE_MODEL_CHANGED event handler.
-
-   This data is only guaranteed to be valid while the thread notifying the event 
-   continues. Once the handler has returned, the validity of the data depends on 
-   how the server manages the life cycle of its objects. Also, note that the server 
-   may have different life cycle management strategies for controls depending on 
-   whether or not a control manages its children. Lists, trees, and tables can have 
-   a large number of children and thus it's possible that the child objects for those 
-   controls would only be created as needed. Servers should document their life cycle 
-   strategy as this will be of interest to assistive technology or script engines 
-   accessing data out of process or from other threads. Servers only need to save the 
-   most recent row and column values associated with the change and a scope of the 
-   entire application is adequate.
-
-   @param [out] modelChange
-    A struct of (type(insert, delete, update), firstRow, lastRow, firstColumn, lastColumn).
-   @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] value is NULL 
-  */
-  [propget] HRESULT modelChange
-    (
-	 [out, retval] IA2TableModelChange *modelChange
-    );
-
-}
-/*************************************************************************
- *
- *  File Name (AccessibleTable2.idl)
- * 
- *  IAccessible2 IDL Specification 
- * 
- *  Copyright (c) 2007, 2012 Linux Foundation 
- *  Copyright (c) 2006 IBM Corporation 
- *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
- *  All rights reserved. 
- *   
- *   
- *  Redistribution and use in source and binary forms, with or without 
- *  modification, are permitted provided that the following conditions 
- *  are met: 
- *   
- *   1. Redistributions of source code must retain the above copyright 
- *      notice, this list of conditions and the following disclaimer. 
- *   
- *   2. Redistributions in binary form must reproduce the above 
- *      copyright notice, this list of conditions and the following 
- *      disclaimer in the documentation and/or other materials 
- *      provided with the distribution. 
- *
- *   3. Neither the name of the Linux Foundation nor the names of its 
- *      contributors may be used to endorse or promote products 
- *      derived from this software without specific prior written 
- *      permission. 
- *   
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
- *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
- *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
- *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
- *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- *   
- *  This BSD License conforms to the Open Source Initiative "Simplified 
- *  BSD License" as published at: 
- *  http://www.opensource.org/licenses/bsd-license.php 
- *   
- *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
- *  mark may be used in accordance with the Linux Foundation Trademark 
- *  Policy to indicate compliance with the IAccessible2 specification. 
- * 
- ************************************************************************/ 
-
-
-
-
-
-
-
-/** @brief This interface gives access to a two-dimensional table.
-
- Please also refer to the IAccessibleTableCell interface.
-
- If you want to support older applications you should also support the
-  IAccessibleTable inteface.
-*/
-[object, uuid(6167f295-06f0-4cdd-a1fa-02e25153d869)]
-interface IAccessibleTable2 : IUnknown
-{
-
-  /** @brief Returns the accessible object at the specified row and column in 
-    the table.  This object could be an IAccessible or an IAccessible2.
-   @param [in] row
-    The 0 based row index for which to retrieve the cell.
-   @param [in] column
-    The 0 based column index for which to retrieve the cell.
-   @param [out] cell
-    If both row and column index are valid then the corresponding accessible 
-    object is returned that represents the requested cell regardless of whether 
-    the cell is currently visible (on the screen).
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  [propget] HRESULT cellAt
-    (
-     [in] long row, 
-     [in] long column,
-     [out, retval] IUnknown **cell
-    );
-
-  /** @brief Returns the caption for the table.  The returned object could be 
-    an IAccessible or an IAccessible2.
-   @param [out] accessible
-    If the table has a caption then a reference to it is returned, else a NULL 
-    pointer is returned.
-   @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] value is NULL
-   @deprecated use a describedBy relation
-  */
-  [propget] HRESULT caption
-    (
-     [out, retval] IUnknown **accessible
-    );
-	  
-  /** @brief Returns the description text of the specified column in the table.
-   @param [in] column
-    The 0 based index of the column for which to retrieve the description.
-   @param [out] description
-    Returns the description text of the specified column in the table if such a 
-    description exists.  Otherwise a NULL pointer is returned.
-   @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] value is NULL 
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  [propget] HRESULT columnDescription
-    (
-     [in] long column,
-     [out, retval] BSTR *description
-    );
-
-
-  /** @brief Returns the total number of columns in table
-   @param [out] columnCount
-    Number of columns in table (including columns outside the current viewport)
-   @retval S_OK
-  */
-  [propget] HRESULT nColumns
-    (
-     [out, retval] long *columnCount 
-    );
-
-  /** @brief Returns the total number of rows in table
-   @param [out] rowCount
-    Number of rows in table (including rows outside the current viewport)
-   @retval S_OK
-  */
-  [propget] HRESULT nRows
-    (
-     [out, retval] long *rowCount 
-    );
-
-  /** @brief Returns the total number of selected cells
-   @param [out] cellCount
-    Number of cells currently selected
-   @retval S_OK
-  */
-  [propget] HRESULT nSelectedCells
-    (
-     [out, retval] long *cellCount
-    );
-
-  /** @brief Returns the total number of selected columns
-   @param [out] columnCount
-    Number of columns currently selected
-   @retval S_OK
-  */
-  [propget] HRESULT nSelectedColumns
-    (
-     [out, retval] long *columnCount 
-    );
-
-  /** @brief Returns the total number of selected rows
-   @param [out] rowCount
-    Number of rows currently selected
-   @retval S_OK
-  */
-  [propget] HRESULT nSelectedRows
-    (
-     [out, retval] long *rowCount 
-    );
-
-  /** @brief Returns the description text of the specified row in the table.
-   @param [in] row
-    The 0 based index of the row for which to retrieve the description.
-   @param [out] description
-    Returns the description text of the specified row in the table if such a 
-    description exists.  Otherwise a NULL pointer is returned.
-   @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] value is NULL 
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  [propget] HRESULT rowDescription
-    (
-     [in] long row, 
-     [out, retval] BSTR *description
-    );
-
-  /** @brief Returns a list of accessibles currently selected.
-   @param [out] cells
-    Pointer to an array of references to selected accessibles.  The array is
-    allocated by the server with CoTaskMemAlloc and freed by the client with
-    CoTaskMemFree.
-   @param [out] nSelectedCells
-    The number of accessibles returned; the size of the returned array.
-   @retval S_OK
-   @retval S_FALSE if there are none, [out] values are NULL and 0 respectively 
-  */
-  [propget] HRESULT selectedCells
-    (
-     [out, size_is(,*nSelectedCells)] IUnknown ***cells,
-     [out, retval] long *nSelectedCells
-    );
-
-  /** @brief Returns a list of column indexes currently selected (0 based).
-   @param [out] selectedColumns
-    A pointer to an array of column indexes of selected columns (each index is
-    0 based).  The array is allocated by the server with CoTaskMemAlloc and
-    freed by the client with CoTaskMemFree.
-   @param [out] nColumns
-    The number of column indexes returned; the size of the returned array.
-   @retval S_OK
-   @retval S_FALSE if there are none, [out] values are NULL and 0 respectively 
-  */
-  [propget] HRESULT selectedColumns
-    (
-     [out, size_is(,*nColumns)] long **selectedColumns,
-     [out, retval] long *nColumns
-    );
-
-  /** @brief Returns a list of row indexes currently selected (0 based).
-   @param [out] selectedRows
-    An array of row indexes of selected rows (each index is 0 based).  The array
-    is allocated by the server with CoTaskMemAlloc and freed by the client with
-    CoTaskMemFree.
-   @param [out] nRows
-    The number of row indexes returned; the size of the returned array.
-   @retval S_OK
-   @retval S_FALSE if there are none, [out] values are NULL and 0 respectively 
-  */
-  [propget] HRESULT selectedRows
-    (
-     [out, size_is(,*nRows)] long **selectedRows, 
-     [out, retval] long *nRows 
-    );
-
-  /** @brief Returns the summary description of the table.  The returned object could be 
-    an IAccessible or an IAccessible2.
-   @param [out] accessible
-    Returns a reference to an implementation dependent accessible object 
-    representing the table's summary or a NULL pointer if the table 
-    does not support a summary.
-   @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] value is NULL
-   @deprecated Use the labeledBy relation
-  */
-  [propget] HRESULT summary
-    (
-     [out, retval] IUnknown **accessible 
-    );
-
-  /** @brief Returns a boolean value indicating whether the specified column is 
-    completely selected.
-   @param [in] column
-    0 based index of the column for which to determine whether it is selected.
-   @param [out] isSelected
-    Returns TRUE if the specified column is selected completely and FALSE otherwise.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  [propget] HRESULT isColumnSelected
-    (
-     [in] long column,
-     [out, retval] boolean *isSelected
-    );
-
-  /** @brief Returns a boolean value indicating whether the specified row is completely 
-    selected.
-   @param [in] row
-    0 based index of the row for which to determine whether it is selected.
-   @param [out] isSelected
-    Returns TRUE if the specified row is selected completely and FALSE otherwise.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  [propget] HRESULT isRowSelected
-    (
-     [in] long row,
-     [out, retval] boolean *isSelected
-    );
-
-  /** @brief Selects a row and unselects all previously selected rows.
-
-   The behavior should mimic that of the application, but for those applications
-    which do not have a means in the GUI to select a full row of cells the behavior 
-    should be as follows:  First any selected rows in the table are unselected.  Then
-    the entire row of cells for the specified row is selected.  If any of the
-    cells in the selected row span additional rows, the cells in those rows
-    are also selected. 
-   @param [in] row
-    0 based index of the row to be selected.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  HRESULT selectRow
-    (
-     [in] long row 
-    );
-
-  /** @brief Selects a column and unselects all previously selected columns.
-
-   The behavior should mimic that of the application, but for those applications
-    which do not have a means in the GUI to select a full column of cells the behavior 
-    should be as follows:  First any selected columns in the table are unselected.  Then
-    the entire column of cells for the specified column is selected.  If any of the
-    cells in the selected column span additional columns, the cells in those columns
-    are also selected. 
-   @param [in] column
-    0 based index of the column to be selected.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  HRESULT selectColumn
-    (
-     [in] long column
-    );
-
-  /** @brief Unselects one row, leaving other selected rows selected (if any).
-
-   The behavior should mimic that of the application, but for those applications
-    which do not have a means in the GUI to unselect a full row of cells the
-    behavior should be as follows:  The entire row of cells for the specified
-    row is unselected.  If any of the cells in the selected row span additional
-    rows, the cells in those rows are also unselected. 
-   @param [in] row
-    0 based index of the row to be unselected.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  HRESULT unselectRow
-    (
-     [in] long row
-    );
-
-  /** @brief Unselects one column, leaving other selected columns selected (if any).
-
-   The behavior should mimic that of the application, but for those applications
-    which do not have a means in the GUI to unselect a full column of cells the
-    behavior should be as follows:  The entire column of cells for the specified
-    column is unselected.  If any of the cells in the selected column span additional
-    columns, the cells in those columns are also unselected. 
-   @param [in] column
-    0 based index of the column to be unselected.
-   @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed
-  */
-  HRESULT unselectColumn
-    (
-     [in] long column
-    );
-
-  /** @brief Returns the type and extents describing how a table changed.
-  
-   Provided for use by the IA2_EVENT_TABLE_MODEL_CHANGED event handler.
-
-   This data is only guaranteed to be valid while the thread notifying the event 
-   continues. Once the handler has returned, the validity of the data depends on 
-   how the server manages the life cycle of its objects. Also, note that the server 
-   may have different life cycle management strategies for controls depending on 
-   whether or not a control manages its children. Lists, trees, and tables can have 
-   a large number of children and thus it's possible that the child objects for those 
-   controls would only be created as needed. Servers should document their life cycle 
-   strategy as this will be of interest to assistive technology or script engines 
-   accessing data out of process or from other threads. Servers only need to save the 
-   most recent row and column values associated with the change and a scope of the 
-   entire application is adequate.
-
-   @param [out] modelChange
-    A struct of (type(insert, delete, update), firstRow, lastRow, firstColumn, lastColumn).
-   @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] value is NULL 
-  */
-  [propget] HRESULT modelChange
-    (
-     [out, retval] IA2TableModelChange *modelChange
-    );
-
-}
-/*************************************************************************
- *
- *  File Name (AccessibleTableCell.idl)
- * 
- *  IAccessible2 IDL Specification 
- * 
- *  Copyright (c) 2007, 2013 Linux Foundation 
- *  Copyright (c) 2006 IBM Corporation 
- *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
- *  All rights reserved. 
- *   
- *   
- *  Redistribution and use in source and binary forms, with or without 
- *  modification, are permitted provided that the following conditions 
- *  are met: 
- *   
- *   1. Redistributions of source code must retain the above copyright 
- *      notice, this list of conditions and the following disclaimer. 
- *   
- *   2. Redistributions in binary form must reproduce the above 
- *      copyright notice, this list of conditions and the following 
- *      disclaimer in the documentation and/or other materials 
- *      provided with the distribution. 
- *
- *   3. Neither the name of the Linux Foundation nor the names of its 
- *      contributors may be used to endorse or promote products 
- *      derived from this software without specific prior written 
- *      permission. 
- *   
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
- *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
- *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
- *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
- *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- *   
- *  This BSD License conforms to the Open Source Initiative "Simplified 
- *  BSD License" as published at: 
- *  http://www.opensource.org/licenses/bsd-license.php 
- *   
- *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
- *  mark may be used in accordance with the Linux Foundation Trademark 
- *  Policy to indicate compliance with the IAccessible2 specification. 
- * 
- ************************************************************************/ 
-
-
-
-
-
-
-/** @brief This interface gives access to the cells of a two-dimensional table.
-
- Please also refer to the IAccessibleTable2 interface.
-
-*/
-[object, uuid(594116B1-C99F-4847-AD06-0A7A86ECE645)]
-interface IAccessibleTableCell : IUnknown
-{
-
-  /** @brief Returns the number of columns occupied by this cell accessible.
-        
-   The result is greater than 1 if the specified cell spans multiple columns.
-   @param [out] nColumnsSpanned
-    Returns the 1 based column extent of the specified cell.
-   @retval S_OK
-  */
-  [propget] HRESULT columnExtent
-    (
-     [out, retval] long *nColumnsSpanned 
-    );
-
-  /** @brief Returns the column headers as an array of cell accessibles.
-
-   @param [out] cellAccessibles
-    Pointer to an array of references to cell accessibles.  The array is allocated
-	by the server.  The client must free it with CoTaskMemFree.
-   @param [out] nColumnHeaderCells
-    The number of accessibles returned; the size of the returned array.
-   @retval S_OK
-   @retval S_FALSE if there is no header, [out] values are NULL and 0 respectively 
-  */
-  [propget] HRESULT columnHeaderCells
-    (
-     [out, size_is(,*nColumnHeaderCells)] IUnknown ***cellAccessibles,
-     [out, retval] long *nColumnHeaderCells
-    );
-
-  /** @brief Translates this cell accessible into the corresponding column index.
-
-   @param [out] columnIndex
-    Returns the 0 based column index of the cell of the specified cell or the index of 
-    the first column if the cell spans multiple columns.
-   @retval S_OK
-  */
-  [propget] HRESULT columnIndex
-    (
-     [out, retval] long *columnIndex
-    );
-
-  /** @brief Returns the number of rows occupied by this cell accessible.
-        
-   @param [out] nRowsSpanned
-    Returns the row extent of the specified cell.
-   @retval S_OK
-  */
-  [propget] HRESULT rowExtent
-    (
-     [out, retval] long *nRowsSpanned
-    );
-
-  /** @brief Returns the row headers as an array of cell accessibles.
-
-   @param [out] cellAccessibles
-    Pointer to an array of references to cell accessibles.  The array is allocated
-	by the server.  The client must free it with CoTaskMemFree.
-   @param [out] nRowHeaderCells
-    The number of accessibles returned; the size of the returned array.
-   @retval S_OK
-   @retval S_FALSE if there is no header, [out] values are NULL and 0 respectively 
-  */
-  [propget] HRESULT rowHeaderCells
-    (
-     [out, size_is(,*nRowHeaderCells)] IUnknown ***cellAccessibles,
-     [out, retval] long *nRowHeaderCells
-    );
-
-  /** @brief Translates this cell accessible into the corresponding row index.
-
-   @param [out] rowIndex
-    Returns the 0 based row index of the specified cell or the index of 
-    the first row if the cell spans multiple rows.
-   @retval S_OK
-  */
-  [propget] HRESULT rowIndex
-    (
-     [out, retval] long *rowIndex 
-    );
-
-  /** @brief Returns a boolean value indicating whether this cell is selected.
-
-   @param [out] isSelected
-    Returns TRUE if the specified cell is selected and FALSE otherwise.
-   @retval S_OK
-  */
-  [propget] HRESULT isSelected
-    (
-     [out, retval] boolean *isSelected 
-    );
-  
-  /** @brief Gets the row and column indexes and extents of this cell accessible
-    and whether or not it is selected.
-
-   This is a convenience function.  It is not mandatory to implement it.
-   @param [out] row
-    0 based row index.
-   @param [out] column
-    0 based column index.
-   @param [out] rowExtents
-    Number of cells spanned by this cell in this row.
-   @param [out] columnExtents
-    Number of cells spanned by this cell in this column.
-   @param [out] isSelected
-    Indicates if the specified cell is selected.
-   @retval S_OK
-  */
-  [propget] HRESULT rowColumnExtents
-    (
-     [out] long *row,  
-     [out] long *column,
-     [out] long *rowExtents,
-     [out] long *columnExtents,
-     [out, retval] boolean *isSelected
-    );
-
-  /** @brief Returns a reference to the accessbile of the containing table.
-
-   @param [out] table
-    Returns a reference to the IUnknown of the containing table.
-   @retval S_OK
-  */
-  [propget] HRESULT table
-    (
-     [out, retval] IUnknown **table
-    );
-
-}
-/*************************************************************************
- *
- *  File Name (AccessibleImage.idl)
- * 
- *  IAccessible2 IDL Specification 
- * 
- *  Copyright (c) 2007, 2010 Linux Foundation 
- *  Copyright (c) 2006 IBM Corporation 
- *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
- *  All rights reserved. 
- *   
- *   
- *  Redistribution and use in source and binary forms, with or without 
- *  modification, are permitted provided that the following conditions 
- *  are met: 
- *   
- *   1. Redistributions of source code must retain the above copyright 
- *      notice, this list of conditions and the following disclaimer. 
- *   
- *   2. Redistributions in binary form must reproduce the above 
- *      copyright notice, this list of conditions and the following 
- *      disclaimer in the documentation and/or other materials 
- *      provided with the distribution. 
- *
- *   3. Neither the name of the Linux Foundation nor the names of its 
- *      contributors may be used to endorse or promote products 
- *      derived from this software without specific prior written 
- *      permission. 
- *   
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
- *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
- *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
- *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
- *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- *   
- *  This BSD License conforms to the Open Source Initiative "Simplified 
- *  BSD License" as published at: 
- *  http://www.opensource.org/licenses/bsd-license.php 
- *   
- *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
- *  mark may be used in accordance with the Linux Foundation Trademark 
- *  Policy to indicate compliance with the IAccessible2 specification. 
- * 
- ************************************************************************/ 
-
-
-
-
-
-
-/** @brief This interface represents images and icons.
-
- This interface is used for a representation of images like icons on buttons.
-  %IAccessibleImage only needs to be implemented in certain situations.  Some
-  examples are:
-  <ol>
-   <li>The accessible name and description are not enough to fully
-    describe the image, e.g. when the accessible description is used to define the
-    behavior of an actionable image and the image itself conveys semantically
-    significant information.
-   <li>The user can edit the content that includes an
-    image and therefore the user needs to be able to review the image's position.
-  </ol>
-*/
-[object, uuid(FE5ABB3D-615E-4f7b-909F-5F0EDA9E8DDE)]
-interface IAccessibleImage : IUnknown
-{
-  /** @brief Returns the localized description of the image.          
-   @param [out] description
-   @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] value is NULL
-  */
-  [propget] HRESULT description
-    (
-     [out, retval] BSTR *description
-    );
-
-  /** @brief Returns the coordinates of the image.
-   @param [in] coordinateType
-    Specifies whether the returned coordinates should be relative to the screen or the parent object.
-   @param [out] x
-   @param [out] y
-   @retval S_OK
-  */
-  [propget] HRESULT imagePosition
-    (
-	 [in] enum IA2CoordinateType coordinateType,
-	 [out] long *x,
-     [out, retval] long *y
-    );
-
-  /** @brief Returns the size of the image in units specified by parent's coordinate system.
-   @param [out] height
-   @param [out] width
-   @retval S_OK
-  */
-
-  [propget] HRESULT imageSize
-    (
-     [out] long *height,
-	 [out, retval] long *width
-    );
-}
-/*************************************************************************
- *
- *  File Name (AccessibleEventID.idl)
- * 
- *  IAccessible2 IDL Specification 
- * 
- *  Copyright (c) 2007, 2010 Linux Foundation 
- *  Copyright (c) 2006 IBM Corporation 
- *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
- *  All rights reserved. 
- *   
- *   
- *  Redistribution and use in source and binary forms, with or without 
- *  modification, are permitted provided that the following conditions 
- *  are met: 
- *   
- *   1. Redistributions of source code must retain the above copyright 
- *      notice, this list of conditions and the following disclaimer. 
- *   
- *   2. Redistributions in binary form must reproduce the above 
- *      copyright notice, this list of conditions and the following 
- *      disclaimer in the documentation and/or other materials 
- *      provided with the distribution. 
- *
- *   3. Neither the name of the Linux Foundation nor the names of its 
- *      contributors may be used to endorse or promote products 
- *      derived from this software without specific prior written 
- *      permission. 
- *   
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
- *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
- *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
- *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
- *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- *   
- *  This BSD License conforms to the Open Source Initiative "Simplified 
- *  BSD License" as published at: 
- *  http://www.opensource.org/licenses/bsd-license.php 
- *   
- *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
- *  mark may be used in accordance with the Linux Foundation Trademark 
- *  Policy to indicate compliance with the IAccessible2 specification. 
- * 
- ************************************************************************/ 
-
-/** %IAccessible2 specific event constants 
-
- This enum defines the event IDs fired by %IAccessible2 objects.  The event IDs
- are in addition to those used by MSAA.
-*/
-enum IA2EventID {
-
-  /** The change of the number or attributes of actions of an accessible
-    object is signaled by events of this type. 
-  */
-  IA2_EVENT_ACTION_CHANGED = 0x101,
-
-  /** <b>Deprecated.</b> The active descendant of a component has changed.
-	
-	Note: This event constant is misspelled and thus is deprecated and will be
-	removed in a later version. Please use the correctly spelled version which
-	follows.
-  */
-  IA2_EVENT_ACTIVE_DECENDENT_CHANGED,
-
-  /** The active descendant of a component has changed.  The active descendant 
-    is used in objects with transient children.  
-
-    Note: Due to the fact that MSAA's WinEvents don't allow the active child index
-	to be passed on the IA2_EVENT_ACTIVE_DESCENDANT_CHANGED event the manages
-	descendants	scheme can't be used.  Instead the active child object has to fire
-	MSAA's EVENT_OBJECT_FOCUS.  In a future release a new event mechanism may be
-	added to provide for event specific data to be passed with the event.  At that
-	time the IA2_EVENT_ACTIVE_DECENDENT_CHANGED event and
-	IA2_STATE_MANAGES_DESCENDANTS state would be useful.
-  */
-  IA2_EVENT_ACTIVE_DESCENDANT_CHANGED = IA2_EVENT_ACTIVE_DECENDENT_CHANGED,
-
-  /** The document wide attributes of the document object have changed.
-  */
-  IA2_EVENT_DOCUMENT_ATTRIBUTE_CHANGED,
-
-  /** The contents of the document have changed.
-  */
-  IA2_EVENT_DOCUMENT_CONTENT_CHANGED,
-
-  /** The loading of the document has completed.
-  */
-  IA2_EVENT_DOCUMENT_LOAD_COMPLETE,
-
-  /** The loading of the document was interrupted.
-  */
-  IA2_EVENT_DOCUMENT_LOAD_STOPPED,
-
-  /** The document contents are being reloaded.
-  */
-  IA2_EVENT_DOCUMENT_RELOAD,
-
-  /** The ending index of this link within the containing string has changed.
-  */
-  IA2_EVENT_HYPERLINK_END_INDEX_CHANGED,
-
-  /** The number of anchors associated with this hyperlink object has changed.
-  */
-  IA2_EVENT_HYPERLINK_NUMBER_OF_ANCHORS_CHANGED,
-
-  /** The hyperlink selected state changed from selected to unselected or
-    from unselected to selected.
-  */
-  IA2_EVENT_HYPERLINK_SELECTED_LINK_CHANGED,
-
-  /** One of the links associated with the hypertext object has been activated.
-  */
-  IA2_EVENT_HYPERTEXT_LINK_ACTIVATED,
-
-  /** One of the links associated with the hypertext object has been selected.
-  */
-  IA2_EVENT_HYPERTEXT_LINK_SELECTED,
-
-  /** The starting index of this link within the containing string has changed.
-  */
-  IA2_EVENT_HYPERLINK_START_INDEX_CHANGED,
-
-  /** Focus has changed from one hypertext object to another, or focus moved
-   from a non-hypertext object to a hypertext object, or focus moved from a
-   hypertext object to a non-hypertext object.
-  */
-  IA2_EVENT_HYPERTEXT_CHANGED,
-
-  /** The number of hyperlinks associated with a hypertext object changed
-  */
-  IA2_EVENT_HYPERTEXT_NLINKS_CHANGED,
-
-  /** An object's attributes changed.
-  Also see ::IA2_EVENT_TEXT_ATTRIBUTE_CHANGED.
-  */
-  IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED,
-
-  /** A slide changed in a presentation document or a page boundary was 
-   crossed in a word processing document.
-  */
-  IA2_EVENT_PAGE_CHANGED,  
-
-  /** The caret moved from one section to the next.
-  */
-  IA2_EVENT_SECTION_CHANGED,
-  
-  /** A table caption changed.
-  */
-  IA2_EVENT_TABLE_CAPTION_CHANGED,
-
-  /** A table's column description changed.
-  */
-  IA2_EVENT_TABLE_COLUMN_DESCRIPTION_CHANGED,
-
-  /** A table's column header changed.
-  */
-  IA2_EVENT_TABLE_COLUMN_HEADER_CHANGED,
-
-  /** A table's data changed.
-  */
-  IA2_EVENT_TABLE_MODEL_CHANGED,
-
-  /** A table's row description changed.
-  */
-  IA2_EVENT_TABLE_ROW_DESCRIPTION_CHANGED,
-
-  /** A table's row header changed.
-  */
-  IA2_EVENT_TABLE_ROW_HEADER_CHANGED,
-
-  /** A table's summary changed.
-  */
-  IA2_EVENT_TABLE_SUMMARY_CHANGED,
-
-  /** A text object's attributes changed.
-  Also see ::IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED.
-  */
-  IA2_EVENT_TEXT_ATTRIBUTE_CHANGED,
-
-  /** The caret has moved to a new position.
-  */
-  IA2_EVENT_TEXT_CARET_MOVED,
-
-  /** <b>Deprecated.</b>  This event is equivalent to ::IA2_EVENT_TEXT_UPDATED.
-  */
-  IA2_EVENT_TEXT_CHANGED,
-
-  /** The caret moved from one column to the next.
-  */
-  IA2_EVENT_TEXT_COLUMN_CHANGED,
-
-  /** Text was inserted.
-  */
-  IA2_EVENT_TEXT_INSERTED,
-
-  /** Text was removed.
-  */
-  IA2_EVENT_TEXT_REMOVED,
-
-  /** This event indicates general text changes, i.e. changes to text that are 
-    exposed through the IAccessibleText interface.  For compatibility with ATK/AT-SPI
-	which does not have an equivalent event, servers can alternatively fire 
-	::IA2_EVENT_TEXT_REMOVED and ::IA2_EVENT_TEXT_INSERTED.
-  */
-  IA2_EVENT_TEXT_UPDATED,
-
-  /** The text selection changed.  Later versions of Microsoft development environments 
-   have an equivalent event identified, EVENT_OBJECT_TEXTSELECTIONCHANGED.  Servers 
-   should use that if it is available and use IA2_EVENT_TEXT_SELECTION_CHANGED otherwise.  
-   Clients should be prepared to respond to either event.
-
-  */
-  IA2_EVENT_TEXT_SELECTION_CHANGED,
-
-  /** A visible data event indicates the change of the visual appearance
-    of an accessible object.  This includes for example most of the
-    attributes available via the IAccessibleComponent interface.
-  */
-  IA2_EVENT_VISIBLE_DATA_CHANGED
-
-};
-/*************************************************************************
- *
- *  File Name (AccessibleApplication.idl)
- * 
- *  IAccessible2 IDL Specification 
- * 
- *  Copyright (c) 2007, 2010 Linux Foundation 
- *  Copyright (c) 2006 IBM Corporation 
- *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
- *  All rights reserved. 
- *   
- *   
- *  Redistribution and use in source and binary forms, with or without 
- *  modification, are permitted provided that the following conditions 
- *  are met: 
- *   
- *   1. Redistributions of source code must retain the above copyright 
- *      notice, this list of conditions and the following disclaimer. 
- *   
- *   2. Redistributions in binary form must reproduce the above 
- *      copyright notice, this list of conditions and the following 
- *      disclaimer in the documentation and/or other materials 
- *      provided with the distribution. 
- *
- *   3. Neither the name of the Linux Foundation nor the names of its 
- *      contributors may be used to endorse or promote products 
- *      derived from this software without specific prior written 
- *      permission. 
- *   
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
- *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
- *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
- *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
- *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- *   
- *  This BSD License conforms to the Open Source Initiative "Simplified 
- *  BSD License" as published at: 
- *  http://www.opensource.org/licenses/bsd-license.php 
- *   
- *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
- *  mark may be used in accordance with the Linux Foundation Trademark 
- *  Policy to indicate compliance with the IAccessible2 specification. 
- * 
- ************************************************************************/ 
-
-
-
-
-
-
-/** @brief This interface gives access to the application's name and version information.
-        
- This interface provides the AT with the information it needs to differentiate 
- this application from other applications, from other versions of this 
- application, or from other versions of this application running on different 
- versions of an accessibility bridge or accessibility toolkit.
-
- Servers implementing IAccessible2 should provide access to the %IAccessibleApplication 
- interface via QueryService from any object so that ATs can easily determine specific 
- information about the application such as its name or version.
-*/
-[object, uuid(D49DED83-5B25-43F4-9B95-93B44595979E)]
-interface IAccessibleApplication : IUnknown
-{
-  
-  /** @brief Returns the application name.
-   @param [out] name
-   @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] value is NULL
-  */
-  [propget] HRESULT appName
-    (
-     [out, retval] BSTR *name
-    );
-
-  /** @brief Returns the application version.
-   @param [out] version
-    The version string must not contain levels when it is know beforehand that
-    this information will never require a change in a client's behavior.
-    For example, use "3.6.0" rather than "3.6.0.v201005131500".
-   @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] value is NULL
-  */
-  [propget] HRESULT appVersion
-    (
-     [out, retval] BSTR *version
-    );
-
-  /** @brief Returns the toolkit/bridge name.
-   @param [out] name
-   @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] value is NULL
-  */
-  [propget] HRESULT toolkitName
-    (
-     [out, retval] BSTR *name
-    );
-
-  /** @brief Returns the toolkit/bridge version.
-   @param [out] version
-    The version string must not contain levels when it is know beforehand that
-    this information will never require a change in a client's behavior.
-    For example, use "3.6.0" rather than "3.6.0.v201005131500".
-   @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] value is NULL
-  */
-  [propget] HRESULT toolkitVersion
-    (
-     [out, retval] BSTR *version
-    );  
-
-}
-
-/*************************************************************************
- *
- *  File Name (AccessibleDocument.idl)
- * 
- *  IAccessible2 IDL Specification 
- * 
- *  Copyright (c) 2013 Linux Foundation 
- *  All rights reserved. 
- *   
- *   
- *  Redistribution and use in source and binary forms, with or without 
- *  modification, are permitted provided that the following conditions 
- *  are met: 
- *   
- *   1. Redistributions of source code must retain the above copyright 
- *      notice, this list of conditions and the following disclaimer. 
- *   
- *   2. Redistributions in binary form must reproduce the above 
- *      copyright notice, this list of conditions and the following 
- *      disclaimer in the documentation and/or other materials 
- *      provided with the distribution. 
- *
- *   3. Neither the name of the Linux Foundation nor the names of its 
- *      contributors may be used to endorse or promote products 
- *      derived from this software without specific prior written 
- *      permission. 
- *   
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
- *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
- *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
- *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
- *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- *   
- *  This BSD License conforms to the Open Source Initiative "Simplified 
- *  BSD License" as published at: 
- *  http://www.opensource.org/licenses/bsd-license.php 
- *   
- *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
- *  mark may be used in accordance with the Linux Foundation Trademark 
- *  Policy to indicate compliance with the IAccessible2 specification. 
- * 
- ************************************************************************/ 
-
-
-
-
-
-/** @brief This interface represents documents.
-
- This interface is used for a representation of documents.
-*/
-[object, uuid(C48C7FCF-4AB5-4056-AFA6-902D6E1D1149)]
-interface IAccessibleDocument : IUnknown
-{
-  /** @brief Returns the most recently used anchor target within a document.
-  
-   A document's most recently targeted in-page anchor is returned.  A typical use
-    of this method is to fetch the anchor target within an HTML document.  In this
-    case anchor targets are those which have been defined with the &lt;a&gt; tag.  
-
-   @param [out] accessible
-   @retval S_OK
-   @retval S_FALSE if there are no existing valid anchor targets, [out] value is NULL.
-  */
-  [propget] HRESULT anchorTarget
-    (
-     [out, retval] IUnknown **accessible
-    );
-
-}
-/*************************************************************************
- *
- *  File Name (IA2TypeLibrary.idl)
- * 
- *  IAccessible2 IDL Specification 
- * 
- *  Copyright (c) 2007, 2012 Linux Foundation 
- *  Copyright (c) 2006 IBM Corporation 
- *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
- *  All rights reserved. 
- *   
- *   
- *  Redistribution and use in source and binary forms, with or without 
- *  modification, are permitted provided that the following conditions 
- *  are met: 
- *   
- *   1. Redistributions of source code must retain the above copyright 
- *      notice, this list of conditions and the following disclaimer. 
- *   
- *   2. Redistributions in binary form must reproduce the above 
- *      copyright notice, this list of conditions and the following 
- *      disclaimer in the documentation and/or other materials 
- *      provided with the distribution. 
- *
- *   3. Neither the name of the Linux Foundation nor the names of its 
- *      contributors may be used to endorse or promote products 
- *      derived from this software without specific prior written 
- *      permission. 
- *   
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
- *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
- *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
- *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
- *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
- *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- *   
- *  This BSD License conforms to the Open Source Initiative "Simplified 
- *  BSD License" as published at: 
- *  http://www.opensource.org/licenses/bsd-license.php 
- *   
- *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2 
- *  mark may be used in accordance with the Linux Foundation Trademark 
- *  Policy to indicate compliance with the IAccessible2 specification. 
- * 
- ************************************************************************/ 
-
-// This is not a standalone file.  It is to be appended to the end of the 
-// merged IDL file.
-
-cpp_quote("")
-cpp_quote("// Type Library Definitions")
-cpp_quote("")
-
-[
-    uuid(CE3F726E-D1D3-44FE-B995-FF1DB3B48B2B),
-    helpstring("IAccessible2 Type Library"),
-    version(1.3),
-    hidden
-]
-
-library IAccessible2Lib
-{
-    importlib ("stdole2.tlb");
-    importlib ("oleacc.dll");
-    interface IAccessible2;
-    interface IAccessible2_2;
-    interface IAccessible2_3;
-    interface IAccessibleAction;
-    interface IAccessibleApplication;
-    interface IAccessibleComponent;
-    interface IAccessibleDocument;
-    interface IAccessibleEditableText;
-    interface IAccessibleHyperlink;
-    interface IAccessibleHypertext;
-    interface IAccessibleHypertext2;
-    interface IAccessibleImage;
-    interface IAccessibleRelation;
-    interface IAccessibleTable;
-    interface IAccessibleTable2;
-    interface IAccessibleTableCell;
-    interface IAccessibleText;
-    interface IAccessibleText2;
-    interface IAccessibleValue;
-    enum IA2CoordinateType;
-    enum IA2EventID;
-    enum IA2Role;
-    enum IA2ScrollType;
-    enum IA2States;
-    enum IA2TableModelChangeType;
-    enum IA2TextBoundaryType;
-    enum IA2TextSpecialOffsets;
-}