wina11y: Deduplicate mapping for IA2TextBoundaryType
Add a local function 'lcl_matchIA2TextBoundaryType'
that returns the UNO equivalent for the boundary
type and use it from all 3 places that previously
did the same mapping. Also, use the constants defined
in the 'AccessibleTextType.hpp' header rather than
hard-coding the values here again.
It is unclear to me what the
// In New UNO IAccessibleText.idl these constant values are defined as follows:
comment refers to, which has been there since commit
commit a18bdb3bc0
Date: Thu Nov 14 08:18:05 2013 +0000
Integrate branch of IAccessible2
Just the winaccessibility directory initially.
Change-Id: Ia21abb8d7088646ad6c1f83b3a03e7add716b0c0
(I don't see any IAccessibleText.idl anywhere. Maybe that was
meant for some follow-up change that never took place
in the end?)
Change-Id: I6b8af2215948e8d0241e6f438c0f8cc00adc800f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119316
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
This commit is contained in:
@@ -25,6 +25,7 @@
|
||||
#include "AccTextBase.h"
|
||||
|
||||
#include <rtl/ustrbuf.hxx>
|
||||
#include <sal/log.hxx>
|
||||
#include <vcl/svapp.hxx>
|
||||
#include <o3tl/char16_t2wchar_t.hxx>
|
||||
|
||||
@@ -39,6 +40,36 @@
|
||||
using namespace css::accessibility;
|
||||
using namespace css::uno;
|
||||
|
||||
namespace
|
||||
{
|
||||
sal_Int16 lcl_matchIA2TextBoundaryType(IA2TextBoundaryType boundaryType)
|
||||
{
|
||||
switch (boundaryType)
|
||||
{
|
||||
case IA2_TEXT_BOUNDARY_CHAR:
|
||||
return com::sun::star::accessibility::AccessibleTextType::CHARACTER;
|
||||
case IA2_TEXT_BOUNDARY_WORD:
|
||||
return com::sun::star::accessibility::AccessibleTextType::WORD;
|
||||
case IA2_TEXT_BOUNDARY_SENTENCE:
|
||||
return com::sun::star::accessibility::AccessibleTextType::SENTENCE;
|
||||
case IA2_TEXT_BOUNDARY_PARAGRAPH:
|
||||
return com::sun::star::accessibility::AccessibleTextType::PARAGRAPH;
|
||||
case IA2_TEXT_BOUNDARY_LINE:
|
||||
return com::sun::star::accessibility::AccessibleTextType::LINE;
|
||||
case IA2_TEXT_BOUNDARY_ALL:
|
||||
// assert here, better handle it directly at call site
|
||||
assert(false
|
||||
&& "No match for IA2_TEXT_BOUNDARY_ALL, handle at call site.");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
SAL_WARN("winaccessibility", "Unmatched text boundary type: " << boundaryType);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Construction/Destruction
|
||||
|
||||
@@ -522,61 +553,20 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP CAccTextBase::get_textBeforeOffset(long offset
|
||||
if(!pRXText.is())
|
||||
return E_FAIL;
|
||||
|
||||
// In New UNO IAccessibleText.idl these constant values are defined as follows:
|
||||
|
||||
// const long TEXT_BOUNDARY_CHAR = -1;
|
||||
// const long TEXT_BOUNDARY_TO_CURSOR_POS = -2;
|
||||
// const long TEXT_BOUNDARY_START_OF_WORD = -3;
|
||||
// const long TEXT_BOUNDARY_END_OF_WORD = -4;
|
||||
// const long TEXT_BOUNDARY_START_OF_SENTENCE = -5;
|
||||
// const long TEXT_BOUNDARY_END_OF_SENTENCE = -6;
|
||||
// const long TEXT_BOUNDARY_START_OF_LINE = -7;
|
||||
// const long TEXT_BOUNDARY_END_OF_LINE = -8;
|
||||
|
||||
// In UNO, the corresponding values are as follows:
|
||||
|
||||
// const short CHARACTER = 1;
|
||||
// const short WORD = 2;
|
||||
// const short SENTENCE = 3;
|
||||
// const short PARAGRAPH = 4;
|
||||
// const short LINE = 5;
|
||||
// const short GLYPH = 6;
|
||||
// const short ATTRIBUTE_RUN = 7;
|
||||
|
||||
|
||||
long lUnoBoundaryType;
|
||||
|
||||
switch(boundaryType)
|
||||
if (boundaryType == IA2_TEXT_BOUNDARY_ALL)
|
||||
{
|
||||
case IA2_TEXT_BOUNDARY_CHAR:
|
||||
lUnoBoundaryType = 1; // CHARACTER;
|
||||
break;
|
||||
case IA2_TEXT_BOUNDARY_WORD:
|
||||
lUnoBoundaryType = 2; // WORD;
|
||||
break;
|
||||
case IA2_TEXT_BOUNDARY_SENTENCE:
|
||||
lUnoBoundaryType = 3; // SENTENCE;
|
||||
break;
|
||||
case IA2_TEXT_BOUNDARY_LINE:
|
||||
lUnoBoundaryType = 5; // LINE;
|
||||
break;
|
||||
case IA2_TEXT_BOUNDARY_PARAGRAPH:
|
||||
lUnoBoundaryType = 4;
|
||||
break;
|
||||
case IA2_TEXT_BOUNDARY_ALL:
|
||||
{
|
||||
long nChar;
|
||||
get_nCharacters( &nChar );
|
||||
*startOffset = 0;
|
||||
*endOffset = nChar;
|
||||
return get_text(0, nChar, text);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return E_FAIL;
|
||||
long nChar;
|
||||
get_nCharacters( &nChar );
|
||||
*startOffset = 0;
|
||||
*endOffset = nChar;
|
||||
return get_text(0, nChar, text);
|
||||
}
|
||||
|
||||
TextSegment segment = GetXInterface()->getTextBeforeIndex( offset, sal_Int16(lUnoBoundaryType));
|
||||
const sal_Int16 nUnoBoundaryType = lcl_matchIA2TextBoundaryType(boundaryType);
|
||||
if (nUnoBoundaryType < 0)
|
||||
return E_FAIL;
|
||||
|
||||
TextSegment segment = GetXInterface()->getTextBeforeIndex(offset, nUnoBoundaryType);
|
||||
OUString ouStr = segment.SegmentText;
|
||||
SysFreeString(*text);
|
||||
*text = SysAllocString(o3tl::toW(ouStr.getStr()));
|
||||
@@ -609,60 +599,20 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP CAccTextBase::get_textAfterOffset(long offset,
|
||||
if(!pRXText.is())
|
||||
return E_FAIL;
|
||||
|
||||
// In New UNO IAccessibleText.idl these constant values are defined as follows:
|
||||
|
||||
// const long TEXT_BOUNDARY_CHAR = -1;
|
||||
// const long TEXT_BOUNDARY_TO_CURSOR_POS = -2;
|
||||
// const long TEXT_BOUNDARY_START_OF_WORD = -3;
|
||||
// const long TEXT_BOUNDARY_END_OF_WORD = -4;
|
||||
// const long TEXT_BOUNDARY_START_OF_SENTENCE = -5;
|
||||
// const long TEXT_BOUNDARY_END_OF_SENTENCE = -6;
|
||||
// const long TEXT_BOUNDARY_START_OF_LINE = -7;
|
||||
// const long TEXT_BOUNDARY_END_OF_LINE = -8;
|
||||
|
||||
// In UNO, the corresponding values are as follows:
|
||||
|
||||
// const short CHARACTER = 1;
|
||||
// const short WORD = 2;
|
||||
// const short SENTENCE = 3;
|
||||
// const short PARAGRAPH = 4;
|
||||
// const short LINE = 5;
|
||||
// const short GLYPH = 6;
|
||||
// const short ATTRIBUTE_RUN = 7;
|
||||
|
||||
|
||||
long lUnoBoundaryType;
|
||||
switch(boundaryType)
|
||||
if (boundaryType == IA2_TEXT_BOUNDARY_ALL)
|
||||
{
|
||||
case IA2_TEXT_BOUNDARY_CHAR:
|
||||
lUnoBoundaryType = 1; // CHARACTER;
|
||||
break;
|
||||
case IA2_TEXT_BOUNDARY_WORD:
|
||||
lUnoBoundaryType = 2; // WORD;
|
||||
break;
|
||||
case IA2_TEXT_BOUNDARY_SENTENCE:
|
||||
lUnoBoundaryType = 3; // SENTENCE;
|
||||
break;
|
||||
case IA2_TEXT_BOUNDARY_LINE:
|
||||
lUnoBoundaryType = 5; // LINE;
|
||||
break;
|
||||
case IA2_TEXT_BOUNDARY_PARAGRAPH:
|
||||
lUnoBoundaryType = 4;
|
||||
break;
|
||||
case IA2_TEXT_BOUNDARY_ALL:
|
||||
{
|
||||
long nChar;
|
||||
get_nCharacters( &nChar );
|
||||
*startOffset = 0;
|
||||
*endOffset = nChar;
|
||||
return get_text(0, nChar, text);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return E_FAIL;
|
||||
long nChar;
|
||||
get_nCharacters( &nChar );
|
||||
*startOffset = 0;
|
||||
*endOffset = nChar;
|
||||
return get_text(0, nChar, text);
|
||||
}
|
||||
|
||||
TextSegment segment = GetXInterface()->getTextBehindIndex( offset, sal_Int16(lUnoBoundaryType));
|
||||
const sal_Int16 nUnoBoundaryType = lcl_matchIA2TextBoundaryType(boundaryType);
|
||||
if (nUnoBoundaryType < 0)
|
||||
return E_FAIL;
|
||||
|
||||
TextSegment segment = GetXInterface()->getTextBehindIndex(offset, nUnoBoundaryType);
|
||||
OUString ouStr = segment.SegmentText;
|
||||
SysFreeString(*text);
|
||||
*text = SysAllocString(o3tl::toW(ouStr.getStr()));
|
||||
@@ -695,61 +645,20 @@ COM_DECLSPEC_NOTHROW STDMETHODIMP CAccTextBase::get_textAtOffset(long offset, IA
|
||||
if(!pRXText.is())
|
||||
return E_FAIL;
|
||||
|
||||
// In New UNO IAccessibleText.idl these constant values are defined as follows:
|
||||
|
||||
// const long TEXT_BOUNDARY_CHAR = -1;
|
||||
// const long TEXT_BOUNDARY_TO_CURSOR_POS = -2;
|
||||
// const long TEXT_BOUNDARY_START_OF_WORD = -3;
|
||||
// const long TEXT_BOUNDARY_END_OF_WORD = -4;
|
||||
// const long TEXT_BOUNDARY_START_OF_SENTENCE = -5;
|
||||
// const long TEXT_BOUNDARY_END_OF_SENTENCE = -6;
|
||||
// const long TEXT_BOUNDARY_START_OF_LINE = -7;
|
||||
// const long TEXT_BOUNDARY_END_OF_LINE = -8;
|
||||
|
||||
// In UNO, the corresponding values are as follows:
|
||||
|
||||
// const short CHARACTER = 1;
|
||||
// const short WORD = 2;
|
||||
// const short SENTENCE = 3;
|
||||
// const short PARAGRAPH = 4;
|
||||
// const short LINE = 5;
|
||||
// const short GLYPH = 6;
|
||||
// const short ATTRIBUTE_RUN = 7;
|
||||
|
||||
|
||||
long lUnoBoundaryType;
|
||||
|
||||
switch(boundaryType)
|
||||
if (boundaryType == IA2_TEXT_BOUNDARY_ALL)
|
||||
{
|
||||
case IA2_TEXT_BOUNDARY_CHAR:
|
||||
lUnoBoundaryType = 1; // CHARACTER;
|
||||
break;
|
||||
case IA2_TEXT_BOUNDARY_WORD:
|
||||
lUnoBoundaryType = 2; // WORD;
|
||||
break;
|
||||
case IA2_TEXT_BOUNDARY_SENTENCE:
|
||||
lUnoBoundaryType = 3; // SENTENCE;
|
||||
break;
|
||||
case IA2_TEXT_BOUNDARY_LINE:
|
||||
lUnoBoundaryType = 5; // LINE;
|
||||
break;
|
||||
case IA2_TEXT_BOUNDARY_PARAGRAPH:
|
||||
lUnoBoundaryType = 4;
|
||||
break;
|
||||
case IA2_TEXT_BOUNDARY_ALL:
|
||||
{
|
||||
long nChar;
|
||||
get_nCharacters( &nChar );
|
||||
*startOffset = 0;
|
||||
*endOffset = nChar;
|
||||
return get_text(0, nChar, text);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return E_FAIL;
|
||||
long nChar;
|
||||
get_nCharacters( &nChar );
|
||||
*startOffset = 0;
|
||||
*endOffset = nChar;
|
||||
return get_text(0, nChar, text);
|
||||
}
|
||||
|
||||
TextSegment segment = GetXInterface()->getTextAtIndex( offset, sal_Int16(lUnoBoundaryType));
|
||||
const sal_Int16 nUnoBoundaryType = lcl_matchIA2TextBoundaryType(boundaryType);
|
||||
if (nUnoBoundaryType < 0)
|
||||
return E_FAIL;
|
||||
|
||||
TextSegment segment = GetXInterface()->getTextAtIndex(offset, nUnoBoundaryType);
|
||||
OUString ouStr = segment.SegmentText;
|
||||
SysFreeString(*text);
|
||||
*text = SysAllocString(o3tl::toW(ouStr.getStr()));
|
||||
|
||||
Reference in New Issue
Block a user