Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / iaccessible2 / ia2_api_all.idl
index 564c920..729ed26 100644 (file)
@@ -1,10 +1,65 @@
 /*************************************************************************
  *
+ *  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, 2010 Linux Foundation 
+ *  Copyright (c) 2007, 2013 Linux Foundation 
  *  Copyright (c) 2006 IBM Corporation 
  *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
  *  All rights reserved. 
@@ -195,7 +250,7 @@ typedef struct IA2TableModelChange {
  * 
  *  IAccessible2 IDL Specification 
  * 
- *  Copyright (c) 2007, 2010 Linux Foundation 
+ *  Copyright (c) 2007, 2013 Linux Foundation 
  *  Copyright (c) 2006 IBM Corporation 
  *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
  *  All rights reserved. 
@@ -242,9 +297,9 @@ typedef struct IA2TableModelChange {
  * 
  ************************************************************************/ 
 
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
+
+
+
 
 /** @defgroup grpRelations Relations 
   Use the following constants to compare against the BSTRs returned by 
@@ -252,6 +307,20 @@ import "oleacc.idl";
 */ 
 ///@{
 
+/** 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";
 
@@ -302,23 +371,39 @@ const WCHAR *const IA2_RELATION_LABELLED_BY = L"labelledBy";
 */
 const WCHAR *const IA2_RELATION_MEMBER_OF = L"memberOf";
 
