Merge pull request #18735 from CrazySteve0605/wordNavigationForChineseText
### Link to issue number:
blocked by #18548, closes #4075, related #16237 and [a part of OSPP 2025](https://summer-ospp.ac.cn/org/prodetail/25d3e0488?list=org&navpage=org) of NVDA.
### Summary of the issue:
### Description of user facing changes:
Chinese text can be navigated by word via system caret or review cursor.
### Description of developer facing changes:
### Description of development approach:
- [ ] update `textUtils`
- [x] add `WordSegment` module
- [x] create `WordSegmentationStrategy' as an abstract base class to select segmentation strategy based on text content, following Strategy Pattern
- [x] implement `ChineseWordSegmentationStrategy` (for Chinese text)
- [x] implement `UniscribeWordSegmentationStrategy` (for other languages as default strategy)
- [x] update `textUtils/__init__.py`
- [x] add `WordSegmenter` class for word segmentation, integrating segmentation strategies
- [x] update `textInfos/offsets.py`
- [x] replace `useUniscribe` with `useUniscribeForCharOffset` & `useWordSegmenterForWordOffset` for segmentation extensions
- [x] integrate `WordSegmenter` for calculating word offsets
- [ ] update document
### Testing strategy:
### Known issues with pull request:
Word segmentation functionality was integrated in `OffsetsTextInfo`.
In `OffsetsTextInfo`, word segmentation is based on Uniscribe by default and Unicode as a fall-back.
Subclasses of OffsetsTextInfo
#### Supported
1. `NVDAObjectTextInfo`
2. `InputCompositionTextInfo`:
3. `JABTextInfo`
4. `SimpleResultTextInfo`
5. `VirtualBufferTextInfo`: use self-hosted function to calculate offset and invoke iits superclass' `_getWordOffsets`
#### Unsupported
1. `DisplayModelTextInfo`: straightly disable
2. `EditTextInfo`: straightly use Uniscribe
3. `ScintillaTextInfo`: entirely use self-defined 'word', for Scintilla-based editors such Notepad++ source/NVDAObjects/window/scintilla.py
4. `VsTextEditPaneTextInfo`: use a special COM automation API, for Microsoft Visual Studio and Microsoft SQL Server Management Studio source/appModules/devenv.py
5. `TextFrameTextInfo`: use self-defined 'word', based on PowerPoint's COM object, for PowerPoint's text frame source/appModules/powerpnt.py
6. `LwrTextInfo`: based on pre-computed words during related progress, for structured text using 'LineWordResult' (e.g. Windows OCR) source/contentRecog/__init__.py
#### Partial Supported
Some architectures totally or priorly use native difination of a 'word', which softwares depend on may not be able to use the new functionallity.
1. `IA2TextTextInfo`: override and fall back source/NVDAObjects/IAccessible/\_\_init\_\_.py
### Code Review Checklist:
<!--
This checklist is a reminder of things commonly forgotten in a new PR.
Authors, please do a self-review of this pull-request.
Check items to confirm you have thought about the relevance of the item.
Where items are missing (eg unit / system tests), please explain in the PR.
To check an item `- [ ]` becomes `- [x]`, note spacing.
You can also check the checkboxes after the PR is created.
A detailed explanation of this checklist is available here:
https://github.com/nvaccess/nvda/blob/master/projectDocs/dev/githubPullRequestTemplateExplanationAndExamples.md#code-review-checklist
-->
- [ ] Documentation:
- Change log entry
- User Documentation
- Developer / Technical Documentation
- Context sensitive help for GUI changes
- [ ] Testing:
- Unit tests
- System (end to end) tests
- Manual testing
- [ ] UX of all users considered:
- Speech
- Braille
- Low Vision
- Different web browsers
- Localization in other languages / culture than English
- [ ] API is compatible with existing add-ons.
- [ ] Security precautions taken.