1*3a700b0aSSteve Yin /**************************************************************
2*3a700b0aSSteve Yin  *
3*3a700b0aSSteve Yin  * Licensed to the Apache Software Foundation (ASF) under one
4*3a700b0aSSteve Yin  * or more contributor license agreements.  See the NOTICE file
5*3a700b0aSSteve Yin  * distributed with this work for additional information
6*3a700b0aSSteve Yin  * regarding copyright ownership.  The ASF licenses this file
7*3a700b0aSSteve Yin  * to you under the Apache License, Version 2.0 (the
8*3a700b0aSSteve Yin  * "License"); you may not use this file except in compliance
9*3a700b0aSSteve Yin  * with the License.  You may obtain a copy of the License at
10*3a700b0aSSteve Yin  *
11*3a700b0aSSteve Yin  *   http://www.apache.org/licenses/LICENSE-2.0
12*3a700b0aSSteve Yin  *
13*3a700b0aSSteve Yin  * Unless required by applicable law or agreed to in writing,
14*3a700b0aSSteve Yin  * software distributed under the License is distributed on an
15*3a700b0aSSteve Yin  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*3a700b0aSSteve Yin  * KIND, either express or implied.  See the License for the
17*3a700b0aSSteve Yin  * specific language governing permissions and limitations
18*3a700b0aSSteve Yin  * under the License.
19*3a700b0aSSteve Yin  *
20*3a700b0aSSteve Yin  *************************************************************/
215fdc4257SSteve Yin 
225fdc4257SSteve Yin #include "stdafx.h"
235fdc4257SSteve Yin #include "UAccCOM2.h"
245fdc4257SSteve Yin #include "AccHypertext.h"
255fdc4257SSteve Yin 
26*3a700b0aSSteve Yin 
275fdc4257SSteve Yin using namespace com::sun::star::accessibility;
285fdc4257SSteve Yin using namespace com::sun::star::uno;
295fdc4257SSteve Yin 
305fdc4257SSteve Yin /////////////////////////////////////////////////////////////////////////////
315fdc4257SSteve Yin //
325fdc4257SSteve Yin /**
335fdc4257SSteve Yin    * Get special selection.
345fdc4257SSteve Yin    * @param startOffset Start selection offset.
355fdc4257SSteve Yin    * @param endOffset   End selection offset.
365fdc4257SSteve Yin    * @param success     Variant to accept the result of if the method call is successful.
375fdc4257SSteve Yin    * @return Result.
385fdc4257SSteve Yin */
395fdc4257SSteve Yin STDMETHODIMP CAccHypertext::addSelection(long startOffset, long endOffset)
405fdc4257SSteve Yin {
415fdc4257SSteve Yin 
425fdc4257SSteve Yin     return CAccTextBase::get_addSelection(startOffset, endOffset);
435fdc4257SSteve Yin }
445fdc4257SSteve Yin 
455fdc4257SSteve Yin 
465fdc4257SSteve Yin /**
475fdc4257SSteve Yin    * Get special attributes.
485fdc4257SSteve Yin    * @param offset Offset.
495fdc4257SSteve Yin    * @param startOffset Variant to accept start offset.
505fdc4257SSteve Yin    * @param endOffset   Variant to accept end offset.
515fdc4257SSteve Yin    * @param textAttributes     Variant to accept attributes.
525fdc4257SSteve Yin    * @return Result.
535fdc4257SSteve Yin */
545fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_attributes(long offset, long * startOffset, long * endOffset, BSTR * textAttributes)
555fdc4257SSteve Yin {
565fdc4257SSteve Yin 
575fdc4257SSteve Yin     return CAccTextBase::get_attributes(offset, startOffset, endOffset, textAttributes);
585fdc4257SSteve Yin }
595fdc4257SSteve Yin 
605fdc4257SSteve Yin /**
615fdc4257SSteve Yin    * Get caret position.
625fdc4257SSteve Yin    * @param offset     Variant to accept caret offset.
635fdc4257SSteve Yin    * @return Result.
645fdc4257SSteve Yin */
655fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_caretOffset(long * offset)
665fdc4257SSteve Yin {
675fdc4257SSteve Yin 
685fdc4257SSteve Yin     return CAccTextBase::get_caretOffset(offset);
695fdc4257SSteve Yin }
705fdc4257SSteve Yin 
715fdc4257SSteve Yin /**
725fdc4257SSteve Yin    * Get character count.
735fdc4257SSteve Yin    * @param nCharacters  Variant to accept character count.
745fdc4257SSteve Yin    * @return Result.
755fdc4257SSteve Yin */
765fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_characterCount(long * nCharacters)
775fdc4257SSteve Yin {
785fdc4257SSteve Yin 
795fdc4257SSteve Yin     return CAccTextBase::get_characterCount(nCharacters);
805fdc4257SSteve Yin }
815fdc4257SSteve Yin 
825fdc4257SSteve Yin /**
835fdc4257SSteve Yin    * Get character extents.
845fdc4257SSteve Yin    * @param offset  Offset.
855fdc4257SSteve Yin    * @param x Variant to accpet x position.
865fdc4257SSteve Yin    * @param y Variant to accpet y position.
875fdc4257SSteve Yin    * @param width Variant to accpet width.
885fdc4257SSteve Yin    * @param Height Variant to accpet height.
895fdc4257SSteve Yin    * @return Result.
905fdc4257SSteve Yin */
915fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_characterExtents(long offset, IA2CoordinateType coordType, long * x, long * y, long * width, long * height)
925fdc4257SSteve Yin {
935fdc4257SSteve Yin 
945fdc4257SSteve Yin     return CAccTextBase::get_characterExtents(offset, coordType, x, y, width, height);
955fdc4257SSteve Yin }
965fdc4257SSteve Yin 
975fdc4257SSteve Yin /**
985fdc4257SSteve Yin    * Get slections count.
995fdc4257SSteve Yin    * @param nSelections Variant to accpet slections count.
1005fdc4257SSteve Yin    * @return Result.
1015fdc4257SSteve Yin */
1025fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_nSelections(long * nSelections)
1035fdc4257SSteve Yin {
1045fdc4257SSteve Yin 
1055fdc4257SSteve Yin     return CAccTextBase::get_nSelections(nSelections);
1065fdc4257SSteve Yin }
1075fdc4257SSteve Yin 
1085fdc4257SSteve Yin /**
1095fdc4257SSteve Yin    * Get offset of some special point.
1105fdc4257SSteve Yin    * @param x X position of one point.
1115fdc4257SSteve Yin    * @param x Y position of one point.
1125fdc4257SSteve Yin    * @param coordType Type.
1135fdc4257SSteve Yin    * @param offset Variant to accept offset.
1145fdc4257SSteve Yin    * @return Result.
1155fdc4257SSteve Yin */
1165fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_offsetAtPoint(long x, long y, IA2CoordinateType coordType, long * offset)
1175fdc4257SSteve Yin {
1185fdc4257SSteve Yin     return CAccTextBase::get_offsetAtPoint(x, y, coordType, offset);
1195fdc4257SSteve Yin }
1205fdc4257SSteve Yin 
1215fdc4257SSteve Yin /**
1225fdc4257SSteve Yin    * Get selection range.
1235fdc4257SSteve Yin    * @param selection selection count.
1245fdc4257SSteve Yin    * @param startOffset Variant to accept the start offset of special selection.
1255fdc4257SSteve Yin    * @param endOffset Variant to accept the end offset of special selection.
1265fdc4257SSteve Yin    * @return Result.
1275fdc4257SSteve Yin */
1285fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_selection(long selection, long * startOffset, long * endOffset)
1295fdc4257SSteve Yin {
1305fdc4257SSteve Yin 
1315fdc4257SSteve Yin     return CAccTextBase::get_selection(selection, startOffset, endOffset);
1325fdc4257SSteve Yin }
1335fdc4257SSteve Yin 
1345fdc4257SSteve Yin /**
1355fdc4257SSteve Yin    * Get special text.
1365fdc4257SSteve Yin    * @param startOffset Start position of special range.
1375fdc4257SSteve Yin    * @param endOffset   End position of special range.
1385fdc4257SSteve Yin    * @param text        Variant to accept the text of special range.
1395fdc4257SSteve Yin    * @return Result.
1405fdc4257SSteve Yin */
1415fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_text(long startOffset, long endOffset, BSTR * text)
1425fdc4257SSteve Yin {
1435fdc4257SSteve Yin 
1445fdc4257SSteve Yin     return CAccTextBase::get_text(startOffset, endOffset, text);
1455fdc4257SSteve Yin }
1465fdc4257SSteve Yin 
1475fdc4257SSteve Yin /**
1485fdc4257SSteve Yin    * Get special text before some position.
1495fdc4257SSteve Yin    * @param offset Special position.
1505fdc4257SSteve Yin    * @param boundaryType Boundary type.
1515fdc4257SSteve Yin    * @param startOffset Variant to accept the start offset.
1525fdc4257SSteve Yin    * @param endOffset   Variant to accept the end offset.
1535fdc4257SSteve Yin    * @param text        Variant to accept the special text.
1545fdc4257SSteve Yin    * @return Result.
1555fdc4257SSteve Yin */
1565fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_textBeforeOffset(long offset, IA2TextBoundaryType boundaryType, long * startOffset, long * endOffset, BSTR * text)
1575fdc4257SSteve Yin {
1585fdc4257SSteve Yin 
1595fdc4257SSteve Yin     return CAccTextBase::get_textBeforeOffset(offset, boundaryType,
1605fdc4257SSteve Yin             startOffset, endOffset, text);
1615fdc4257SSteve Yin }
1625fdc4257SSteve Yin 
1635fdc4257SSteve Yin /**
1645fdc4257SSteve Yin    * Get special text after some position.
1655fdc4257SSteve Yin    * @param offset Special position.
1665fdc4257SSteve Yin    * @param boundaryType Boundary type.
1675fdc4257SSteve Yin    * @param startOffset Variant to accept the start offset.
1685fdc4257SSteve Yin    * @param endOffset   Variant to accept the end offset.
1695fdc4257SSteve Yin    * @param text        Variant to accept the special text.
1705fdc4257SSteve Yin    * @return Result.
1715fdc4257SSteve Yin */
1725fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_textAfterOffset(long offset, IA2TextBoundaryType boundaryType, long * startOffset, long * endOffset, BSTR * text)
1735fdc4257SSteve Yin {
1745fdc4257SSteve Yin 
1755fdc4257SSteve Yin     return CAccTextBase::get_textAfterOffset(offset, boundaryType,
1765fdc4257SSteve Yin             startOffset, endOffset, text);
1775fdc4257SSteve Yin }
1785fdc4257SSteve Yin 
1795fdc4257SSteve Yin /**
1805fdc4257SSteve Yin    * Get special text at some position.
1815fdc4257SSteve Yin    * @param offset Special position.
1825fdc4257SSteve Yin    * @param boundaryType Boundary type.
1835fdc4257SSteve Yin    * @param startOffset Variant to accept the start offset.
1845fdc4257SSteve Yin    * @param endOffset   Variant to accept the end offset.
1855fdc4257SSteve Yin    * @param text        Variant to accept the special text.
1865fdc4257SSteve Yin    * @return Result.
1875fdc4257SSteve Yin */
1885fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_textAtOffset(long offset, IA2TextBoundaryType boundaryType, long * startOffset, long * endOffset, BSTR * text)
1895fdc4257SSteve Yin {
1905fdc4257SSteve Yin 
1915fdc4257SSteve Yin     return CAccTextBase::get_textAtOffset(offset, boundaryType,
1925fdc4257SSteve Yin                                           startOffset, endOffset, text);
1935fdc4257SSteve Yin }
1945fdc4257SSteve Yin 
1955fdc4257SSteve Yin /**
1965fdc4257SSteve Yin    * Remove selection.
1975fdc4257SSteve Yin    * @param selectionIndex Special selection index
1985fdc4257SSteve Yin    * @param success Variant to accept the memthod called result.
1995fdc4257SSteve Yin    * @return Result.
2005fdc4257SSteve Yin */
2015fdc4257SSteve Yin STDMETHODIMP CAccHypertext::removeSelection(long selectionIndex)
2025fdc4257SSteve Yin {
2035fdc4257SSteve Yin 
2045fdc4257SSteve Yin     return CAccTextBase::removeSelection(selectionIndex);
2055fdc4257SSteve Yin }
2065fdc4257SSteve Yin 
2075fdc4257SSteve Yin /**
2085fdc4257SSteve Yin    * Set caret position.
2095fdc4257SSteve Yin    * @param offset Special position.
2105fdc4257SSteve Yin    * @param success Variant to accept the memthod called result.
2115fdc4257SSteve Yin    * @return Result.
2125fdc4257SSteve Yin */
2135fdc4257SSteve Yin STDMETHODIMP CAccHypertext::setCaretOffset(long offset)
2145fdc4257SSteve Yin {
2155fdc4257SSteve Yin 
2165fdc4257SSteve Yin     return CAccTextBase::setCaretOffset(offset);
2175fdc4257SSteve Yin }
2185fdc4257SSteve Yin 
2195fdc4257SSteve Yin /**
2205fdc4257SSteve Yin    * Set special selection.
2215fdc4257SSteve Yin    * @param selectionIndex Special selection index.
2225fdc4257SSteve Yin    * @param startOffset start position.
2235fdc4257SSteve Yin    * @param endOffset end position.
2245fdc4257SSteve Yin    * @param success Variant to accept the memthod called result.
2255fdc4257SSteve Yin    * @return Result.
2265fdc4257SSteve Yin */
2275fdc4257SSteve Yin STDMETHODIMP CAccHypertext::setSelection(long selectionIndex, long startOffset, long endOffset)
2285fdc4257SSteve Yin {
2295fdc4257SSteve Yin 
2305fdc4257SSteve Yin     return CAccTextBase::setSelection(selectionIndex, startOffset,
2315fdc4257SSteve Yin                                       endOffset);
2325fdc4257SSteve Yin }
2335fdc4257SSteve Yin 
2345fdc4257SSteve Yin /**
2355fdc4257SSteve Yin    * Get characters count.
2365fdc4257SSteve Yin    * @param nCharacters Variant to accept the characters count.
2375fdc4257SSteve Yin    * @return Result.
2385fdc4257SSteve Yin */
2395fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_nCharacters(long * nCharacters)
2405fdc4257SSteve Yin {
2415fdc4257SSteve Yin 
2425fdc4257SSteve Yin     return CAccTextBase::get_nCharacters(nCharacters);
2435fdc4257SSteve Yin }
2445fdc4257SSteve Yin 
2455fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_newText( IA2TextSegment *newText)
2465fdc4257SSteve Yin {
2475fdc4257SSteve Yin     return CAccTextBase::get_newText(newText);
2485fdc4257SSteve Yin }
2495fdc4257SSteve Yin 
2505fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_oldText( IA2TextSegment *oldText)
2515fdc4257SSteve Yin {
2525fdc4257SSteve Yin     return CAccTextBase::get_oldText(oldText);
2535fdc4257SSteve Yin }
2545fdc4257SSteve Yin 
2555fdc4257SSteve Yin /**
2565fdc4257SSteve Yin    * Scroll to special sub-string .
2575fdc4257SSteve Yin    * @param startIndex Start index of sub string.
2585fdc4257SSteve Yin    * @param endIndex   End index of sub string.
2595fdc4257SSteve Yin    * @return Result.
2605fdc4257SSteve Yin */
2615fdc4257SSteve Yin STDMETHODIMP CAccHypertext::scrollSubstringToPoint(long startIndex, long endIndex,enum IA2CoordinateType coordinateType, long x, long y )
2625fdc4257SSteve Yin {
2635fdc4257SSteve Yin 
2645fdc4257SSteve Yin     return CAccTextBase::scrollSubstringToPoint(startIndex, endIndex, coordinateType, x, y);
2655fdc4257SSteve Yin }
2665fdc4257SSteve Yin STDMETHODIMP CAccHypertext::scrollSubstringTo(long startIndex, long endIndex,enum IA2ScrollType scrollType)
2675fdc4257SSteve Yin {
2685fdc4257SSteve Yin 
2695fdc4257SSteve Yin     return CAccTextBase::scrollSubstringTo(startIndex, endIndex,scrollType);
2705fdc4257SSteve Yin }
2715fdc4257SSteve Yin 
2725fdc4257SSteve Yin /**
2735fdc4257SSteve Yin    * Get hyperlink count.
2745fdc4257SSteve Yin    * @param hyperlinkCount Variant to accpet hyperlink count.
2755fdc4257SSteve Yin    * @return Result.
2765fdc4257SSteve Yin */
2775fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_nHyperlinks(long *hyperlinkCount)
2785fdc4257SSteve Yin {
2795fdc4257SSteve Yin 
2805fdc4257SSteve Yin 	CHECK_ENABLE_INF
2815fdc4257SSteve Yin 
2825fdc4257SSteve Yin     ENTER_PROTECTED_BLOCK
2835fdc4257SSteve Yin 
2845fdc4257SSteve Yin     // #CHECK#
2855fdc4257SSteve Yin     if(hyperlinkCount == NULL)
2865fdc4257SSteve Yin         return E_INVALIDARG;
2875fdc4257SSteve Yin     // #CHECK XInterface#
2885fdc4257SSteve Yin     if(!pHyperText.is())
2895fdc4257SSteve Yin     {
2905fdc4257SSteve Yin         return E_FAIL;
2915fdc4257SSteve Yin     }
2925fdc4257SSteve Yin 
2935fdc4257SSteve Yin     *hyperlinkCount = pHyperText->getHyperLinkCount();
2945fdc4257SSteve Yin     return S_OK;
2955fdc4257SSteve Yin 
2965fdc4257SSteve Yin     LEAVE_PROTECTED_BLOCK
2975fdc4257SSteve Yin }
2985fdc4257SSteve Yin 
2995fdc4257SSteve Yin /**
3005fdc4257SSteve Yin    * Get special hyperlink.
3015fdc4257SSteve Yin    * @param index Special hyperlink index.
3025fdc4257SSteve Yin    * @param hyperlink Variant to accept special hyperlink via index.
3035fdc4257SSteve Yin    * @return Result.
3045fdc4257SSteve Yin */
3055fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_hyperlink(long index,IAccessibleHyperlink **hyperlink)
3065fdc4257SSteve Yin {
3075fdc4257SSteve Yin 
3085fdc4257SSteve Yin 	CHECK_ENABLE_INF
3095fdc4257SSteve Yin 
3105fdc4257SSteve Yin     ENTER_PROTECTED_BLOCK
3115fdc4257SSteve Yin 
3125fdc4257SSteve Yin     // #CHECK#
3135fdc4257SSteve Yin     if(hyperlink == NULL)
3145fdc4257SSteve Yin         return E_INVALIDARG;
3155fdc4257SSteve Yin     // #CHECK XInterface#
3165fdc4257SSteve Yin     if(!pHyperText.is())
3175fdc4257SSteve Yin     {
3185fdc4257SSteve Yin         return E_FAIL;
3195fdc4257SSteve Yin     }
3205fdc4257SSteve Yin 
3215fdc4257SSteve Yin     Reference<XAccessibleHyperlink> pRLink = pHyperText->getHyperLink(index);
3225fdc4257SSteve Yin     if(!pRLink.is())
3235fdc4257SSteve Yin     {
3245fdc4257SSteve Yin         *hyperlink = NULL;
3255fdc4257SSteve Yin         return E_FAIL;
3265fdc4257SSteve Yin     }
3275fdc4257SSteve Yin 
3285fdc4257SSteve Yin     IAccessibleHyperlink* plink = NULL;
329*3a700b0aSSteve Yin 	HRESULT hr = CoCreateInstance( CLSID_AccHyperLink, NULL, CLSCTX_SERVER ,
3305fdc4257SSteve Yin                                    IID_IAccessibleHyperlink,
3315fdc4257SSteve Yin                                    (void **)&plink);
3325fdc4257SSteve Yin     if( SUCCEEDED(hr) )
3335fdc4257SSteve Yin     {
3345fdc4257SSteve Yin         IUNOXWrapper* wrapper = NULL;
3355fdc4257SSteve Yin         plink->QueryInterface(IID_IUNOXWrapper, (void**)&wrapper);
3365fdc4257SSteve Yin         if(wrapper)
3375fdc4257SSteve Yin         {
3385fdc4257SSteve Yin             wrapper->put_XSubInterface((long)pRLink.get()/*pXI*/);
3395fdc4257SSteve Yin             wrapper->Release();
3405fdc4257SSteve Yin         }
3415fdc4257SSteve Yin         *hyperlink = plink;
3425fdc4257SSteve Yin         return S_OK;
3435fdc4257SSteve Yin     }
3445fdc4257SSteve Yin 
3455fdc4257SSteve Yin     return E_FAIL;
3465fdc4257SSteve Yin 
3475fdc4257SSteve Yin     LEAVE_PROTECTED_BLOCK
3485fdc4257SSteve Yin }
3495fdc4257SSteve Yin 
3505fdc4257SSteve Yin /**
3515fdc4257SSteve Yin    * Returns the index of the hyperlink that is associated with this character index.
3525fdc4257SSteve Yin    * @param charIndex Special char index.
3535fdc4257SSteve Yin    * @param hyperlinkIndex Variant to accept special hyperlink index.
3545fdc4257SSteve Yin    * @return Result.
3555fdc4257SSteve Yin */
3565fdc4257SSteve Yin STDMETHODIMP CAccHypertext::get_hyperlinkIndex(long charIndex, long *hyperlinkIndex)
3575fdc4257SSteve Yin {
3585fdc4257SSteve Yin 
3595fdc4257SSteve Yin 	CHECK_ENABLE_INF
3605fdc4257SSteve Yin 
3615fdc4257SSteve Yin     ENTER_PROTECTED_BLOCK
3625fdc4257SSteve Yin 
3635fdc4257SSteve Yin     // #CHECK#
3645fdc4257SSteve Yin     if(hyperlinkIndex == NULL)
3655fdc4257SSteve Yin         return E_INVALIDARG;
3665fdc4257SSteve Yin     // #CHECK XInterface#
3675fdc4257SSteve Yin     if(!pHyperText.is())
3685fdc4257SSteve Yin     {
3695fdc4257SSteve Yin         return E_FAIL;
3705fdc4257SSteve Yin     }
3715fdc4257SSteve Yin 
3725fdc4257SSteve Yin     *hyperlinkIndex = pHyperText->getHyperLinkIndex(charIndex);
3735fdc4257SSteve Yin     return S_OK;
3745fdc4257SSteve Yin 
3755fdc4257SSteve Yin     LEAVE_PROTECTED_BLOCK
3765fdc4257SSteve Yin }
3775fdc4257SSteve Yin 
3785fdc4257SSteve Yin /**
3795fdc4257SSteve Yin    * Put UNO interface.
3805fdc4257SSteve Yin    * @param pXInterface UNO interface.
3815fdc4257SSteve Yin    * @return Result.
3825fdc4257SSteve Yin */
3835fdc4257SSteve Yin STDMETHODIMP CAccHypertext::put_XInterface(long pXInterface)
3845fdc4257SSteve Yin {
3855fdc4257SSteve Yin 
3865fdc4257SSteve Yin 
3875fdc4257SSteve Yin     ENTER_PROTECTED_BLOCK
3885fdc4257SSteve Yin 
3895fdc4257SSteve Yin     CAccTextBase::put_XInterface(pXInterface);
3905fdc4257SSteve Yin     //special query.
3915fdc4257SSteve Yin     if(pUNOInterface == NULL)
3925fdc4257SSteve Yin         return E_FAIL;
3935fdc4257SSteve Yin     Reference<XAccessibleContext> pRContext = pUNOInterface->getAccessibleContext();
3945fdc4257SSteve Yin     if( !pRContext.is() )
3955fdc4257SSteve Yin     {
3965fdc4257SSteve Yin         return E_FAIL;
3975fdc4257SSteve Yin     }
3985fdc4257SSteve Yin     Reference<XAccessibleHypertext> pRXI(pRContext,UNO_QUERY);
3995fdc4257SSteve Yin     if( !pRXI.is() )
4005fdc4257SSteve Yin         pHyperText = NULL;
4015fdc4257SSteve Yin     else
4025fdc4257SSteve Yin         pHyperText = pRXI.get();
4035fdc4257SSteve Yin     return S_OK;
4045fdc4257SSteve Yin 
4055fdc4257SSteve Yin     LEAVE_PROTECTED_BLOCK
4065fdc4257SSteve Yin }
407