-/** This object is a child of a target object. */
+/** 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 loose focus.
+ 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.
+/** This interface gives access to an object's set of relations.
+*/
 [object, uuid(7CDF86EE-C3DA-496a-BDA4-281B336E1FDC)]
 interface IAccessibleRelation : IUnknown
 {
@@ -355,8 +440,7 @@ interface IAccessibleRelation : IUnknown
     0 based index
    @param [out] target
    @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 
+   @retval E_INVALIDARG if bad [in] passed
    @note Use QueryInterface to get IAccessible2.
   */
   [propget] HRESULT target
@@ -376,7 +460,7 @@ interface IAccessibleRelation : IUnknown
    @param [out] nTargets
        actual number of targets in the returned array (not more than maxTargets)
    @retval S_OK
-   @retval S_FALSE if there is nothing to return, nTargets is set to 0
+   @retval E_INVALIDARG if bad [in] passed, e.g. a negative value
   */
   [propget] HRESULT targets
     (
@@ -393,7 +477,7 @@ interface IAccessibleRelation : IUnknown
  *
  *  IAccessible2 IDL Specification 
  * 
- *  Copyright (c) 2007, 2010 Linux Foundation 
+ *  Copyright (c) 2007, 2013 Linux Foundation 
  *  Copyright (c) 2006 IBM Corporation 
  *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
  *  All rights reserved. 
@@ -440,9 +524,34 @@ interface IAccessibleRelation : IUnknown
  * 
  ************************************************************************/ 
 
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
+
+
+
+
+/** 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.
@@ -486,7 +595,9 @@ interface IAccessibleAction : IUnknown
     0 based index specifying the action to perform.  If it lies outside
     the valid range no action is performed.
    @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed 
+   @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
     (
@@ -501,7 +612,7 @@ interface IAccessibleAction : IUnknown
     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, [out] value is NULL 
+   @retval E_INVALIDARG if bad [in] passed
     */
   [propget] HRESULT description
     (
@@ -536,12 +647,12 @@ interface IAccessibleAction : IUnknown
        "Special Consideration when using Arrays" for more details.
    @param [out] keyBindings
     An array of BSTRs, allocated by the server, one for each key binding.
-       Free it with CoTaskMemFree.
+       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 relations, [out] values are NULL and 0 respectively 
-   @retval E_INVALIDARG if bad [in] passed, [out] values are NULL and 0 respectively 
+   @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
     (
@@ -557,7 +668,7 @@ interface IAccessibleAction : IUnknown
    @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, [out] value is NULL 
+   @retval E_INVALIDARG if bad [in] passed
    */
   [propget] HRESULT name
     (
@@ -571,7 +682,7 @@ interface IAccessibleAction : IUnknown
    @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, [out] value is NULL 
+   @retval E_INVALIDARG if bad [in] passed
    */
   [propget] HRESULT localizedName
     (
@@ -586,7 +697,7 @@ interface IAccessibleAction : IUnknown
  * 
  *  IAccessible2 IDL Specification 
  * 
- *  Copyright (c) 2007, 2010 Linux Foundation 
+ *  Copyright (c) 2007, 2013 Linux Foundation 
  *  Copyright (c) 2006 IBM Corporation 
  *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
  *  All rights reserved. 
@@ -633,7 +744,7 @@ interface IAccessibleAction : IUnknown
  * 
  ************************************************************************/ 
 
-import "objidl.idl";
+
 
 /** Collection of roles
 
@@ -683,10 +794,9 @@ enum IA2Role {
   */
   IA2_ROLE_DIRECTORY_PANE,
 
-  /** An editable text object in a toolbar.
-   <BR><B>Note:</B> This role has been deprecated.  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.
+  /** 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,
 
@@ -739,7 +849,7 @@ enum IA2Role {
   */
   IA2_ROLE_HEADER,
 
-  /// Heading.  Use the IAccessible2::attributes heading-level attribute to determine the heading level.
+  /// 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.
@@ -774,7 +884,9 @@ enum IA2Role {
   */
   IA2_ROLE_LAYERED_PANE,
 
-  /// An embedded note which is not visible until activated.
+  /** 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.
@@ -860,7 +972,18 @@ enum IA2Role {
    the scroll bars, the contents of the viewport can change.
    Also refer to ::IA2_ROLE_SCROLL_PANE.
   */
-  IA2_ROLE_VIEW_PORT
+  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
   
 };
 /*************************************************************************
@@ -916,7 +1039,7 @@ enum IA2Role {
  * 
  ************************************************************************/ 
 
-import "objidl.idl";
+
 
 typedef long AccessibleStates;
 
@@ -957,7 +1080,12 @@ IA2_STATE_ARMED =                                 0x2,
 /** Indicates the user interface object corresponding to this object no longer exists. */
 IA2_STATE_DEFUNCT =                                    0x4,
 
-/** Indicates the user can change the contents of this object. */
+/** 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. */
@@ -1043,7 +1171,28 @@ IA2_STATE_SUPPORTS_AUTOCOMPLETION =      0x8000,
 IA2_STATE_TRANSIENT =                          0x10000,
 
 /** Indicates the orientation of this object is vertical. */
-IA2_STATE_VERTICAL =                           0x20000
+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
 
 };
 /*************************************************************************
@@ -1052,7 +1201,7 @@ IA2_STATE_VERTICAL =                              0x20000
  * 
  *  IAccessible2 IDL Specification 
  * 
- *  Copyright (c) 2007, 2010 Linux Foundation 
+ *  Copyright (c) 2007, 2013 Linux Foundation 
  *  Copyright (c) 2006 IBM Corporation 
  *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
  *  All rights reserved. 
@@ -1103,18 +1252,22 @@ IA2_STATE_VERTICAL =                            0x20000
 
  @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
+  IAccessibleTable [Deprecated]\n
   IAccessibleTable2\n
   IAccessibleTableCell\n
   IAccessibleText\n
-  IAccessibleEditableText\n
+  IAccessibleText2\n
   IAccessibleValue
 
  @section _structs Structs
@@ -1123,6 +1276,7 @@ IA2_STATE_VERTICAL =                              0x20000
   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
@@ -1142,7 +1296,7 @@ IA2_STATE_VERTICAL =                              0x20000
  @page _licensePage BSD License
   %IAccessible2 IDL Specification
 
-  Copyright (c) 2007, 2010 Linux Foundation\n
+  Copyright (c) 2007, 2013 Linux Foundation\n
   Copyright (c) 2006 IBM Corporation\n
   Copyright (c) 2000, 2006 Sun Microsystems, Inc.\n
   All rights reserved.
@@ -1194,7 +1348,7 @@ IA2_STATE_VERTICAL =                              0x20000
  @ref _memory\n
  &nbsp;&nbsp;@ref _arrayConsideration\n
  @ref _indexes\n
- @ref _enums\n
+ @ref _enumBase\n
  @ref _specialOffsets\n
  @ref _dicoveringInterfaces\n
  @ref _changingInterfaces\n
@@ -1205,9 +1359,9 @@ IA2_STATE_VERTICAL =                              0x20000
  @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://msdn2.microsoft.com/en-us/library/bb401631.aspx">Interpreting HRESULT Values</a>
-  in MSDN&reg;.
+  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
@@ -1244,26 +1398,33 @@ IA2_STATE_VERTICAL =                            0x20000
    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.  It is considered a best practice
-  for the client to allocate and free the arrays.  This can be done for 
-  IAccessible2::relations and IAccessibleRelation::targets.  However, due to the
-  coding of the IDL 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, 
-  IAccessibleAction::keyBinding, IAccessibleTable::selectedChildren, 
-  IAccessibleTable::selectedColumns, and IAccessibleTable::selectedRows.  For those 
-  methods, the server must allocate both the top level array and any storage 
-  associated with it, e.g. for BSTRs.  The client must use CoTaskMemFree to free
-  the array and any BSTRs must be freed with SysFreeString.  
+  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 those methods 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.
+  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 _enums Enums
+ @section _enumBase Enum Base
   Note that enums start at 0.
 
  @section _specialOffsets Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods
@@ -1303,18 +1464,16 @@ IA2_STATE_VERTICAL =                            0x20000
   } 
   @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 currently coded such that IAccessible2 is a subclass of MSAA's IAccessible, 
-  none of MSAA's IAccessible methods are overridden or extended.  In order to allow 
-  future removal of the inheritance, Assistive Technologies (ATs) should not rely on 
-  that inheritance. 
+  @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.accessinteropalliance.org/docs/Introducing_IAccessibleEx.doc">
-  documented by Microsoft</a> and the pertinent facts have been extracted below: 
+  <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 
@@ -1387,9 +1546,9 @@ IA2_STATE_VERTICAL =                              0x20000
 
 **/
 
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
+
+
+
 
 
 
@@ -1404,13 +1563,15 @@ typedef struct IA2Locale {
   BSTR variant;  ///< Application specific variant of the locale
 } IA2Locale;
 
-/** This interface must always be provided for objects that support some
+/** @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
@@ -1430,7 +1591,7 @@ interface IAccessible2 : IAccessible
      0 based
    @param [out] relation
    @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed, [out] value is NULL
+   @retval E_INVALIDARG if bad [in] passed
   */
   [propget] HRESULT relation
     (
@@ -1449,6 +1610,7 @@ interface IAccessible2 : IAccessible
     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
     (
@@ -1518,16 +1680,19 @@ interface IAccessible2 : IAccessible
     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.
+    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
+   @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.  This is normally not implemented on a combo box to describe the nature
+    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 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.
+    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
     (
@@ -1591,7 +1756,7 @@ interface IAccessible2 : IAccessible
     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.  Free it with CoTaskMemFree.
+    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
@@ -1605,11 +1770,12 @@ interface IAccessible2 : IAccessible
     );
 
   /** @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.  Free it with CoTaskMemFree. 
+    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
@@ -1654,7 +1820,11 @@ interface IAccessible2 : IAccessible
    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 
-   resuse pool.  The number generator would be used whenever the reuse pool was empty.
+   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
@@ -1705,7 +1875,7 @@ interface IAccessible2 : IAccessible
      [out, retval] IA2Locale *locale
     );
 
-  /** @brief Returns the attributes specific to this %IAccessible2 object, such as a cell's formula.
+  /** @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
@@ -1719,6 +1889,129 @@ interface IAccessible2 : IAccessible
 
 /*************************************************************************
  *
+ *  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 
@@ -1770,9 +2063,9 @@ interface IAccessible2 : IAccessible
  * 
  ************************************************************************/ 
 
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
+
+
+
 
 /** 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.
@@ -1894,9 +2187,9 @@ interface IAccessibleComponent : IUnknown
  * 
  ************************************************************************/ 
 
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
+
+
+
 
 /** @brief This interface gives access to a single numerical value.
 
@@ -1917,7 +2210,7 @@ interface IAccessibleValue : IUnknown
     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 NULL
+   @retval S_FALSE if there is nothing to return, [out] value is a VARIANT with vt = VT_EMPTY
   */
   [propget] HRESULT currentValue
     (
@@ -1932,7 +2225,7 @@ interface IAccessibleValue : IUnknown
        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 [out] value
+   @param [in] value
     The new value represented by this object.  The set of admissible types for 
     this argument is implementation dependent.
    @retval S_OK
@@ -1952,6 +2245,7 @@ interface IAccessibleValue : IUnknown
     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
     (
@@ -1968,6 +2262,7 @@ interface IAccessibleValue : IUnknown
     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
     (
@@ -1981,7 +2276,7 @@ interface IAccessibleValue : IUnknown
  * 
  *  IAccessible2 IDL Specification 
  * 
- *  Copyright (c) 2007, 2010 Linux Foundation 
+ *  Copyright (c) 2007, 2013 Linux Foundation 
  *  Copyright (c) 2006 IBM Corporation 
  *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
  *  All rights reserved. 
@@ -2028,9 +2323,9 @@ interface IAccessibleValue : IUnknown
  * 
  ************************************************************************/ 
 
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
+
+
+
 
 
 /** A structure containing a substring and the start and end offsets in the enclosing string.
@@ -2059,25 +2354,25 @@ typedef struct IA2TextSegment {
 */
 
 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
+  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.
+                                 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.
@@ -2118,6 +2413,9 @@ interface IAccessibleText : IUnknown
     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
     (
@@ -2127,21 +2425,22 @@ interface IAccessibleText : IUnknown
 
   /** @brief Returns text attributes.
    @param [in] offset
-    Text offset (0 based)
+    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)
+    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)
+    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, [out] values are 0s and NULL respectively 
-        
+   @retval E_INVALIDARG if bad [in] passed
   */
   [propget] HRESULT attributes
     (
@@ -2168,7 +2467,8 @@ interface IAccessibleText : IUnknown
    <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.
+   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
@@ -2202,7 +2502,9 @@ interface IAccessibleText : IUnknown
     event for this index.
    @param [in] offset
     Index of the character for which to return its bounding box. The valid range 
-    is 0..length.
+    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
@@ -2214,7 +2516,7 @@ interface IAccessibleText : IUnknown
    @param [out] height
     Height of the bounding box of the referenced character. 
    @retval S_OK
-   @retval E_INVALIDARG if bad [in] passed, [out] values are 0s 
+   @retval E_INVALIDARG if bad [in] passed
   */
   [propget] HRESULT characterExtents
     (
@@ -2246,17 +2548,19 @@ interface IAccessibleText : IUnknown
             
    @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.
+    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.            
+    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 E_INVALIDARG if bad [in] passed, [out] value is 0 
+   @retval S_FALSE if nothing to return, [out] value is -1
+
+   @retval E_INVALIDARG if bad [in] passed
     */
   [propget] HRESULT offsetAtPoint
     (
@@ -2267,6 +2571,27 @@ interface IAccessibleText : IUnknown
     );
 
   /** @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
@@ -2274,8 +2599,7 @@ interface IAccessibleText : IUnknown
    @param [out] endOffset
     0 based offset of one past the last selected character.
    @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] values are 0s 
-   @retval E_INVALIDARG if bad [in] passed, [out] values are 0s 
+   @retval E_INVALIDARG if bad [in] passed
   */
   [propget] HRESULT selection
     (
@@ -2288,12 +2612,12 @@ interface IAccessibleText : IUnknown
 
    The substring starts with the character at startOffset (inclusive) and up to 
     the character at endOffset (exclusive), if startOffset is less or equal 
-    endOffste.  If endOffset is lower than startOffset, the result is the same 
+    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.
+    string is returned.
    @param [in] startOffset
     Index of the first character to include in the returned string. The valid range 
     is 0..length.
@@ -2305,9 +2629,13 @@ interface IAccessibleText : IUnknown
     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, [out] value is NULL
-   @note The returned string may be longer than endOffset-startOffset bytes if text 
-   contains multi-byte characters.
+   @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
     (
@@ -2326,15 +2654,19 @@ interface IAccessibleText : IUnknown
    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 suitable word (or other boundary type) is found, a
-    NULL pointer 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.
+    complete list.
    @param [out] startOffset
     0 based offset of first character.
    @param [out] endOffset
@@ -2345,8 +2677,8 @@ interface IAccessibleText : IUnknown
    @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, [out] values are 0s and NULL respectively 
+    [out] values are 0s and NULL respectively 
+   @retval E_INVALIDARG if bad [in] passed
   */
   [propget] HRESULT textBeforeOffset
     (
@@ -2367,12 +2699,16 @@ interface IAccessibleText : IUnknown
    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 suitable word (or other text type) is found, a 
-    NULL pointer 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 
+    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.
@@ -2386,8 +2722,8 @@ interface IAccessibleText : IUnknown
    @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, [out] values are 0s and NULL respectively 
+    [out] values are 0s and NULL respectively 
+   @retval E_INVALIDARG if bad [in] passed
   */
   [propget] HRESULT textAfterOffset
     (
@@ -2399,15 +2735,26 @@ interface IAccessibleText : IUnknown
     );
 
   /** @brief Returns a text portion that spans the given position.
-    
-   Returns the substring of the specified text type at the specified offset.
 
-   If the index is valid, but no suitable word (or other text type) is found, a 
-    NULL pointer is returned.
+   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 before it.  The index 
-    character will not be part of the returned string. The valid range is 0..length.
+    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.
@@ -2421,8 +2768,8 @@ interface IAccessibleText : IUnknown
    @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, [out] values are 0s and NULL respectively 
+    [out] values are 0s and NULL respectively 
+   @retval E_INVALIDARG if bad [in] passed
   */
   [propget] HRESULT textAtOffset
     (
@@ -2460,7 +2807,9 @@ interface IAccessibleText : IUnknown
     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.
+    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
@@ -2479,6 +2828,9 @@ interface IAccessibleText : IUnknown
     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
     (
@@ -2508,12 +2860,15 @@ interface IAccessibleText : IUnknown
     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
+     [in] enum IA2ScrollType scrollType
     );
 
   /** @brief Moves the top left of a substring to a specified location.
@@ -2531,14 +2886,17 @@ interface IAccessibleText : IUnknown
    @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 
+     [in] long x,
+     [in] long y 
     );
 
   /** @brief Returns any inserted text.
@@ -2560,12 +2918,14 @@ interface IAccessibleText : IUnknown
    @param [out] newText
     The text that was just inserted.
    @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] value is NULL
+   @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
-       );
+     [out, retval] IA2TextSegment *newText
+    );
 
   /** @brief Returns any removed text.
 
@@ -2585,12 +2945,111 @@ interface IAccessibleText : IUnknown
    @param [out] oldText
     The text that was just removed.
    @retval S_OK
-   @retval S_FALSE if there is nothing to return, [out] value is NULL
+   @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
-       );
+     [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
+    );
 
 }
 /*************************************************************************
@@ -2599,7 +3058,7 @@ interface IAccessibleText : IUnknown
  * 
  *  IAccessible2 IDL Specification 
  * 
- *  Copyright (c) 2007, 2010 Linux Foundation 
+ *  Copyright (c) 2007, 2012 Linux Foundation 
  *  Copyright (c) 2006 IBM Corporation 
  *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
  *  All rights reserved. 
@@ -2646,9 +3105,9 @@ interface IAccessibleText : IUnknown
  * 
  ************************************************************************/ 
 
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
+
+
+
 
 
 /** @brief This interface provides clipboard capability to text objects.
@@ -2676,8 +3135,8 @@ interface IAccessibleEditableText : IUnknown
 
   /** @brief Copies the text range into the clipboard.
     
-   The specified text between the two given indices is copied into the
-    system 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.
@@ -2687,6 +3146,11 @@ interface IAccessibleEditableText : IUnknown
     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
     (
@@ -2707,6 +3171,10 @@ interface IAccessibleEditableText : IUnknown
     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
     (
@@ -2722,6 +3190,10 @@ interface IAccessibleEditableText : IUnknown
    @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
@@ -2735,8 +3207,8 @@ interface IAccessibleEditableText : IUnknown
   
   /** @brief Deletes a range of text and copies it to the clipboard.
     
-   The text between the two given indices is deleted from the text
-    represented by this object and copied 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.
@@ -2746,6 +3218,11 @@ interface IAccessibleEditableText : IUnknown
     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
     (
@@ -2753,19 +3230,25 @@ interface IAccessibleEditableText : IUnknown
      [in] long endOffset
     );
 
-  /** @brief Pastes text from the clipboard.
+  /** @brief Pastes content from the clipboard.
     
-   The text in the system clipboard is pasted into the text represented
-    by this object at the given index.  This method is similar to the 
-       IAccessibleEditableText::insertText method. If the index is not valid 
-       the system clipboard text is not inserted.
-   
+   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 text from the system clipboard into
+    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
     (
@@ -2784,12 +3267,16 @@ interface IAccessibleEditableText : IUnknown
     Start index of the text to be replaced.
     The valid range is 0..length.
    @param [in] endOffset
-    Start index of the text to be replaced.
+    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
     (
@@ -2807,13 +3294,17 @@ interface IAccessibleEditableText : IUnknown
     Start index of the text whose attributes are modified.
     The valid range is 0..length.
    @param [in] endOffset
-    Start index of the text whose attributes are modified.
+    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
     (
@@ -2876,9 +3367,9 @@ interface IAccessibleEditableText : IUnknown
  * 
  ************************************************************************/ 
 
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
+
+
+
 
 
 /** @brief This interface represents hyperlinks.
@@ -2936,8 +3427,7 @@ interface IAccessibleHyperlink : IAccessibleAction
        an IUnknown VARIANT for IAccessibleImage.  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 NULL 
-   @retval E_INVALIDARG if bad [in] passed, [out] value is NULL 
+   @retval E_INVALIDARG if bad [in] passed
   */
   [propget] HRESULT anchor
     (
@@ -2958,8 +3448,7 @@ interface IAccessibleHyperlink : IAccessibleAction
        activated when the link is activated.  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 NULL 
-   @retval E_INVALIDARG if bad [in] passed, [out] value is NULL 
+   @retval E_INVALIDARG if bad [in] passed
   */
   [propget] HRESULT anchorTarget
     (
@@ -2999,12 +3488,13 @@ interface IAccessibleHyperlink : IAccessibleAction
    This has also been used to indicate whether or not the URI of the anchorTarget
    is malformed.
 
-   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.
-
    @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 
+   @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
     (
@@ -3064,9 +3554,9 @@ interface IAccessibleHyperlink : IAccessibleAction
  * 
  ************************************************************************/ 
 
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
+
+
+
 
 
 
@@ -3104,7 +3594,7 @@ interface IAccessibleHypertext : IAccessibleText
     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, [out] value is NULL 
+   @retval E_INVALIDARG if bad [in] passed
   */
   [propget] HRESULT hyperlink
     (
@@ -3125,7 +3615,7 @@ interface IAccessibleHypertext : IAccessibleText
        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, [out] value is NULL 
+   @retval E_INVALIDARG if bad [in] passed
   */
   [propget] HRESULT hyperlinkIndex
     (
@@ -3136,11 +3626,98 @@ interface IAccessibleHypertext : IAccessibleText
 }
 /*************************************************************************
  *
+ *  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, 2010 Linux Foundation 
+ *  Copyright (c) 2007, 2013 Linux Foundation 
  *  Copyright (c) 2006 IBM Corporation 
  *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
  *  All rights reserved. 
@@ -3187,9 +3764,9 @@ interface IAccessibleHypertext : IAccessibleText
  * 
  ************************************************************************/ 
 
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
+
+
+
 
 
 
@@ -3473,7 +4050,7 @@ interface IAccessibleTable : IUnknown
        "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. Free it with CoTaskMemFree.
+       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
@@ -3492,7 +4069,7 @@ interface IAccessibleTable : IUnknown
        "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. Free it with CoTaskMemFree.
+       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
@@ -3511,7 +4088,7 @@ interface IAccessibleTable : IUnknown
        "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. Free it with CoTaskMemFree.
+       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
@@ -3691,7 +4268,7 @@ interface IAccessibleTable : IUnknown
  * 
  *  IAccessible2 IDL Specification 
  * 
- *  Copyright (c) 2007, 2010 Linux Foundation 
+ *  Copyright (c) 2007, 2012 Linux Foundation 
  *  Copyright (c) 2006 IBM Corporation 
  *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
  *  All rights reserved. 
@@ -3738,9 +4315,9 @@ interface IAccessibleTable : IUnknown
  * 
  ************************************************************************/ 
 
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
+
+
+
 
 
 
@@ -3766,7 +4343,7 @@ interface IAccessibleTable2 : IUnknown
     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 
+   @retval E_INVALIDARG if bad [in] passed
   */
   [propget] HRESULT cellAt
     (
@@ -3781,7 +4358,8 @@ interface IAccessibleTable2 : IUnknown
     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 
+   @retval S_FALSE if there is nothing to return, [out] value is NULL
+   @deprecated use a describedBy relation
   */
   [propget] HRESULT caption
     (
@@ -3796,7 +4374,7 @@ interface IAccessibleTable2 : IUnknown
     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
+   @retval E_INVALIDARG if bad [in] passed
   */
   [propget] HRESULT columnDescription
     (
@@ -3863,7 +4441,7 @@ interface IAccessibleTable2 : IUnknown
     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
+   @retval E_INVALIDARG if bad [in] passed
   */
   [propget] HRESULT rowDescription
     (
@@ -3874,7 +4452,8 @@ interface IAccessibleTable2 : IUnknown
   /** @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.  Free it with CoTaskMemFree.
+    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
@@ -3882,14 +4461,15 @@ interface IAccessibleTable2 : IUnknown
   */
   [propget] HRESULT selectedCells
     (
-     [out, size_is(,*nSelectedCells,)] IUnknown ***cells,
+     [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. Free it with CoTaskMemFree.
+    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
@@ -3903,8 +4483,9 @@ interface IAccessibleTable2 : IUnknown
 
   /** @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), allocated
-    by the server. Free it with CoTaskMemFree.
+    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
@@ -3923,7 +4504,8 @@ interface IAccessibleTable2 : IUnknown
     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 
+   @retval S_FALSE if there is nothing to return, [out] value is NULL
+   @deprecated Use the labeledBy relation
   */
   [propget] HRESULT summary
     (
@@ -3937,7 +4519,7 @@ interface IAccessibleTable2 : IUnknown
    @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
+   @retval E_INVALIDARG if bad [in] passed
   */
   [propget] HRESULT isColumnSelected
     (
@@ -3952,7 +4534,7 @@ interface IAccessibleTable2 : IUnknown
    @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
+   @retval E_INVALIDARG if bad [in] passed
   */
   [propget] HRESULT isRowSelected
     (
@@ -4063,7 +4645,7 @@ interface IAccessibleTable2 : IUnknown
  * 
  *  IAccessible2 IDL Specification 
  * 
- *  Copyright (c) 2007, 2010 Linux Foundation 
+ *  Copyright (c) 2007, 2013 Linux Foundation 
  *  Copyright (c) 2006 IBM Corporation 
  *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
  *  All rights reserved. 
@@ -4110,9 +4692,9 @@ interface IAccessibleTable2 : IUnknown
  * 
  ************************************************************************/ 
 
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
+
+
+
 
 
 /** @brief This interface gives access to the cells of a two-dimensional table.
@@ -4140,7 +4722,7 @@ interface IAccessibleTableCell : IUnknown
 
    @param [out] cellAccessibles
     Pointer to an array of references to cell accessibles.  The array is allocated
-       by the server.  Free it with CoTaskMemFree.
+       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
@@ -4148,7 +4730,7 @@ interface IAccessibleTableCell : IUnknown
   */
   [propget] HRESULT columnHeaderCells
     (
-     [out, size_is(,*nColumnHeaderCells,)] IUnknown ***cellAccessibles,
+     [out, size_is(,*nColumnHeaderCells)] IUnknown ***cellAccessibles,
      [out, retval] long *nColumnHeaderCells
     );
 
@@ -4179,7 +4761,7 @@ interface IAccessibleTableCell : IUnknown
 
    @param [out] cellAccessibles
     Pointer to an array of references to cell accessibles.  The array is allocated
-       by the server.  Free it with CoTaskMemFree.
+       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
@@ -4187,7 +4769,7 @@ interface IAccessibleTableCell : IUnknown
   */
   [propget] HRESULT rowHeaderCells
     (
-     [out, size_is(,*nRowHeaderCells,)] IUnknown ***cellAccessibles,
+     [out, size_is(,*nRowHeaderCells)] IUnknown ***cellAccessibles,
      [out, retval] long *nRowHeaderCells
     );
 
@@ -4304,9 +4886,9 @@ interface IAccessibleTableCell : IUnknown
  * 
  ************************************************************************/ 
 
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
+
+
+
 
 
 /** @brief This interface represents images and icons.
@@ -4427,7 +5009,7 @@ enum IA2EventID {
   */
   IA2_EVENT_ACTION_CHANGED = 0x101,
 
-  /** The active descendant of a component has changed.
+  /** <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
@@ -4646,9 +5228,9 @@ enum IA2EventID {
  ************************************************************************/ 
 
 
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
+
+
+
 
 /** @brief This interface gives access to the application's name and version information.
         
@@ -4677,6 +5259,9 @@ interface IAccessibleApplication : IUnknown
 
   /** @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
   */
@@ -4697,6 +5282,9 @@ interface IAccessibleApplication : IUnknown
 
   /** @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
   */
@@ -4709,11 +5297,89 @@ interface IAccessibleApplication : IUnknown
 
 /*************************************************************************
  *
+ *  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, 2010 Linux Foundation 
+ *  Copyright (c) 2007, 2012 Linux Foundation 
  *  Copyright (c) 2006 IBM Corporation 
  *  Copyright (c) 2000, 2006 Sun Microsystems, Inc. 
  *  All rights reserved. 
@@ -4768,28 +5434,33 @@ cpp_quote("// Type Library Definitions")
 cpp_quote("")
 
 [
-    uuid(c974e070-3787-490a-87b0-e333b06ca1e2),
+    uuid(CE3F726E-D1D3-44FE-B995-FF1DB3B48B2B),
     helpstring("IAccessible2 Type Library"),
-    version(1.2),
+    version(1.3),
     hidden
 ]
 
 library IAccessible2Lib
 {
     importlib ("stdole2.tlb");
+    importlib ("oleacc.dll");
     interface IAccessible2;
+    interface IAccessible2_2;
     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;