- auto slf = Toolkit::TextLabel::DownCast(self);
- auto txt = slf.GetProperty(Toolkit::TextLabel::Property::TEXT).Get<std::string>();
- auto txt_size = txt.size();
-
- auto range = Dali::Accessibility::Range{};
-
- switch(boundary)
- {
- case Dali::Accessibility::TextBoundary::CHARACTER:
- {
- if(offset < txt_size)
- {
- range.content = txt[offset];
- range.startOffset = offset;
- range.endOffset = offset + 1;
- }
- }
- break;
- case Dali::Accessibility::TextBoundary::WORD:
- case Dali::Accessibility::TextBoundary::LINE:
- {
- auto txt_c_string = txt.c_str();
- auto breaks = std::vector<char>(txt_size, 0);
- if(boundary == Dali::Accessibility::TextBoundary::WORD)
- Accessibility::Accessible::FindWordSeparationsUtf8((const utf8_t*)txt_c_string, txt_size, "", breaks.data());
- else
- Accessibility::Accessible::FindLineSeparationsUtf8((const utf8_t*)txt_c_string, txt_size, "", breaks.data());
- auto index = 0u;
- auto counter = 0u;
- while(index < txt_size && counter <= offset)
- {
- auto start = index;
- if(breaks[index])
- {
- while(breaks[index])
- index++;
- counter++;
- }
- else
- {
- if(boundary == Dali::Accessibility::TextBoundary::WORD)
- index++;
- if(boundary == Dali::Accessibility::TextBoundary::LINE)
- counter++;
- }
- if((counter > 0) && ((counter - 1) == offset))
- {
- range.content = txt.substr(start, index - start + 1);
- range.startOffset = start;
- range.endOffset = index + 1;
- }
- if(boundary == Dali::Accessibility::TextBoundary::LINE)
- index++;
- }
- }
- break;
- case Dali::Accessibility::TextBoundary::SENTENCE:
- {
- /* not supported by efl */
- }
- break;
- case Dali::Accessibility::TextBoundary::PARAGRAPH:
- {
- /* Paragraph is not supported by libunibreak library */
- }
- break;
- default:
- break;
- }
-
- return range;