1/*************************************************************************
2 *
3 *  File Name (AccessibleText.idl)
4 *
5 *  IAccessible2 IDL Specification
6 *
7 *  Copyright (c) 2007, 2013 Linux Foundation
8 *  Copyright (c) 2006 IBM Corporation
9 *  Copyright (c) 2000, 2006 Sun Microsystems, Inc.
10 *  All rights reserved.
11 *
12 *
13 *  Redistribution and use in source and binary forms, with or without
14 *  modification, are permitted provided that the following conditions
15 *  are met:
16 *
17 *   1. Redistributions of source code must retain the above copyright
18 *      notice, this list of conditions and the following disclaimer.
19 *
20 *   2. Redistributions in binary form must reproduce the above
21 *      copyright notice, this list of conditions and the following
22 *      disclaimer in the documentation and/or other materials
23 *      provided with the distribution.
24 *
25 *   3. Neither the name of the Linux Foundation nor the names of its
26 *      contributors may be used to endorse or promote products
27 *      derived from this software without specific prior written
28 *      permission.
29 *
30 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
31 *  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
32 *  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
33 *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
34 *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
35 *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
36 *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
37 *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
38 *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
39 *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
40 *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
41 *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
42 *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
43 *
44 *  This BSD License conforms to the Open Source Initiative "Simplified
45 *  BSD License" as published at:
46 *  http://www.opensource.org/licenses/bsd-license.php
47 *
48 *  IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
49 *  mark may be used in accordance with the Linux Foundation Trademark
50 *  Policy to indicate compliance with the IAccessible2 specification.
51 *
52 ************************************************************************/
53
54import "objidl.idl";
55import "oaidl.idl";
56import "oleacc.idl";
57import "IA2CommonTypes.idl";
58
59/** A structure containing a substring and the start and end offsets in the enclosing string.
60
61 IAccessibleText::newText and IAccessibleText::oldText return this struct.
62*/
63typedef struct IA2TextSegment {
64  BSTR text;    ///< A copy of a segment of text taken from an enclosing paragraph.
65  long start;    ///< Index of the first character of the segment in the enclosing text.
66  long end;        ///< Index of the character following the last character of the segment in the enclosing text.
67} IA2TextSegment;
68
69/** This enum defines values which specify a text boundary type.
70
71 IA2_TEXT_BOUNDARY_SENTENCE is optional.  When a method doesn't implement this
72 method it must return S_FALSE.  Typically this feature would not be implemented
73 by an application.  However, if the application developer was not satisfied with
74 how screen readers have handled the reading of sentences this boundary type
75 could be implemented and screen readers could use the application's version of a
76 sentence rather than the screen reader's.
77
78 The rest of the boundary types must be supported.
79
80 This enum is used in IAccessibleText::textBeforeOffset, IAccessibleText::textAtOffset,
81 and IAccessibleText::textAfterOffset.
82*/
83
84enum IA2TextBoundaryType {
85  IA2_TEXT_BOUNDARY_CHAR,       /**< Typically, a single character is returned.  In some cases more than
86                                 one character is returned, for example, when a document contains field
87                                 data such as a field containing a date, time, or footnote reference.
88                                 In this case the caret can move over several characters in one movement
89                                 of the caret.  Note that after the caret moves, the caret offset changes
90                                 by the number of characters in the field, e.g. by 8 characters in the
91                                 following date: 03/26/07. */
92  IA2_TEXT_BOUNDARY_WORD,       /**< The range provided matches the range observed when the application
93                                 processes the Ctrl + left arrow and Ctrl + right arrow key sequences.
94                                 Typically this is from the start of one word to the start of the next, but
95                                 various applications are inconsistent in the handling of the end of a line. */
96  IA2_TEXT_BOUNDARY_SENTENCE,   ///< Range is from start of one sentence to the start of another sentence.
97  IA2_TEXT_BOUNDARY_PARAGRAPH,  ///< Range is from start of one paragraph to the start of another paragraph.
98  IA2_TEXT_BOUNDARY_LINE,       /**< Range is from start of one line to the start of another line. This
99                                 often means that an end-of-line character will appear at the end of the
100                                 range. However in the case of some applications an end-of-line character
101                                 indicates the end of a paragraph and the lines composing the paragraph,
102                                 other than the last line, do not contain an end of line character. */
103  IA2_TEXT_BOUNDARY_ALL         ///< Using this value will cause all text to be returned.
104};
105
106/** @brief This interface gives read-only access to text.
107
108 The %IAccessibleText interface should be implemented by all components
109  that present textual information on the display like  buttons,
110  text entry fields, or text portions of the document window.  The interface
111  provides access to the text's content, attributes, and spatial location.
112  However, text can not be modified with this interface.  That is the task
113  of the IAccessibleEditableText interface.
114
115 The text length, i.e. the number of characters in the text, is
116  returned by IAccessibleText::nCharacters. All methods that operate
117  on particular characters (e.g. IAccessibleText::textAtOffset) use character
118  indices from 0 to length-1. All methods that operate on character positions
119  (e.g. IAccessibleText::text) use indices from 0 to length.
120
121 Please note that accessible text does not necessarily support selection.
122  In this case it should behave as if there where no selection.  An empty
123  selection is used for example to express the current cursor position.
124
125 Refer to @ref _specialOffsets
126  "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
127  for information about special offsets that can be used in %IAccessibleText methods.
128
129 E_FAIL is returned in the following cases
130 @li endOffset < startOffset
131 @li endoffset > length
132*/
133[object, uuid(24FD2FFB-3AAD-4a08-8335-A3AD89C0FB4B)]
134interface IAccessibleText : IUnknown
135{
136
137  /** @brief Adds a text selection
138   @param [in] startOffset
139    Starting offset ( 0 based).
140   @param [in] endOffset
141    Offset of first character after new selection (0 based).
142   @retval S_OK
143   @retval E_INVALIDARG if bad [in] passed
144   @note  Refer to @ref _specialOffsets
145    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
146    for information about special offsets that can be used in %IAccessibleText methods.
147  */
148  HRESULT addSelection
149    (
150     [in] long startOffset,
151     [in] long endOffset
152    );
153
154  /** @brief Returns text attributes.
155   @param [in] offset
156    Text offset (0 based).  Refer to @ref _specialOffsets
157    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
158    for information about special offsets that can be used in %IAccessibleText methods.
159   @param [out] startOffset
160    The starting offset of the character range over which all text attributes match
161    those of offset. (0 based)
162   @param [out] endOffset
163    The offset of the first character past the character range over which all text
164    attributes match those of offset. (0 based)
165   @param [out] textAttributes
166    A string of attributes describing the text.  The attributes are described in the
167    <a href="http://www.linuxfoundation.org/en/Accessibility/IAccessible2/TextAttributes">
168    text attributes specification</a> on the %IAccessible2 web site.
169   @retval S_OK
170   @retval S_FALSE if there is nothing to return, [out] values are 0s and NULL respectively
171   @retval E_INVALIDARG if bad [in] passed
172  */
173  [propget] HRESULT attributes
174    (
175     [in] long offset,
176     [out] long *startOffset,
177     [out] long *endOffset,
178     [out, retval] BSTR *textAttributes
179    );
180
181  /** @brief Returns the position of the caret.
182
183   Returns the 0-based offset of the caret within the text.  If the text is
184   implemented as a tree of text objects with embed characters in higher levels
185   representing substrings of child text objects and the caret is in one of the
186   child text objects, then the offset in the higher level text object would be
187   at the embed character representing child text object that contains the caret.
188
189   For example, if the string "one two three" is implemented as a two text objects,
190   with a top level text object containing an embed character "one ? three" and a
191   child text object containing "two" and if the caret is in the descendant object
192   just before the 'o' in "two", then:
193   <ul>
194   <li>the caretOffset for the "one ? three" object would be 4, matching the embed character</li>
195   <li>the caretOffset for "two" would be 2, matching the "o"</li>
196   </ul>
197   The caret position/offset is that of the character logically following it, e.g.
198   to the right of it in a left to right language, or to the left of it in a right
199   to left language.
200   @param [out] offset
201    The returned offset is relative to the text represented by this object.
202   @retval S_OK
203   @retval S_FALSE if the caret is not currently active on this object, i.e. the
204    caret is located on some other object.  The returned offset value will be -1.
205   @note S_FALSE (and an offset of -1) will not be returned if the caret is somewhere
206   in the text object or one of its descendants.
207  */
208  [propget] HRESULT caretOffset
209    (
210     [out, retval] long *offset
211    );
212
213
214  /** @brief Returns the bounding box of the specified position.
215
216   The virtual character after the last character of the represented
217    text, i.e. the one at position length is a special case. It represents the
218    current input position and will therefore typically be queried by AT more
219    often than other positions.  Because it does not represent an existing character
220    its bounding box is defined in relation to preceding characters.  It should be
221    roughly equivalent to the bounding box of some character when inserted at the
222    end of the text.  Its height typically being the maximal height of all the
223    characters in the text or the height of the preceding character, its width being
224    at least one pixel so that the bounding box is not degenerate.
225
226   Note that the index 'length' is not always valid.  Whether it is or not is
227    implementation dependent.  It typically is when text is editable or otherwise
228    when on the screen the caret can be placed behind the text.  You can be sure
229    that the index is valid after you have received a ::IA2_EVENT_TEXT_CARET_MOVED
230    event for this index.
231   @param [in] offset
232    Index of the character for which to return its bounding box. The valid range
233    is 0..length.  Refer to @ref _specialOffsets
234    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
235    for information about special offsets that can be used in %IAccessibleText methods.
236   @param [in] coordType
237    Specifies if the coordinates are relative to the screen or to the parent window.
238   @param [out] x
239    X coordinate of the top left corner of the bounding box of the referenced character.
240   @param [out] y
241    Y coordinate of the top left corner of the bounding box of the referenced character.
242   @param [out] width
243    Width of the bounding box of the referenced character.
244   @param [out] height
245    Height of the bounding box of the referenced character.
246   @retval S_OK
247   @retval E_INVALIDARG if bad [in] passed
248  */
249  [propget] HRESULT characterExtents
250    (
251     [in] long offset,
252     [in] enum IA2CoordinateType coordType,
253     [out] long *x,
254     [out] long *y,
255     [out] long *width,
256     [out, retval] long *height
257    );
258
259
260  /** @brief Returns the number of active non-contiguous selections
261   @param [out] nSelections
262   @retval S_OK
263  */
264  [propget] HRESULT nSelections
265    (
266     [out, retval] long *nSelections
267    );
268
269  /** @brief Returns the text position for the specified screen position.
270
271   Given a point return the zero-based index of the character under that
272   point.  The same functionality could be achieved by using the bounding
273   boxes for each character as returned by IAccessibleText::characterExtents.
274   The method IAccessibleText::offsetAtPoint, however, can be implemented
275   more efficiently.
276
277   @param [in] x
278    The position's x value for which to look up the index of the character that
279    is rendered on to the display at that point.
280   @param [in] y
281    The position's y value for which to look up the index of the character that
282    is rendered on to the display at that point.
283   @param [in] coordType
284    Screen coordinates or window coordinates.
285   @param [out] offset
286    Index of the character under the given point or -1 if the point
287    is invalid or there is no character under the point.
288   @retval S_OK
289   @retval S_FALSE if nothing to return, [out] value is -1
290
291   @retval E_INVALIDARG if bad [in] passed
292    */
293  [propget] HRESULT offsetAtPoint
294    (
295     [in] long x,
296     [in] long y,
297     [in] enum IA2CoordinateType coordType,
298     [out, retval] long *offset
299    );
300
301  /** @brief Returns the character offsets of Nth active text selection
302
303   Returns the 0-based starting and ending offsets of the Nth selection.  If the
304   text is implemented as a tree of text objects with embed characters in higher
305   levels representing substrings of child text objects, consider the following.
306   If the starting selection offset is in one of the child text objects, then the
307   starting offset in the higher level text object would be at the embed character
308   representing the child text object that contains the starting selection offset.
309   If the ending selection offset is in one of the child text objects, then the
310   ending offset in the higher level text object would be just after the embed
311   character representing the child text object that contains the ending selection
312   offset.
313
314   For example, if the string "one two three" is implemented as a two text objects,
315   with a top level text object containing an embed character "one ? three" and a
316   child text object containing "two" and if the selection is the string "two" then:
317   <ul>
318   <li>the startOffset for the "one ? three" object would be 4, matching the embed character and the endOffset would be 5.</li>
319   <li>the startOffset for the "two" object would be 0, and the endOffset would be 3</li>
320   </ul>
321   Selection offsets are that of the character logically following it, e.g.
322   to the right of it in a left to right language or to the left of it in a right to left language.
323   @param [in] selectionIndex
324    Index of selection (0 based).
325   @param [out] startOffset
326    0 based offset of first selected character
327   @param [out] endOffset
328    0 based offset of one past the last selected character.
329   @retval S_OK
330   @retval E_INVALIDARG if bad [in] passed
331  */
332  [propget] HRESULT selection
333    (
334     [in] long selectionIndex,
335     [out] long *startOffset,
336     [out, retval] long *endOffset
337    );
338
339  /** @brief Returns the substring between the two given indices.
340
341   The substring starts with the character at startOffset (inclusive) and up to
342    the character at endOffset (exclusive), if startOffset is less or equal
343    endOffset.  If endOffset is lower than startOffset, the result is the same
344    as a call with the two arguments being exchanged.
345
346   The whole text can be requested by passing the indices zero and
347    IAccessibleText::nCharacters. If both indices have the same value, an empty
348    string is returned.
349   @param [in] startOffset
350    Index of the first character to include in the returned string. The valid range
351    is 0..length.
352   @param [in] endOffset
353    Index of the last character to exclude in the returned string. The valid range
354    is 0..length.
355   @param [out] text
356    Returns the substring starting with the character at startOffset (inclusive)
357    and up to the character at endOffset (exclusive), if startOffset is less than
358    or equal to endOffset.
359   @retval S_OK
360   @retval E_INVALIDARG if bad [in] passed
361   @note
362   @li The returned string may be longer than endOffset-startOffset bytes if text
363    contains multi-byte characters.
364   @li Refer to @ref _specialOffsets
365    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
366    for information about special offsets that can be used in %IAccessibleText methods.
367  */
368  [propget] HRESULT text
369    (
370     [in] long startOffset,
371     [in] long endOffset,
372     [out, retval] BSTR *text
373    );
374
375  /** @brief Returns a text portion before the given position.
376
377   Returns the substring of the specified text type that is located before the
378    given character and does not include it. The result of this method should be
379    same as a result for IAccessibleText::textAtOffset with a suitably decreased
380    index value.
381
382   For example, if text type is ::IA2_TEXT_BOUNDARY_WORD, then the complete
383    word that is closest to and located before offset is returned.
384
385   If the index is valid, but no text is found, S_FALSE is returned along with out
386    values of 0, 0, and a NULL pointer.  This would happen for boundary types other
387    than character when the text consists entirely of whitespace.
388
389   @param [in] offset
390    Index of the character for which to return the text part before it.  The index
391    character will not be part of the returned string. The valid range is 0..length.
392    Refer to @ref _specialOffsets
393    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
394    for information about special offsets that can be used in %IAccessibleText methods.
395   @param [in] boundaryType
396    The type of the text portion to return.  See ::IA2TextBoundaryType for the
397    complete list.
398   @param [out] startOffset
399    0 based offset of first character.
400   @param [out] endOffset
401    0 based offset of one past the last character.
402   @param [out] text
403    Returns the requested text portion.  This portion may be empty or invalid when
404    no appropriate text portion is found or text type is invalid.
405   @retval S_OK
406   @retval S_FALSE if the requested boundary type is not implemented, such as
407    ::IA2_TEXT_BOUNDARY_SENTENCE, or if there is nothing to return;
408    [out] values are 0s and NULL respectively
409   @retval E_INVALIDARG if bad [in] passed
410  */
411  [propget] HRESULT textBeforeOffset
412    (
413     [in] long offset,
414     [in] enum IA2TextBoundaryType boundaryType,
415     [out] long *startOffset,
416     [out] long *endOffset,
417     [out, retval] BSTR *text
418    );
419
420  /** @brief Returns a text portion after the given position.
421
422   Returns the substring of the specified text type that is located after the
423    given character and does not include it. The result of this method should be
424    same as a result for IAccessibleText::textAtOffset with a suitably increased
425    index value.
426
427   For example, if text type is ::IA2_TEXT_BOUNDARY_WORD, then the complete
428    word that is closest to and located after offset is returned.
429
430   If the index is valid, but no text is found, S_FALSE is returned along with out
431    values of 0, 0, and a NULL pointer.  This would happen for boundary types other
432    than character when the text consists entirely of whitespace.
433
434   @param [in] offset
435    Index of the character for which to return the text part after it.  The index
436    character will not be part of the returned string. The valid range is 0..length.
437    Refer to @ref _specialOffsets
438    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
439    for information about special offsets that can be used in %IAccessibleText methods.
440   @param [in] boundaryType
441    The type of the text portion to return.  See ::IA2TextBoundaryType for the complete
442    list.
443   @param [out] startOffset
444    0 based offset of first character.
445   @param [out] endOffset
446    0 based offset of one past the last character.
447   @param [out] text
448    Returns the requested text portion.  This portion may be empty or invalid when
449    no appropriate text portion is found or text type is invalid.
450   @retval S_OK
451   @retval S_FALSE if the requested boundary type is not implemented, such as
452    ::IA2_TEXT_BOUNDARY_SENTENCE, or if there is nothing to return;
453    [out] values are 0s and NULL respectively
454   @retval E_INVALIDARG if bad [in] passed
455  */
456  [propget] HRESULT textAfterOffset
457    (
458     [in] long offset,
459     [in] enum IA2TextBoundaryType boundaryType,
460     [out] long *startOffset,
461     [out] long *endOffset,
462     [out, retval] BSTR *text
463    );
464
465  /** @brief Returns a text portion that spans the given position.
466
467   Returns the substring defined by the specified boundary type at the specified
468    offset.  Refer to IA2TextBoundaryType for more details.
469
470   For the word boundary type the returned string will contain the word at the
471    offset if the offset is inside a word and will contain the word before the
472    offset if the offset is not inside a word.  All offsets from the first to the
473    last characters of a word are considered inside the word.  Boundary types of
474    sentence and paragraph should exhibit similar behavior.
475
476   If the index is valid, but no text is found, S_FALSE is returned along with out
477    values of 0, 0, and a NULL pointer.  This would happen for boundary types other
478    than character when the text consists entirely of whitespace.
479
480   @param [in] offset
481    Index of the character for which to return the text part it belongs to.  The valid
482    range is 0..length.
483    Refer to @ref _specialOffsets
484    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
485    for information about special offsets that can be used in %IAccessibleText methods.
486   @param [in] boundaryType
487    The type of the text portion to return.  See ::IA2TextBoundaryType for the complete
488    list.
489   @param [out] startOffset
490    0 based offset of first character.
491   @param [out] endOffset
492    0 based offset of one past the last character.
493   @param [out] text
494    Returns the requested text portion.  This portion may be empty or invalid when
495    no appropriate text portion is found or text type is invalid.
496   @retval S_OK
497   @retval S_FALSE if the requested boundary type is not implemented, such as
498    ::IA2_TEXT_BOUNDARY_SENTENCE, or if there is nothing to return;
499    [out] values are 0s and NULL respectively
500   @retval E_INVALIDARG if bad [in] passed
501  */
502  [propget] HRESULT textAtOffset
503    (
504     [in] long offset,
505     [in] enum IA2TextBoundaryType boundaryType,
506     [out] long *startOffset,
507     [out] long *endOffset,
508     [out, retval] BSTR *text
509    );
510
511  /** @brief Unselects a range of text.
512   @param [in] selectionIndex
513    Index of selection to remove (0 based).
514   @retval S_OK
515   @retval E_INVALIDARG if bad [in] passed
516  */
517  HRESULT removeSelection
518    (
519     [in] long selectionIndex
520    );
521
522  /** @brief Sets the position of the caret.
523
524   The caret position/offset is that of the character logically following it,
525   e.g. to the right of it in a left to right language.
526
527   Setting the caret position may or may not alter the current selection.  A
528    change of the selection is notified to the accessibility event listeners with
529    an ::IA2_EVENT_TEXT_SELECTION_CHANGED event.
530
531   When the new caret position differs from the old one (which, of course, is the
532    standard case) this is notified to the accessibility event listeners with an
533    ::IA2_EVENT_TEXT_CARET_MOVED event.
534   @param [in] offset
535    The new index of the caret.  This caret is actually placed to the left side of
536    the character with that index.  An index of 0 places the caret so that the next
537    insertion goes before the first character.  An index of IAccessibleText::nCharacters
538    leads to insertion after the last character.  Refer to @ref _specialOffsets
539    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
540    for information about special offsets that can be used in %IAccessibleText methods.
541   @retval S_OK
542   @retval E_FAIL if the caret cannot be set
543   @retval E_INVALIDARG if bad [in] passed
544  */
545  HRESULT setCaretOffset
546    (
547     [in] long offset
548    );
549
550  /** @brief Changes the bounds of an existing selection.
551   @param [in] selectionIndex
552    Index of selection to change (0 based)
553   @param [in] startOffset
554    New starting offset (0 based)
555   @param [in] endOffset
556    New ending offset (0 based) - the offset of the character just past the last character of the selection.
557   @retval S_OK
558   @retval E_INVALIDARG if bad [in] passed
559   @note Refer to @ref _specialOffsets
560    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
561    for information about special offsets that can be used in %IAccessibleText methods.
562  */
563  HRESULT setSelection
564    (
565     [in] long selectionIndex,
566     [in] long startOffset,
567     [in] long endOffset
568    );
569
570  /** @brief Returns total number of characters.
571
572   Note that this may be different than the total number of bytes required to store the
573    text, if the text contains multi-byte characters.
574   @param [out] nCharacters
575   @retval S_OK
576  */
577  [propget] HRESULT nCharacters
578    (
579     [out, retval] long *nCharacters
580    );
581
582  /** @brief Makes a specific part of string visible on screen.
583   @param [in] startIndex
584    0 based character offset.
585   @param [in] endIndex
586    0 based character offset - the offset of the character just past the last character of the string.
587   @param [in] scrollType
588    Defines where the object should be placed on the screen.
589   @retval S_OK
590   @retval E_INVALIDARG if bad [in] passed
591   @note Refer to @ref _specialOffsets
592    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
593    for information about special offsets that can be used in %IAccessibleText methods.
594  */
595  HRESULT scrollSubstringTo
596    (
597     [in] long startIndex,
598     [in] long endIndex,
599     [in] enum IA2ScrollType scrollType
600    );
601
602  /** @brief Moves the top left of a substring to a specified location.
603
604   @param [in] startIndex
605    0 based character offset.
606   @param [in] endIndex
607    0 based character offset - the offset of the character just past the last character of the string.
608   @param [in] coordinateType
609    Specifies whether the coordinates are relative to the screen or the parent object.
610   @param [in] x
611    Defines the x coordinate.
612   @param [in] y
613    Defines the y coordinate.
614   @retval S_OK
615   @retval S_FALSE if the object is already at the specified location.
616   @retval E_INVALIDARG if bad [in] passed
617   @note Refer to @ref _specialOffsets
618    "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
619    for information about special offsets that can be used in %IAccessibleText methods.
620  */
621  HRESULT scrollSubstringToPoint
622    (
623     [in] long startIndex,
624     [in] long endIndex,
625     [in] enum IA2CoordinateType coordinateType,
626     [in] long x,
627     [in] long y
628    );
629
630  /** @brief Returns any inserted text.
631
632   Provided for use by the ::IA2_EVENT_TEXT_INSERTED and ::IA2_EVENT_TEXT_UPDATED
633    event handlers.
634
635   This data is only guaranteed to be valid while the thread notifying the event
636   continues. Once the handler has returned, the validity of the data depends on
637   how the server manages the life cycle of its objects. Also, note that the server
638   may have different life cycle management strategies for controls depending on
639   whether or not a control manages its children. Lists, trees, and tables can have
640   a large number of children and thus it's possible that the child objects for those
641   controls would only be created as needed. Servers should document their life cycle
642   strategy as this will be of interest to assistive technology or script engines
643   accessing data out of process or from other threads. Servers only need to save the
644   last inserted block of text and a scope of the entire application is adequate.
645
646   @param [out] newText
647    The text that was just inserted.
648   @retval S_OK
649   @retval S_FALSE If there is nothing to return, the values of IA2TextSegment
650    struct are set as follows:  text = NULL, start = 0, end = 0.
651
652  */
653  [propget] HRESULT newText
654    (
655     [out, retval] IA2TextSegment *newText
656    );
657
658  /** @brief Returns any removed text.
659
660   Provided for use by the IA2_EVENT_TEXT_REMOVED/UPDATED event handlers.
661
662   This data is only guaranteed to be valid while the thread notifying the event
663   continues. Once the handler has returned, the validity of the data depends on
664   how the server manages the life cycle of its objects. Also, note that the server
665   may have different life cycle management strategies for controls depending on
666   whether or not a control manages its children. Lists, trees, and tables can have
667   a large number of children and thus it's possible that the child objects for those
668   controls would only be created as needed. Servers should document their life cycle
669   strategy as this will be of interest to assistive technology or script engines
670   accessing data out of process or from other threads. Servers only need to save the
671   last removed block of text and a scope of the entire application is adequate.
672
673   @param [out] oldText
674    The text that was just removed.
675   @retval S_OK
676   @retval S_FALSE If there is nothing to return, the values of IA2TextSegment
677    struct are set as follows:  text = NULL, start = 0, end = 0.
678  */
679  [propget] HRESULT oldText
680    (
681     [out, retval] IA2TextSegment *oldText
682    );
683
684}
685