[Libreoffice-commits] core.git: winaccessibility/source
Michael Weghorn (via logerrit)
logerrit at kemper.freedesktop.org
Wed Jul 21 12:36:21 UTC 2021
winaccessibility/source/UAccCOM/AccTextBase.cxx | 219 +++++++-----------------
1 file changed, 64 insertions(+), 155 deletions(-)
New commits:
commit 4ef0af9c14fa5242d3650728947c451493646e03
Author: Michael Weghorn <m.weghorn at posteo.de>
AuthorDate: Wed Jul 21 11:55:32 2021 +0100
Commit: Michael Weghorn <m.weghorn at posteo.de>
CommitDate: Wed Jul 21 14:35:49 2021 +0200
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 a18bdb3bc05e761704cc345a66a9d642bc4f4a0a
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 at posteo.de>
diff --git a/winaccessibility/source/UAccCOM/AccTextBase.cxx b/winaccessibility/source/UAccCOM/AccTextBase.cxx
index 796526b06225..aef8e80b572f 100644
--- a/winaccessibility/source/UAccCOM/AccTextBase.cxx
+++ b/winaccessibility/source/UAccCOM/AccTextBase.cxx
@@ -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()));
More information about the Libreoffice-commits
mailing list