Merge master into chinese word segmentation#20041
Merged
Merged
Conversation
This pull request updates translations to languages being tracked from Crowdin. Co-authored-by: GitHub Actions <github-actions@github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Inspired by nvaccess#19686 Summary of the issue: We regularly run into problems where the GUI being updated frequently causing issues. We fix this using a ratelimiter/debouncer. We do not have a generic debouncer in NVDA. Description of user facing changes: none Description of developer facing changes: Adds a generic debouncer to NVDA Description of development approach: This pull request introduces a new debouncing utility for limiting the frequency of function calls, primarily to improve GUI responsiveness and reduce unnecessary processing in NVDA. The main changes include the addition of the debounceLimiter decorator, its integration into the browseMode.py file for filtering elements, and comprehensive unit tests to verify its behavior. The pull request also modernizes type annotations throughout browseMode.py for improved readability and consistency. Debounce utility and integration: Added a new debounceLimiter decorator in utils/debounce.py to control the execution rate of functions, supporting both GUI and daemon threads. Integrated debounceLimiter into the filtering logic of the elements list dialog in browseMode.py, replacing manual timer handling for improved efficiency and code clarity
Beta to master
This pull request updates translations to languages being tracked from Crowdin. Co-authored-by: GitHub Actions <github-actions@github.com>
…es, excluding lib exp and pdb files which are not needed. (nvaccess#19748) Fixes nvaccess#19653 ### Summary of the issue: The 32 bit synthDriverhost runtime introduced in PR nvaccess#19432 includes some extra lib exp and pdb files which are not necessary and just take up space. ### Description of user facing changes: Slightly reduces the size of NVDA. ### Description of developer facing changes: ### Description of development approach: When building the main NvDA distribution with py2exe, only copy py and dll files in the _synthDrivers32 directory, which now ignores lib exp and pdb files. ### Testing strategy: * [x] Build locally, ensuring that the unneeded lib exp and pdb files are not included in the _synthDrivers32 directory. Ensure NvDA runs and that the sapi4 and 32 bit sapi5 synthDrivers can be selected and used. * [x] Create a try build, also ensuring all of the above. ### Known issues with pull request: None known. ### Code Review Checklist: - [x] Documentation: - Change log entry - User Documentation - Developer / Technical Documentation - Context sensitive help for GUI changes - [x] Testing: - Unit tests - System (end to end) tests - Manual testing - [x] UX of all users considered: - Speech - Braille - Low Vision - Different web browsers - Localization in other languages / culture than English - [x] API is compatible with existing add-ons. - [x] Security precautions taken.
…xists. (nvaccess#19749) ### Summary of the issue: The 32 bit synthDriverhost runtime executable introduced in PR nvaccess#19432 is not signed. ### Description of user facing changes: ### Description of developer facing changes: ### Description of development approach: When building the main dist target with scons, also sign nvda_synthDriverHost.exe if it exists. This is an improvement over the previous try in pr nvaccess#19683, where now the path is passed into the lambda by value so that it does not change in the for loop after being captured. ### Testing strategy: * [x] Compiled with scons synthDriverHost32Runtime and scons dist, providing a signing certificate *Confirmed that nvda_synthDriverHost.exe was signed. * [x] Run the above tests on a try build from this pr. ### Known issues with pull request: None known.
Closes nvaccess#19559 ### Summary of the issue: Addons state is saved in a pickle file. ### Description of user facing changes: None ### Description of developer facing changes: The add-ons state file is now in JSON. The `fromPickledDict` method on `AddonsState` has been renamed to `fromDict`, but a shim has been introduced. ### Description of development approach: Switch to using lists instead of sets when populating AddonsState from dict and serializing to dict, as json.dump doesn't support serializing sets. Added methods to read in a pickled add-ons state file and emit a good JSON representation of that add-ons state. My approach here was to discard invalid values rather than raising an error, so we have the greatest chance of success. This does mean that the conversion may be lossy. When updating NVDA, convert from pickle to JSON for the system config's add-ons state file. This is done because this is essentially the only context in which we should write to the system config directory and which we know will be executed. User copies perform the migration on first run by migrating if and only if no addonsState.json exists, but addonsState.pickle does. User config migration is done by the installed copy as (a) this is the only time we can guarantee that the user's NVDA config wil be present; and (b) to minimise the amount of pickles we load while elevated. In both cases, a backup of the old state file is kept (as `addonsState.pickle.bak`). When running on secure desktops, the pickled state will not be read, even if it is the only addonsState file in the system config. This should never happen, as the installer is responsible for migrating the system config's add-ons state file. In other cases, the fallback of reading the pickled state will attempt to save the JSON state and back up the pickled state, but this is not required in order for the load to succede. This is so when running in secure mode or with access to the user config restricted, add-ons continue to function properly. This does remove the security benefit of migrating away from pickle, but there's no other option other than ripping pickle support out entirely and breaking everyone's add-ons state entirely and having them manually migrate. ### Testing strategy: Unit and system tests. Manual testing as follows: 1. Installed 2025.3.3 2. Installed add-ons (combination of 2026.1 compatible and incompatible, enabled and disabled) and restarted NVDA 3. Copied user config to system config 4. Upgraded using self-signed launcher 5. Ensured that the installer migrated the system addons state, and the installed copy migrated the user addons state on first run Also "upgraded" my 2026.2 alpha copy with this launcher to ensure that the migration works as expected if updating within the 2026.x series. ### Known issues with pull request: None known (see notes above for some caviats about the approach though)
Beta to master
…nvaccess#19762) Fixes nvaccess#19654 ### Summary of the issue: The 32 bit synthDriverhost runtime introduced in PR nvaccess#19432 Does not contain correct version information in its executable. ### Description of user facing changes: ### Description of developer facing changes: ### Description of development approach: * synthDriverHost's setup-runtime.py py2exe script now takes version and publisher as commandline arguments, so that these can be set on the executable dynamically. * The github workflow and sconstruct pass the correct version and publisher to the setup-runtime.py py2exe script. ### Testing strategy: * [x] Locally compiled with scons synthDriverHost32Runtime, providing custom version and publisher. Confirmed that the synthDriverHost executable contains correct version and publisher information. * [x] Create try bild. Confirming the same as above. ### Known issues with pull request: None known.
Link to issue number: None Summary of the issue: Liblouis 3.37.0 was released. Description of how this pull request fixes the issue: Update LibLouis.
Summary of the issue: In Magnifier documentation: bold is used at some places. Such formatting has not been used until now in the User Guide, so we'd better be consistent here. It probably does not bring so much information for blind users who usually have not font attribute reporting enabled (speech / braille). Also worth noting that such formatting had been removed from NVDA remote documentatation when it has been integrated in NVDA's user guide. At last such formatting makes the translators work a bit harder, so if it's not necessary, let's not use it. Also, a list is unwantedly split in two parts.
Closes nvaccess#19643 Summary of the issue: When selecting Bangla language for NVDA, the whole interface is in English. This is because there had been an attempt to have NVDA translated in Bangla around 2022. Unfortunately, almost no translation at all has reached an NVDA release. As a result: In the Bangla interface file, no string at all is translated In the symbols.dic file, the vast majority of symbols are just English. Only 6 complex symbols have been modified. And among these 6 symbols: one of them is written ". sentence ending" (with an extra space), thus it does not actually control anything the decimal point just has no replacement, making the rule apparently malformed or at least un-useful and harder to understand Description of user facing changes: Bangla won't be proposed as an NVDA language in the languages list. When using Bengali voice, the 4 valid Bangla/Bengali complex symbols will be reported in English. But users using Bengali voice will benefit of any change done in English symbol file since 2022 and in the future.
Beta to master
Fixes nvaccess#19635 Summary of the issue: When using Ctrl+Alt+Arrow to navigate vertical list, both the system focus (row) and the navigator object (cell) change simultaneously. In getCurrentFocusCoordinates(), system focus had priority 3 and navigator had priority 4. As a result, the magnifier always followed the row instead of the active cell. Description of user facing changes: Magnifier should follow properly on (Ctrl+Alt+Arrow). No behavior change for: Tab / normal focus navigation Caret navigation (browse mode) Numpad navigator movement Description of developer facing changes: focusManager.py Inverted priorities 3 and 4 in getCurrentFocusCoordinates(): If both system focus and navigator change, navigator wins. System focus only wins if navigator did not move.
Closes nvaccess#19268 After installing or updating NVDA, users sometimes experience issues that a Windows restart fixes. This PR adds a post-install dialog giving users clear options for what to do next. Description of user facing changes After a successful installation or update, NVDA shows a dialog recommending a Windows restart. Restart Windows: Immediately restarts Windows. Start NVDA: Starts the newly installed copy without restarting (not shown when running elevated). Exit NVDA: Closes without starting NVDA or restarting Windows. If the Windows restart command fails, an error dialog informs the user to restart manually. Silent installs are unaffected. Description of developer facing changes source/gui/installerGui.py: Added _restartWindows() — issues shutdown /r /t 0 via subprocess.run with CREATE_NO_WINDOW. Returns True if successful. Added _showPostInstallDialog(isUpdate, startAfterInstall) — shows the post-install MessageDialog with up to 3 buttons (CUSTOM_1, CUSTOM_2, CANCEL) and handles all follow-up actions. Modified doInstall() to call _showPostInstallDialog instead of the old gui.messageBox for non-silent installs. user_docs/en/userGuide.md: Added #RestartWindowsAfterInstall section; updated installation description. user_docs/en/changes.md: Added new-feature entry under 2026.2.
Fixes nvaccess#19634 ### Summary of the issue: Windows throws errors when rapidly requesting a window handle on the secure desktop. This cause visual tearing and a crash of NVDA. ### Description of user facing changes: Avoid crash and tearing of controls ### Description of developer facing changes: Add custom handling of changing settings categories for secure mode. ### Description of development approach: This pull request introduces a debounced category change mechanism in the `NVDASettingsDialog` to improve stability and user experience, particularly when running on a secure desktop. * Added a debounce mechanism (50ms delay) for handling category changes in `NVDASettingsDialog` when running on a secure desktop, using a timer to prevent rapid or duplicate category switches. This helps avoid potential issues with UI responsiveness or event handling in secure desktop environments. [[1]](diffhunk://#diff-6486e3db41b2272c03b84758b460cc4269d5ca218874391f58633f5d9b3968b1R6131-R6133) [[2]](diffhunk://#diff-6486e3db41b2272c03b84758b460cc4269d5ca218874391f58633f5d9b3968b1L6193-R6234) * Introduced the use of `isRunningOnSecureDesktop` from `utils.security` to determine when to apply the debounce logic. * Added type annotations to the `onCategoryChange` method and new internal variables for better code clarity and maintainability. [[1]](diffhunk://#diff-6486e3db41b2272c03b84758b460cc4269d5ca218874391f58633f5d9b3968b1L748-R749) [[2]](diffhunk://#diff-6486e3db41b2272c03b84758b460cc4269d5ca218874391f58633f5d9b3968b1R6131-R6133) * Ensured proper cleanup of the debounce timer and related state in the `Destroy` method to prevent resource leaks. An alternative approach with error suppression was tried, but visual tearing still occurred. https://github.com/nvaccess/nvda/compare/try-gui-crash-2?expand=1 ### Testing strategy: Tested STR in nvaccess#19634 ### Known issues with pull request: Other instances may exist of rapidly requesting a window handle. Should this be reported to wxWidgets or microsoft? Should we create a generic monkey patch or something? From basic investigating, the only real way to cause this could be through updating controls in the settings dialog, or the config profiles dialog.
beta to master
Summary of the issue: A deprecation message recommended to use gui.messageDialog.MessageDialog but the gui.message module does not exist. Description of user facing changes: The deprecation message will now mention gui.message.MessageDialog. Description of developer facing changes: Fixed both the deprecation message and docstrings mentioning the non-existing gui.messageDialog module.
This pull request updates translations to languages being tracked from Crowdin. Co-authored-by: GitHub Actions <github-actions@github.com>
Merged translations from Crowdin
Spawned from nvaccess#19740 ### Summary of the issue: It was hard to track all the different places language codes are normalized in NVDA. ### Description of developer facing changes: This pull request standardizes language code formatting across the NVDA codebase by introducing and using the `toXmlLang` and `toNvdaLang` utility functions from `speechXml`. This ensures consistent handling of language codes (e.g., converting between underscores and hyphens) when interacting with speech synthesis engines and related components. ### Description of development approach: Replaced manual string manipulation for language codes (such as `replace("_", "-")` or `replace("-", "_")`) with the use of `toXmlLang` and `toNvdaLang` utility functions in `speech.py`, `_espeak.py`, `espeak.py`, and `oneCore.py` to ensure consistent formatting for speech engine interoperability.
This pull request refactors type annotations and import statements in `source/gui/settingsDialogs.py` to use modern Python type hinting syntax and improve import organization. The changes primarily involve replacing `typing` module type hints with built-in generic types, as well as reordering some import statements for clarity.
Beta to master
…` collection. (nvaccess#19998) Summary of the issue: The NVDAObjects.UIA.UIATextInfo._controlFieldUIACachedPropertyIDs collection contains duplicate elements. Description of user facing changes: None Description of developer facing changes: None Description of development approach: Remove duplicate elements.
This pull request updates translations to languages being tracked from Crowdin. Co-authored-by: GitHub Actions <github-actions@github.com>
Fixes nvaccess#19711 Summary of the issue: The magnifier could freeze after a _ctypes.COMError (RPC_E_DISCONNECTED) raised by the UIA API (Notepad RichEditD2DPT). The exception was not caught in focusManager.py, causing the magnifier timer loop to stop permanently while the user continued navigating normally. Description of user facing changes: Magnifier no longer freezes on COM/UIA disconnection. Timer loop is protected and always reschedules. After 3 consecutive errors, automatic recovery is attempted. Fullscreen magnifier reinitializes the Magnification API if needed. Clean stop with feedback if recovery fails. Description of developer facing changes: focusManager.py Broadened except (...) → except Exception Added debug logging. magnifier.py Wrapped _updateMagnifier() in try/except Exception Added _consecutiveErrors counter. Added _attemptRecovery() base method. fullscreenMagnifier.py Broadened exception handling. Protected mouse move calls. Added recovery via MagUninitialize() → MagInitialize(). spotlightManager.py Wrapped magnification calls in _executeStep() to prevent animation breakage. Description of development approach: Prevent unhandled COM exceptions. Protect the timer loop from breaking. Add controlled recovery after repeated failures. Ensure clean failure instead of silent freeze.
fixes nvaccess#19991 fixes nvaccess#19990 Summary of the issue: The magnifier follow-mode behavior was inconsistent: disabling follow modes could still cause view movement, toggling follow settings could trigger an immediate jump, and “Toggle all follow settings” did not provide the expected disable/restore flow. Description of user facing changes: The magnifier view now remains stable when follow modes are toggled, stays frozen when all follow modes are disabled, and “Toggle all follow settings” now works as a true two-step action: disable all first, then restore the previous follow configuration. Description of developer facing changes: Focus tracking logic in the magnifier now preserves and reuses the last reported coordinates when no enabled follow source produces a new event, and follow-setting toggle commands no longer force an immediate focus refresh. The all-follow toggle state handling was updated to implement disable-all and restore semantics. Description of development approach: The fix was implemented by adjusting the focus source resolution flow to avoid fallback-driven movement, removing forced update calls from follow toggle commands, and aligning global follow-toggle state transitions with the intended UX behavior (disable all -> restore previous states).
Closes nvaccess#19624 Summary of the issue: Magnifier does not match Windows Magnifier behavior. Attempting to "zoom in" with NVDA+shift+plus while magnifier is not running results in a warning rather than starting the magnifier. Description of user facing changes: NVDA+shift+plus can now start the magnifier if it wasn't previously running. Keyset continues to serve as a "zoom in" command once magnifier is running. Description of developer facing changes: None. Description of development approach: A check has been added to the zoom function in commands.py that will call toggleMagnifier() if the magnifier is not already active and the zoom direction is positive. Otherwise, zoom behaves as expected.
This pull request updates translations to languages being tracked from Crowdin. Co-authored-by: GitHub Actions <github-actions@github.com>
Summary of the issue: On French fr-fr keyboard layout, the magnifier zoom out gesture NVDA+shift+_ does not exist: "" is on the "8" key and the name of the key is "8", not "". Description of user facing changes: NVDA+shift+) can be used as magnifier zoom out gesture. On fr-fr keyboard layout, it is located next to the zoom in gesture. NVDA+shift+_ remains assigned, for other French keyboard layouts (fr-ca, fr-ch). Both gestures work on fr-be layout.
### Summary of the issue: crazy-max/ghaction-virustotal@v4 uses node 2020. This will [be retired in June](https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/). crazy-max/ghaction-virustotal@v5.0.0 uses Node 2024 and is backwards compatible. ### Description of user facing changes: None ### Description of developer facing changes: None ### Description of development approach: Updated tag version ### Testing strategy: CI ### Known issues with pull request: None
…fied Chinese (nvaccess#20019) PengKun, a contributor from the Chinese community, is planning extensive changes to this dictionary. The attached files contain detailed logs and the rationale for these changes, which are provided here for archival purposes.
pre - nvaccess#19473 parts of nvaccess#19810 Summary of the issue: nvaccess#19810 was still to big so I focused on types changes and some functions renaming to go accordingly. All these changes are nescessary for futur magnifier implementations. Description of user facing changes: "default"s have been removed so it can be seen in the doc Description of developer facing changes: replaced MagnifierPosition with MagnifierParameters for better handling of size, place and filter of the magnifier. added a MagnifierType to handle magnifiers different types. Description of development approach: This work was split out from PR nvaccess#19473 to make review and integration easier. We first added the new structure: MagnifierParameters for size/position/filter, and MagnifierType for futur mode switching.
Summary of the issue: actions/upload-artifact@v6 and actions/download-artifact@v7 use node 2020. This will be retired in June. actions/upload-artifact@v7.0.1 and actions/download-artifact@v8.0.1 use Node 2024 and are backwards compatible.
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: GitHub Actions <github-actions@github.com> Co-authored-by: wencong <manchen_0528@outlook.com>
This pull request updates translations to languages being tracked from Crowdin. --------- Co-authored-by: GitHub Actions <github-actions@github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Fixes nvaccess#20015 Summary of the issue: After cancelling an add-on download by closing the Add-on Store and choosing "Yes", the store can get into a bad state. If the user opens it again and starts another download, NVDA can raise: AttributeError: 'NoneType' object has no attribute 'submit' Closing the store again after that can also raise: AttributeError: 'NoneType' object has no attribute 'shutdown' Description of user facing changes: After cancelling a download, the Add-on Store can be used again normally. Starting another download no longer throws those exceptions. Closing the store again after that also works as expected. Description of developer facing changes: AddonFileDownloader now tracks state per download attempt. This prevents an older cancelled worker from interfering with a later retry of the same add-on. Description of development approach: The fix updates the downloader so each download attempt has its own state and temporary file path. After cancelAll(), the downloader can recreate its executor and be reused safely. When a worker finishes, it now checks whether it still belongs to the active attempt before updating progress, cleaning up files, or completing the download.
…ss#20025) fix nvaccess#20012 Summary of the issue: When Windows Magnifier was already running, NVDA Magnifier could still start because MagInitialize() succeeds even when the API is held by another process. Only MagSetFullscreenTransform() would fail, triggering the recovery loop — which itself only tested MagInitialize() and MagSetFullscreenColorEffect(), both of which succeed, causing it to falsely declare victory and restart the timer indefinitely. Description of user facing changes: NVDA now shows a clear message ("Cannot start magnifier: the magnification API is unavailable. Windows Magnifier may already be running.") when the magnification API cannot be fully initialized at startup. If the conflict occurs after startup, the recovery mechanism is now capped at 3 attempts before stopping the magnifier and notifying the user, preventing log spam. Description of developer facing changes: _initializeNativeMagnification() no longer uses @trackNativeMagnifierErrors — it now raises OSError on failure (including a MagSetFullscreenTransform probe that detects the Windows Magnifier conflict). _startMagnifier() catches this error, calls _stopMagnifier() to properly unregister the display change handler, and returns early. _attemptRecovery() reuses _initializeNativeMagnification() to avoid duplicating the probe logic, and is now capped by _MAX_RECOVERY_ATTEMPTS = 3. Description of development approach: The fix centers on making _initializeNativeMagnification() a reliable gate: it probes MagSetFullscreenTransform (the actual failing call) as part of initialization and raises on failure rather than silently returning. This single change fixes both the startup path and the recovery path, since _attemptRecovery() can delegate to the same method. A _recoveryAttempts counter (capped at _MAX_RECOVERY_ATTEMPTS) prevents the infinite restart loop when the API remains permanently unavailable.
31c9585
into
nvaccess:try-chineseWordSegmentation-staging
32 of 37 checks passed
cary-rowen
pushed a commit
to cary-rowen/nvda
that referenced
this pull request
May 27, 2026
commit e25f593 Author: wencong <manchen_0528@outlook.com> Date: Wed May 20 11:45:38 2026 +0800 Address review feedback for Chinese word segmentation (nvaccess#20178) This PR addresses selected review suggestions from Sean on PR nvaccess#19166 and syncs the branch with the latest master. Completed: - [x] Move the braille offset converter helper out of the nested function. - [x] Move the word segmentation braille converter import out of the local scope. - [x] Move the word segmentation initialization debug log into initialize(). - [x] Remove unsupported RuntimeError-specific handling around wordSeg.initialize(). - [x] Log word segmentation initializer resolution and execution failures. - [x] Add missing return type annotations for wordSegFlag properties. - [x] Remove redundant int annotations from IntFlag members. - [x] Move test helper objects out of nested scopes and add type hints. - [x] Move braille test configuration setup/cleanup into setUp and tearDown. - [x] Update the help ID casing for the word segmentation setting. - [x] Add a user guide section for the word segmentation setting. - [x] Move the Chinese word segmentation change log entries to 2026.3. - [x] Sync with the latest nvaccess/master. Remaining: - [ ] Confirm whether the new config option should be exposed in the UI. --------- Co-authored-by: Michael Curran <mick@nvaccess.org> Co-authored-by: Leonard de Ruijter <3049216+LeonarddeR@users.noreply.github.com> Co-authored-by: Sean Budd <sean@nvaccess.org> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> commit 887ad98 Merge: 9a6bc21 102a54e Author: Sean Budd <sean@nvaccess.org> Date: Mon May 18 16:23:14 2026 +1000 Merge branch 'master' into try-chineseWordSegmentation-staging commit 9a6bc21 Author: Wang Chong <306289287@qq.com> Date: Mon May 18 14:22:13 2026 +0800 Refactor Dicts Installation Logic in cppjieba's sconscript (nvaccess#20162) commit edf3429 Author: wencong <manchen_0528@outlook.com> Date: Tue May 12 08:26:06 2026 +0800 Remove reverted settings dialog debounce changes from Chinese word segmentation branch (nvaccess#20106) This removes settings dialog category-change debounce code that was accidentally reintroduced while resolving conflicts. That code was previously reverted by nvaccess#19846, so this branch should follow current master here and only keep the Document Navigation changes needed for Chinese word segmentation. This also removes an unrelated copyright-only change in browseMode.py. commit fab3060 Author: Wang Chong <306289287@qq.com> Date: Mon May 11 12:21:12 2026 +0800 Fixup merge master into Chinese Word Segmentation (nvaccess#20055) <!-- Please read and fill in the following template, for an explanation of the sections see: https://github.com/nvaccess/nvda/blob/master/projectDocs/dev/githubPullRequestTemplateExplanationAndExamples.md Please also note that the NVDA project has a Citizen and Contributor Code of Conduct which can be found at https://github.com/nvaccess/nvda/blob/master/CODE_OF_CONDUCT.md. NV Access expects that all contributors and other community members read and abide by the rules set out in this document while participating or contributing to this project. This includes creating or commenting on issues and pull requests. Please initially open PRs as a draft. When you would like a review, mark the PR as "ready for review". See https://github.com/nvaccess/nvda/blob/master/.github/CONTRIBUTING.md. --> <!-- Use Closes/Fixes/Resolves #xxx to link this PR to the issue it is responding to. --> <!-- 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. --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> commit 31c9585 Merge: 9edb45f d42d90c Author: Sean Budd <sean@nvaccess.org> Date: Mon May 4 09:25:02 2026 +1000 Merge master into chinese word segmentation (nvaccess#20041) <!-- Please read and fill in the following template, for an explanation of the sections see: https://github.com/nvaccess/nvda/blob/master/projectDocs/dev/githubPullRequestTemplateExplanationAndExamples.md Please also note that the NVDA project has a Citizen and Contributor Code of Conduct which can be found at https://github.com/nvaccess/nvda/blob/master/CODE_OF_CONDUCT.md. NV Access expects that all contributors and other community members read and abide by the rules set out in this document while participating or contributing to this project. This includes creating or commenting on issues and pull requests. Please initially open PRs as a draft. When you would like a review, mark the PR as "ready for review". See https://github.com/nvaccess/nvda/blob/master/.github/CONTRIBUTING.md. --> <!-- Use Closes/Fixes/Resolves #xxx to link this PR to the issue it is responding to. --> <!-- 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. --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: GitHub Actions <github-actions@github.com> Co-authored-by: Sascha Cowley <16543535+SaschaCowley@users.noreply.github.com> Co-authored-by: Peng-An Chen <andy72039@gmail.com> Co-authored-by: Sean Budd <sean@nvaccess.org> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Michael Curran <mick@nvaccess.org> Co-authored-by: GitHub Actions <actions@github.com> Co-authored-by: Bill Dengler <codeofdusk@gmail.com> Co-authored-by: Cyrille Bougot <cyrille.bougot2@laposte.net> Co-authored-by: Boumtchack <147637328+Boumtchack@users.noreply.github.com> Co-authored-by: Kefas Lungu <84945041+kefaslungu@users.noreply.github.com> Co-authored-by: Jani Kinnunen <janikinnunen340@gmail.com> Co-authored-by: Akash Kakkar <6381747+akash07k@users.noreply.github.com> Co-authored-by: makhlwf <78276231+makhlwf@users.noreply.github.com> Co-authored-by: Quin Gillespie <trypsynth@gmail.com> Co-authored-by: Bram Duvigneau <bram@bramd.nl> Co-authored-by: Luke Davis <8139760+XLTechie@users.noreply.github.com> Co-authored-by: audioses <67341000+audioses@users.noreply.github.com> Co-authored-by: gexgd0419 <55008943+gexgd0419@users.noreply.github.com> Co-authored-by: Cyrille Bougot <cyrille.bougot@laposte.net> Co-authored-by: Joseph Lee <joseph.lee22590@gmail.com> Co-authored-by: Christopher Proß <cpross@mailbox.org> Co-authored-by: Ryan McCleary <remccleary@gmail.com> Co-authored-by: wencong <manchen_0528@outlook.com> Co-authored-by: Emil-18 <135248352+Emil-18@users.noreply.github.com> Co-authored-by: Danil <50794055+Danstiv@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Noelia Ruiz Martínez <nrm1977@gmail.com> Co-authored-by: Sean Budd <seanbudd123@gmail.com> Co-authored-by: James Teh <jamie@jantrid.net> Co-authored-by: Thiago Seus <thiago.seus@yahoo.com.br> Co-authored-by: WangFeng Huang <1398969445@qq.com> Co-authored-by: ethanl-11 <124083447+ethanl-11@users.noreply.github.com> commit d42d90c Merge: 07d9b13 7f2d68f Author: cary-rowen <manchen_0528@outlook.com> Date: Fri May 1 22:21:05 2026 +0800 Merge latest master into chinese word segmentation branch commit 07d9b13 Merge: 9edb45f f7dc081 Author: cary-rowen <manchen_0528@outlook.com> Date: Mon Apr 20 12:03:50 2026 +0800 Merge latest master into try-chineseWordSegmentation-staging commit 9edb45f Merge: 096e985 4c9d616 Author: Sean Budd <sean@nvaccess.org> Date: Mon Apr 20 11:01:52 2026 +1000 Merge master into try-chineseWordSegmentation-staging (nvaccess#19747) commit 4c9d616 Author: cary-rowen <manchen_0528@outlook.com> Date: Thu Apr 9 22:19:56 2026 +0800 Fix textInfo word expansion test expectation commit 072b405 Author: cary-rowen <manchen_0528@outlook.com> Date: Thu Apr 9 22:00:30 2026 +0800 Fix word expansion without flowsTo commit 006277b Merge: 096e985 d8bf309 Author: Wang Chong <306289287@qq.com> Date: Fri Mar 6 00:35:58 2026 +0800 Merge branch 'master' commit 096e985 Author: Wang Chong <306289287@qq.com> Date: Mon Mar 2 12:02:27 2026 +0800 Fixup for Chinese Word Segmentation and Braille Output (nvaccess#19324) Summary of the issue: Some punctuations have extra separators (spaces) before or after them. Description of user facing changes: Braille output will be more accurate. commit 29d9f5a Merge: b50a0d5 9cafffb Author: Michael Curran <mick@nvaccess.org> Date: Thu Oct 30 12:12:25 2025 +1100 Merge pull request nvaccess#18865 from CrazySteve0605/brailleOutputForChinese blocked by nvaccess#18735, related nvaccess#1890 (comment), and [a part of OSPP 2025](https://summer-ospp.ac.cn/org/prodetail/25d3e0488?list=org&navpage=org) of NVDA. Braille output for Chinese become easier to read. The displayed braille and text are not aligned with each other in Braille Viewer, which shouldn't have an effect on reading from a braille displayer since only braille is transferred and the carets of raw text and output braille are aligned. <!-- 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. commit 9cafffb Author: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue Oct 28 22:26:13 2025 +0000 Pre-commit auto-fix commit 0d27c91 Merge: d2714a3 b50a0d5 Author: Michael Curran <mick@nvaccess.org> Date: Wed Oct 29 08:23:08 2025 +1000 Merge branch 'try-chineseWordSegmentation-staging' into brailleOutputForChinese commit b50a0d5 Merge: c86b760 db90fff Author: Michael Curran <mick@nvaccess.org> Date: Wed Oct 29 09:20:19 2025 +1100 Merge pull request nvaccess#18735 from CrazySteve0605/wordNavigationForChineseText blocked by nvaccess#18548, closes nvaccess#4075, related nvaccess#16237 and [a part of OSPP 2025](https://summer-ospp.ac.cn/org/prodetail/25d3e0488?list=org&navpage=org) of NVDA. Chinese text can be navigated by word via system caret or review cursor. - [ ] 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 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 1. `NVDAObjectTextInfo` 2. `InputCompositionTextInfo`: 3. `JABTextInfo` 4. `SimpleResultTextInfo` 5. `VirtualBufferTextInfo`: use self-hosted function to calculate offset and invoke iits superclass' `_getWordOffsets` 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 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 <!-- 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. commit db90fff Author: Wang Chong <306289287@qq.com> Date: Tue Oct 28 12:57:06 2025 +0800 remove duplicate importing lines commit d2714a3 Author: Wang Chong <306289287@qq.com> Date: Mon Oct 27 11:28:27 2025 +0800 fixup commit 042b778 Merge: b8ace76 c86b760 Author: Michael Curran <mick@nvaccess.org> Date: Mon Oct 27 11:47:18 2025 +1000 Merge branch 'try-chineseWordSegmentation-staging' into wordNavigationForChineseText commit c86b760 Merge: 4a4b1af 9e37e57 Author: Michael Curran <mick@nvaccess.org> Date: Mon Oct 27 11:45:35 2025 +1000 Merge branch 'master' into try-chineseWordSegmentation-staging commit b8ace76 Author: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat Oct 25 01:09:03 2025 +0000 Pre-commit auto-fix commit d32549f Author: Wang Chong <306289287@qq.com> Date: Sat Oct 25 09:03:22 2025 +0800 make word segmentation module reinitialized after settings are saved commit 2083095 Author: Wang Chong <306289287@qq.com> Date: Sat Oct 25 08:50:00 2025 +0800 fixup commit d55d077 Author: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu Oct 9 21:19:50 2025 +0000 Pre-commit auto-fix commit 085ba2f Merge: 80b0472 4a4b1af Author: Michael Curran <mick@nvaccess.org> Date: Fri Oct 10 07:17:56 2025 +1000 Merge branch 'try-chineseWordSegmentation-staging' into wordNavigationForChineseText commit 4a4b1af Merge: 093a825 42dfcfe Author: Michael Curran <mick@nvaccess.org> Date: Fri Oct 10 07:13:22 2025 +1000 Merge branch 'master' into try-chineseWordSegmentation-staging commit 80b0472 Author: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue Sep 30 05:12:16 2025 +0000 Pre-commit auto-fix commit f98b1b1 Author: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue Sep 30 05:10:50 2025 +0000 Pre-commit auto-fix commit d1373b2 Author: Wang Chong <306289287@qq.com> Date: Tue Sep 30 13:06:54 2025 +0800 fixup commit 9ab3dba Merge: 251811e 0940a73 Author: Wang Chong <306289287@qq.com> Date: Tue Sep 30 13:06:22 2025 +0800 Merge branch 'wordNavigationForChineseText' into brailleOutputForChinese commit 0940a73 Author: Wang Chong <306289287@qq.com> Date: Tue Sep 30 12:59:46 2025 +0800 fixup commit c3a8562 Author: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue Sep 30 03:25:34 2025 +0000 Pre-commit auto-fix commit 5e0e3fd Author: Wang Chong <306289287@qq.com> Date: Tue Sep 30 11:24:03 2025 +0800 simplify the logic for 'Auto' option in Word Segmentation Standard settings commit 552b42b Author: Wang Chong <306289287@qq.com> Date: Tue Sep 30 10:33:24 2025 +0800 fixup unittests commit 653e808 Author: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon Sep 29 22:58:20 2025 +0000 Pre-commit auto-fix commit b40d709 Author: Wang Chong <306289287@qq.com> Date: Tue Sep 30 06:56:48 2025 +0800 revert `Initialize Word Segmenters for Unused Languages:` checkbox and fixup the initialization logic commit face4bd Merge: 6f586fd 093a825 Author: Michael Curran <mick@nvaccess.org> Date: Mon Sep 29 12:09:28 2025 +1000 Merge branch 'try-chineseWordSegmentation-staging' into wordNavigationForChineseText commit 093a825 Merge: 4bc116d b327e23 Author: Michael Curran <mick@nvaccess.org> Date: Mon Sep 29 12:07:17 2025 +1000 Merge branch 'integrateCppJieba' into try-chineseWordSegmentation-staging commit b327e23 Merge: 30e855f b236fe6 Author: Michael Curran <mick@nvaccess.org> Date: Mon Sep 29 08:38:17 2025 +1000 Merge branch 'try-chineseWordSegmentation-staging' into integrateCPPJieba commit 251811e Author: Wang Chong <306289287@qq.com> Date: Sun Sep 28 08:04:06 2025 +0800 update changelog commit 3b7bf5f Author: Wang Chong <306289287@qq.com> Date: Sun Sep 28 08:02:59 2025 +0800 correct and simplify the offset calculations commit 9304a39 Merge: 2d7c596 6f586fd Author: Wang Chong <306289287@qq.com> Date: Sun Sep 28 08:02:28 2025 +0800 Merge branch 'wordNavigationForChineseText' into brailleOutputForChinese commit 6f586fd Author: Wang Chong <306289287@qq.com> Date: Sun Sep 28 07:58:07 2025 +0800 update changelog commit b69d466 Author: Wang Chong <306289287@qq.com> Date: Sun Sep 28 07:55:26 2025 +0800 fix up commit 9834b68 Author: Wang Chong <306289287@qq.com> Date: Sat Sep 27 09:16:37 2025 +0800 extract punctuation from `wordSegStrategy.py` to `wordSegUtils.py` commit 9479029 Author: Wang Chong <306289287@qq.com> Date: Sat Sep 27 09:15:51 2025 +0800 fixup commit f769457 Author: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat Sep 27 00:46:03 2025 +0000 Pre-commit auto-fix commit 2eec029 Author: Wang Chong <306289287@qq.com> Date: Sat Sep 27 08:40:57 2025 +0800 add unittest cases for `WordSegmenter` commit 43bfe03 Author: Wang Chong <306289287@qq.com> Date: Sat Sep 27 08:39:14 2025 +0800 make initialization of word segmenters conditional on language commit 111a24d Author: Wang Chong <306289287@qq.com> Date: Fri Sep 26 20:50:44 2025 +0800 update `wordSegSegmenter.py` to handle offsets at the end of the string commit 69617c4 Merge: 53b3870 fec70a9 Author: Wang Chong <306289287@qq.com> Date: Fri Sep 26 20:50:03 2025 +0800 Merge branch 'integrateCPPJieba' into wordNavigationForChineseText commit fec70a9 Merge: 30e855f b236fe6 Author: Wang Chong <306289287@qq.com> Date: Fri Sep 26 18:11:03 2025 +0800 Merge branch 'master' into integrateCPPJieba commit 53b3870 Author: Wang Chong <306289287@qq.com> Date: Thu Sep 25 23:09:55 2025 +0800 make `cppjieba` only available when NVDA's language is set to Chinese commit 250e700 Author: Wang Chong <306289287@qq.com> Date: Thu Sep 25 22:32:03 2025 +0800 update UI text for Uniscribe commit ccf07f9 Author: Wang Chong <306289287@qq.com> Date: Thu Sep 25 22:31:47 2025 +0800 correct method naming commit 38ec7ff Merge: dc23346 5562e70 Author: Wang Chong <306289287@qq.com> Date: Thu Sep 25 22:31:06 2025 +0800 Merge branch 'integrateCPPJieba' into wordNavigationForChineseText commit 5562e70 Merge: 30e855f 339af3e Author: Wang Chong <306289287@qq.com> Date: Thu Sep 25 22:29:07 2025 +0800 Merge branch 'master' into integrateCPPJieba commit 30e855f Merge: 2e730d6 dc22697 Author: Michael Curran <mick@nvaccess.org> Date: Mon Sep 22 18:20:36 2025 +1000 Merge branch 'try-chineseWordSegmentation-staging' into integrateCPPJieba commit dc23346 Author: Wang Chong <306289287@qq.com> Date: Sun Sep 21 22:58:31 2025 +0800 Update source/core.py Co-authored-by: Cyrille Bougot <cyrille.bougot2@laposte.net> commit 9537999 Author: Wang Chong <306289287@qq.com> Date: Sun Sep 21 22:52:10 2025 +0800 revert copyright header of `configSpec.py` commit 90660ba Author: Wang Chong <306289287@qq.com> Date: Sun Sep 21 22:24:18 2025 +0800 update `wordSegStrategy.py` commit 7ee08d0 Merge: a8955a3 2e730d6 Author: Wang Chong <306289287@qq.com> Date: Sun Sep 21 22:22:54 2025 +0800 Merge branch 'integrateCPPJieba' into wordNavigationForChineseText commit a8955a3 Author: Wang Chong <306289287@qq.com> Date: Sun Sep 21 22:19:19 2025 +0800 Revert "update module importing order and type annotations" This reverts commit 3bfbe59. commit 2e730d6 Author: Wang Chong <306289287@qq.com> Date: Sun Sep 21 00:20:19 2025 +0800 Update .gitattributes Co-authored-by: Sean Budd <seanbudd123@gmail.com> commit 194a69e Author: Wang Chong <306289287@qq.com> Date: Sun Sep 21 00:10:40 2025 +0800 avoid using compilation time path commit c2cbb24 Author: Wang Chong <306289287@qq.com> Date: Sat Sep 20 23:53:56 2025 +0800 Revert "Update projectDocs/dev/createDevEnvironment.md" This reverts commit 06070c1. commit 0f507d5 Merge: b3e08ee 5a557d0 Author: Wang Chong <306289287@qq.com> Date: Sat Sep 20 23:53:19 2025 +0800 Merge branch 'master' into integrateCPPJieba commit bac3210 Author: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat Sep 13 01:33:24 2025 +0000 Pre-commit auto-fix commit 97eb6dd Author: Wang Chong <306289287@qq.com> Date: Sat Sep 13 09:19:40 2025 +0800 handle punctuation spacing commit 2b1d4b3 Merge: cf3e115 984b6eb Author: Wang Chong <306289287@qq.com> Date: Fri Sep 12 19:12:00 2025 +0800 Merge branch 'integrateCPPJieba' into wordNavigationForChineseText commit 984b6eb Merge: b3e08ee 3d74061 Author: Wang Chong <306289287@qq.com> Date: Fri Sep 12 19:09:24 2025 +0800 Merge branch 'master' into integrateCPPJieba commit cf3e115 Author: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue Sep 9 16:49:47 2025 +0000 Pre-commit auto-fix commit 3a0badc Author: Wang Chong <306289287@qq.com> Date: Wed Sep 10 00:37:33 2025 +0800 update `wordSegStrategy.py` * add LRU caching commit f5087cc Merge: 3bfbe59 b3e08ee Author: Wang Chong <306289287@qq.com> Date: Wed Sep 10 00:24:14 2025 +0800 Merge branch 'integrateCPPJieba' into wordNavigationForChineseText commit b3e08ee Author: Wang Chong <306289287@qq.com> Date: Wed Sep 10 00:23:09 2025 +0800 update helper of `coojieba` commit bec5dc5 Merge: 09b1890 a210f97 Author: Wang Chong <306289287@qq.com> Date: Wed Sep 10 00:19:54 2025 +0800 Merge branch 'master' into integrateCPPJieba commit 09b1890 Author: Wang Chong <306289287@qq.com> Date: Sun Sep 7 19:04:29 2025 +0800 fix building script commit 00796fe Author: Wang Chong <306289287@qq.com> Date: Sun Sep 7 18:39:59 2025 +0800 revert installing script commit 30120f8 Author: Wang Chong <306289287@qq.com> Date: Sun Sep 7 18:38:36 2025 +0800 update building script commit 53158b6 Author: Wang Chong <306289287@qq.com> Date: Sun Sep 7 18:17:50 2025 +0800 update changelog commit 3bfbe59 Author: Wang Chong <306289287@qq.com> Date: Sun Sep 7 17:04:33 2025 +0800 update module importing order and type annotations commit b848e1b Author: Wang Chong <306289287@qq.com> Date: Sun Sep 7 16:28:01 2025 +0800 update `wordSegStrategy.py` commit abeb147 Merge: a1113d8 2955ca8 Author: Wang Chong <306289287@qq.com> Date: Sun Sep 7 12:29:00 2025 +0800 Merge branch 'integrateCPPJieba' into wordNavigationForChineseText commit 2955ca8 Author: Wang Chong <306289287@qq.com> Date: Sun Sep 7 12:28:14 2025 +0800 simplify helper of `cppjieba` * turn to build-in `Word` structure * remove some items we don't use commit a9281f6 Author: Wang Chong <306289287@qq.com> Date: Sat Sep 6 18:36:20 2025 +0800 update .gitattributes for .hpp header files commit 49cc1fe Author: Wang Chong <306289287@qq.com> Date: Sat Sep 6 18:31:05 2025 +0800 update cppjieba to the latest commit commit fe118ee Merge: 1869ed0 e6557a7 Author: Wang Chong <306289287@qq.com> Date: Sat Sep 6 18:27:32 2025 +0800 Merge branch 'master' into integrateCPPJieba commit 2d7c596 Author: Wang Chong <306289287@qq.com> Date: Fri Sep 5 00:09:16 2025 +0800 add word separator to optimize braille output for Chinese text * add a subclass of `OffsetConverter` to handle the offset mapping for raw text and separated one * add logic to invoke it when Chinese translation tables are used commit a1113d8 Author: Wang Chong <306289287@qq.com> Date: Thu Sep 4 14:07:24 2025 +0800 add `segmentedText` method commit c1fb4b8 Merge: 9e6a2e1 1869ed0 Author: Wang Chong <306289287@qq.com> Date: Thu Sep 4 12:50:22 2025 +0800 Merge branch 'integrateCPPJieba' into wordNavigationForChineseText commit 1869ed0 Author: Wang Chong <306289287@qq.com> Date: Thu Sep 4 12:41:29 2025 +0800 simplify the initialization of cppjieba drop off initialization of the keyword extractor which we don't need commit 11827fb Merge: 3e495d2 952db62 Author: Wang Chong <306289287@qq.com> Date: Thu Sep 4 09:51:52 2025 +0800 Merge branch 'master' into integrateCPPJieba commit 9e6a2e1 Author: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu Aug 28 11:17:31 2025 +0000 Pre-commit auto-fix commit 3b2d835 Author: Wang Chong <306289287@qq.com> Date: Thu Aug 28 19:11:05 2025 +0800 resolve deprecation commit a4edc9e Merge: 97b6db7 3e495d2 Author: Wang Chong <306289287@qq.com> Date: Thu Aug 28 19:05:26 2025 +0800 Merge branch 'integrateCPPJieba' into wordNavigationForChineseText commit 3e495d2 Author: Wang Chong <306289287@qq.com> Date: Thu Aug 28 18:13:11 2025 +0800 add wrappers for user dict management commit a643391 Merge: c853b64 c30a787 Author: Wang Chong <306289287@qq.com> Date: Thu Aug 28 18:10:09 2025 +0800 Merge branch 'master' into integrateCPPJieba commit 97b6db7 Author: Wang Chong <306289287@qq.com> Date: Sun Aug 24 23:47:59 2025 +0800 update for pyright checks commit 4a680ea Author: Wang Chong <306289287@qq.com> Date: Sun Aug 24 23:45:48 2025 +0800 make "Auto" the default option for word navigation commit 356c11c Author: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat Aug 23 15:35:45 2025 +0000 Pre-commit auto-fix commit 3ba56f0 Author: Wang Chong <306289287@qq.com> Date: Sat Aug 23 23:25:47 2025 +0800 add configuration for word navigation users can find it in NVDA settings -> Document Navigation -> Word Segmentation Method commit eeb96aa Author: Wang Chong <306289287@qq.com> Date: Sat Aug 23 20:33:54 2025 +0800 use multithreading for cppjieba's initialization commit 38b4bea Author: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu Aug 21 07:00:36 2025 +0000 Pre-commit auto-fix commit 3f54d62 Author: Wang Chong <306289287@qq.com> Date: Thu Aug 21 14:59:22 2025 +0800 add initialization logic to wordSeg module - add an decorator to easily add initializers - extract `cppjieba`'s initializer to fit the decorator commit 8244a76 Author: Wang Chong <306289287@qq.com> Date: Thu Aug 21 11:04:44 2025 +0800 make wordSegment module to make file structure clearer - create `wordSeg` package - migrate wordSegment module into wordSeg package and rename to wordSeg commit d69e8b7 Author: Wang Chong <306289287@qq.com> Date: Thu Aug 21 10:44:37 2025 +0800 add trailing commas in multi-line constructs commit 3c65868 Author: Wang Chong <306289287@qq.com> Date: Thu Aug 21 10:36:16 2025 +0800 update log commit ddd48e8 Author: Wang Chong <306289287@qq.com> Date: Thu Aug 21 10:33:28 2025 +0800 add type annotations commit 676fc42 Author: Wang Chong <306289287@qq.com> Date: Thu Aug 21 09:51:24 2025 +0800 add copyright header commit 0d40f0a Author: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed Aug 20 13:31:57 2025 +0000 Pre-commit auto-fix commit 407d4b2 Merge: 4adac07 adc22fb Author: Wang Chong <306289287@qq.com> Date: Wed Aug 20 21:27:13 2025 +0800 Merge branch 'integrateCPPJieba' into wordNavigationForChineseText commit 4adac07 Author: Wang Chong <306289287@qq.com> Date: Wed Aug 20 21:22:52 2025 +0800 update the word segmentation structure - redesign 2 properties of 'OffsetTextInfo' as enums to make them more configurable, inspired by @LeonarddeR - override them in some subclasses to simulate specific behaviors commit adc22fb Author: Wang Chong <306289287@qq.com> Date: Wed Aug 20 19:22:28 2025 +0800 add wrapper for word manager commit 19cad8a Merge: eba63ab 92f345e Author: Wang Chong <306289287@qq.com> Date: Wed Aug 20 17:35:03 2025 +0800 Merge branch 'master' into integrateCPPJieba commit f72d348 Author: Wang Chong <306289287@qq.com> Date: Mon Aug 18 15:06:19 2025 +0800 update type annotations commit 557f404 Author: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon Aug 18 04:09:20 2025 +0000 Pre-commit auto-fix commit da64cd8 Author: Wang Chong <306289287@qq.com> Date: Mon Aug 18 12:02:49 2025 +0800 update `displayModel.py` make `DisplayModelTextInfo`'s flag aligned with its superclass commit 81f2040 Author: Wang Chong <306289287@qq.com> Date: Mon Aug 18 11:55:36 2025 +0800 update `textInfos/offsets.py` - replace `useUniscribe` with `useUniscribeForCharOffset` & `useWordSegmenterForWordOffset` for segmentation extensions - integrate `WordSegmenter` for calculating word offsets commit 9f62f04 Author: Wang Chong <306289287@qq.com> Date: Mon Aug 18 11:54:41 2025 +0800 update `textUtils/__init__.py` add `WordSegmenter` class for word segmentation, integrating segmentation strategies commit b0ac081 Author: Wang Chong <306289287@qq.com> Date: Mon Aug 18 11:38:48 2025 +0800 add `WordSegment` module - create `WordSegmentationStrategy' as an abstract base class to select segmentation strategy based on text content, following Strategy Pattern - implement `ChineseWordSegmentationStrategy` (for Chinese text) - implement `UniscribeWordSegmentationStrategy` (for other languages as default strategy) commit eba63ab Merge: 53dd3bb b9f19e6 Author: Wang Chong <306289287@qq.com> Date: Fri Aug 15 14:16:16 2025 +0800 Merge branch 'master' into integrateCPPJieba merge for Python updated commit 53dd3bb Merge: c853b64 b0241da Author: Wang Chong <306289287@qq.com> Date: Sat Aug 9 20:43:34 2025 +0800 Merge branch 'master' into integrateCPPJieba commit c853b64 Author: Wang Chong <306289287@qq.com> Date: Sat Aug 9 20:33:12 2025 +0800 Update include/readme.md Co-authored-by: Sean Budd <seanbudd123@gmail.com> commit c60c2da Author: Wang Chong <306289287@qq.com> Date: Sat Aug 9 20:30:58 2025 +0800 update copyright headers based on @seanbudd's suggestions commit 38a12dc Author: Wang Chong <306289287@qq.com> Date: Wed Aug 6 21:29:22 2025 +0800 Update building and setup script for cppjieba's dicts installation commit da662be Author: Wang Chong <306289287@qq.com> Date: Wed Aug 6 21:27:44 2025 +0800 Update .gitignore for cppjieba commit 0d92c08 Author: Wang Chong <306289287@qq.com> Date: Wed Aug 6 12:05:54 2025 +0800 Update GitHub action workflow to fetch cppjieba's submodule - Change 'submodules' in 'jobs - buildNVDA - Build NVDA - Checkout NVDA' from 'true' to 'recursive' to ensure cppjieba's submodule is fetched. - This will cause the submodule of sonic to be fetched as well, which seems currently unused. commit d4c3a92 Merge: f4cab8a 432364c Author: Wang Chong <306289287@qq.com> Date: Wed Aug 6 11:49:16 2025 +0800 Merge branch 'master' into integrateCPPJieba commit f4cab8a Merge: 7de7464 4ba948a Author: Wang Chong <306289287@qq.com> Date: Tue Aug 5 17:38:55 2025 +0800 Merge branch 'master' into integrateCPPJieba commit 7de7464 Author: Wang Chong <306289287@qq.com> Date: Tue Aug 5 12:52:39 2025 +0800 add JiebaSingleton wrapper and C API for NVDA segmentation - Introduce `JiebaSingleton` class in `cppjieba.hpp`/`cppjieba.cpp` with def file under nvdaHelper/cppjieba/' - Inherits from `cppjieba::Jieba` and exposes a thread-safe `getOffsets()` method - Implements Meyers’ singleton via `getInstance()` with a private constructor - Deletes copy constructor, copy assignment, move constructor, and move assignment to enforce single instance - Add C-style API in the same module: - `int initJieba()` to force singleton initialization - `int segmentOffsets(const char* text, int** charOffsets, int* outLen)` to perform segmentation and return character offsets - `void freeOffsets(int* ptr)` to release allocated offset buffer commit 1fbf05f Author: Wang Chong <306289287@qq.com> Date: Mon Aug 4 09:59:03 2025 +0800 add building script for cppjieba commit 3d4d9f1 Author: Wang Chong <306289287@qq.com> Date: Fri Aug 1 13:59:53 2025 +0800 Remove changes in sconscript for localLIb commit 2273a60 Author: Wang Chong <306289287@qq.com> Date: Fri Aug 1 13:06:08 2025 +0800 Update include/readme.md Co-authored-by: Sean Budd <seanbudd123@gmail.com> commit 06070c1 Author: Wang Chong <306289287@qq.com> Date: Fri Aug 1 13:04:22 2025 +0800 Update projectDocs/dev/createDevEnvironment.md Co-authored-by: Sean Budd <seanbudd123@gmail.com> commit ae58e9b Author: Wang Chong <306289287@qq.com> Date: Thu Jul 24 16:59:26 2025 +0800 Add comments for building script of cppjieba and its dependency commit fb4efef Author: Wang Chong <306289287@qq.com> Date: Thu Jul 24 16:51:49 2025 +0800 Update what's new commit 5cb5189 Author: Wang Chong <306289287@qq.com> Date: Wed Jul 23 17:30:56 2025 +0800 Introduce cppjieba as a submodule for Chinese word segmentation - Add `cppjieba` as a Git submodule under `third_party/cppjieba/` to provide robust Chinese word segmentation capabilities. - Update `.gitmodules` to point to the official `cppjieba` repository and configure it to track the `master` branch. - Update 'sconscript' to include the paths of 'cppjieba' and its dependency 'limonp' - Modify `copying.txt` to include the `cppjieba` license (MIT) alongside the project’s existing license, ensuring proper attribution and compliance. - Update documents
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Link to issue number:
Summary of the issue:
Description of user facing changes:
Description of developer facing changes:
Description of development approach:
Testing strategy:
Known issues with pull request:
Code Review Checklist: