plover 5.0.0.dev2__tar.gz → 5.0.0rc1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (399) hide show
  1. {plover-5.0.0.dev2 → plover-5.0.0rc1}/MANIFEST.in +1 -0
  2. {plover-5.0.0.dev2 → plover-5.0.0rc1}/NEWS.md +49 -0
  3. {plover-5.0.0.dev2/plover.egg-info → plover-5.0.0rc1}/PKG-INFO +1 -1
  4. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/ci.md +1 -6
  5. plover-5.0.0rc1/doc/conf.py +100 -0
  6. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/developer_guide.md +29 -2
  7. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/plugin-dev/setup.md +2 -2
  8. {plover-5.0.0.dev2 → plover-5.0.0rc1}/linux/appimage/blacklist.txt +27 -21
  9. plover-5.0.0rc1/linux/appimage/pyinfo.py +21 -0
  10. plover-5.0.0rc1/osx/app_resources/dist_blacklist.txt +101 -0
  11. {plover-5.0.0.dev2 → plover-5.0.0rc1}/osx/dmg_resources/settings.py +15 -17
  12. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/__init__.py +8 -7
  13. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/__main__.py +1 -1
  14. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/command/set_config.py +7 -4
  15. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/config.py +177 -74
  16. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/dictionary/base.py +21 -9
  17. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/dictionary/helpers.py +6 -4
  18. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/dictionary/json_dict.py +10 -12
  19. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/dictionary/loading_manager.py +8 -10
  20. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/dictionary/rtfcre_dict.py +46 -43
  21. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/dictionary/rtfcre_parse.py +116 -100
  22. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/engine.py +112 -96
  23. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/exception.py +4 -1
  24. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/formatting.py +198 -140
  25. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_none/add_translation.py +17 -16
  26. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_none/engine.py +1 -3
  27. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_none/main.py +2 -2
  28. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/about_dialog.py +17 -17
  29. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/add_translation_dialog.py +8 -9
  30. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/add_translation_widget.py +66 -63
  31. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/config_window.py +274 -154
  32. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/console_widget.py +9 -13
  33. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/dictionaries_widget.py +140 -119
  34. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/dictionary_editor.py +60 -61
  35. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/engine.py +3 -3
  36. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/info_browser.py +50 -4
  37. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/log_qt.py +3 -2
  38. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/lookup_dialog.py +9 -9
  39. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/machine_options.py +38 -37
  40. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/main.py +19 -19
  41. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/main_window.py +88 -71
  42. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/paper_tape.py +69 -52
  43. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/paper_tape.ui +0 -5
  44. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/plugins_manager.py +47 -43
  45. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/run_dialog.py +7 -6
  46. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/steno_validator.py +2 -3
  47. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/suggestions_dialog.py +34 -38
  48. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/suggestions_widget.py +22 -16
  49. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/tool.py +1 -3
  50. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/trayicon.py +19 -19
  51. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/utils.py +19 -9
  52. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/i18n.py +9 -8
  53. plover-5.0.0rc1/plover/key_combo.py +221 -0
  54. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/log.py +26 -26
  55. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/machine/base.py +40 -35
  56. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/machine/geminipr.py +7 -7
  57. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/machine/keyboard.py +16 -14
  58. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/machine/keyboard_capture/__init__.py +0 -1
  59. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/machine/keymap.py +24 -20
  60. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/machine/passport.py +6 -5
  61. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/machine/procat.py +12 -16
  62. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/machine/stentura.py +45 -29
  63. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/machine/txbolt.py +5 -3
  64. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/macro/repeat.py +0 -1
  65. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/macro/retro.py +9 -9
  66. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/macro/undo.py +4 -3
  67. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/meta/attach.py +12 -10
  68. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/meta/case.py +2 -1
  69. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/meta/conditional.py +3 -3
  70. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/meta/currency.py +4 -4
  71. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/meta/mode.py +15 -15
  72. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/meta/punctuation.py +1 -0
  73. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/misc.py +21 -17
  74. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/orthography.py +12 -10
  75. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/oslayer/__init__.py +7 -5
  76. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/oslayer/config.py +16 -15
  77. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/oslayer/controller.py +13 -13
  78. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/oslayer/linux/i18n.py +2 -1
  79. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/oslayer/linux/keyboardcontrol.py +2 -2
  80. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/oslayer/linux/keyboardcontrol_uinput.py +182 -37
  81. plover-5.0.0rc1/plover/oslayer/linux/keyboardcontrol_x11.py +1353 -0
  82. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/oslayer/linux/log.py +1 -1
  83. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/oslayer/linux/log_dbus.py +97 -65
  84. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/oslayer/linux/serial.py +2 -2
  85. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/oslayer/linux/wmctrl_x11.py +11 -15
  86. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/oslayer/osx/keyboardcontrol.py +194 -99
  87. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/oslayer/osx/keyboardlayout.py +138 -119
  88. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/oslayer/osx/log.py +14 -8
  89. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/oslayer/osx/serial.py +1 -1
  90. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/oslayer/osx/wmctrl.py +6 -1
  91. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/oslayer/windows/keyboardcontrol.py +195 -89
  92. plover-5.0.0rc1/plover/oslayer/windows/keyboardlayout.py +529 -0
  93. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/oslayer/windows/log.py +5 -3
  94. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/oslayer/windows/serial.py +4 -5
  95. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/oslayer/windows/wmctrl.py +1 -1
  96. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/output/__init__.py +1 -2
  97. plover-5.0.0rc1/plover/output/keyboard.py +25 -0
  98. plover-5.0.0rc1/plover/plugins_manager/__main__.py +98 -0
  99. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/plugins_manager/global_registry.py +2 -5
  100. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/plugins_manager/local_registry.py +11 -13
  101. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/plugins_manager/package_index.py +12 -18
  102. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/plugins_manager/pip_wrapper.py +5 -5
  103. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/plugins_manager/plugin_metadata.py +17 -9
  104. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/plugins_manager/registry.py +39 -28
  105. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/plugins_manager/requests.py +2 -4
  106. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/plugins_manager/utils.py +9 -7
  107. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/registry.py +28 -26
  108. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/resource.py +13 -10
  109. plover-5.0.0rc1/plover/scripts/dist_main.py +23 -0
  110. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/scripts/main.py +57 -34
  111. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/scripts/send_command.py +13 -7
  112. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/steno.py +16 -9
  113. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/steno_dictionary.py +47 -21
  114. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/suggestions.py +11 -11
  115. plover-5.0.0rc1/plover/system/__init__.py +90 -0
  116. plover-5.0.0rc1/plover/system/english_stenotype.py +321 -0
  117. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/translation.py +67 -51
  118. {plover-5.0.0.dev2 → plover-5.0.0rc1/plover.egg-info}/PKG-INFO +1 -1
  119. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover.egg-info/SOURCES.txt +2 -0
  120. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover_build_utils/check_requirements.py +5 -6
  121. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover_build_utils/download.py +10 -8
  122. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover_build_utils/get_pip.py +10 -5
  123. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover_build_utils/install_wheels.py +33 -31
  124. plover-5.0.0rc1/plover_build_utils/pyqt.py +43 -0
  125. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover_build_utils/setup.py +64 -54
  126. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover_build_utils/source_less.py +6 -6
  127. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover_build_utils/testing/blackbox.py +31 -31
  128. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover_build_utils/testing/dict.py +3 -3
  129. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover_build_utils/testing/output.py +5 -6
  130. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover_build_utils/testing/parametrize.py +5 -3
  131. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover_build_utils/testing/steno_dictionary.py +145 -124
  132. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover_build_utils/tree.py +21 -19
  133. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover_build_utils/trim.py +5 -5
  134. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover_build_utils/zipdir.py +3 -3
  135. plover-5.0.0rc1/reqs/code_quality.txt +1 -0
  136. {plover-5.0.0.dev2 → plover-5.0.0rc1}/reqs/constraints.txt +4 -1
  137. plover-5.0.0rc1/reqs/dev.txt +4 -0
  138. plover-5.0.0rc1/setup.py +318 -0
  139. {plover-5.0.0.dev2 → plover-5.0.0rc1}/test/conftest.py +6 -4
  140. {plover-5.0.0.dev2 → plover-5.0.0rc1}/test/gui_qt/test_dictionaries_widget.py +445 -301
  141. plover-5.0.0rc1/test/gui_qt/test_steno_validator.py +31 -0
  142. {plover-5.0.0.dev2 → plover-5.0.0rc1}/test/test_blackbox.py +404 -389
  143. {plover-5.0.0.dev2 → plover-5.0.0rc1}/test/test_command.py +33 -18
  144. plover-5.0.0rc1/test/test_config.py +776 -0
  145. {plover-5.0.0.dev2 → plover-5.0.0rc1}/test/test_default_dict.py +9 -11
  146. {plover-5.0.0.dev2 → plover-5.0.0rc1}/test/test_engine.py +94 -70
  147. plover-5.0.0rc1/test/test_formatting.py +1596 -0
  148. {plover-5.0.0.dev2 → plover-5.0.0rc1}/test/test_json_dict.py +26 -23
  149. plover-5.0.0rc1/test/test_key_combo.py +160 -0
  150. {plover-5.0.0.dev2 → plover-5.0.0rc1}/test/test_keyboard.py +36 -25
  151. {plover-5.0.0.dev2 → plover-5.0.0rc1}/test/test_keymap.py +32 -27
  152. {plover-5.0.0.dev2 → plover-5.0.0rc1}/test/test_loading_manager.py +28 -30
  153. {plover-5.0.0.dev2 → plover-5.0.0rc1}/test/test_log.py +28 -27
  154. {plover-5.0.0.dev2 → plover-5.0.0rc1}/test/test_machine.py +3 -1
  155. plover-5.0.0rc1/test/test_misc.py +110 -0
  156. plover-5.0.0rc1/test/test_orthography.py +151 -0
  157. {plover-5.0.0.dev2 → plover-5.0.0rc1}/test/test_passport.py +28 -8
  158. {plover-5.0.0.dev2 → plover-5.0.0rc1}/test/test_resource.py +37 -36
  159. plover-5.0.0rc1/test/test_rtfcre_dict.py +550 -0
  160. plover-5.0.0rc1/test/test_steno.py +105 -0
  161. plover-5.0.0rc1/test/test_steno_dictionary.py +250 -0
  162. {plover-5.0.0.dev2 → plover-5.0.0rc1}/test/test_stentura.py +139 -82
  163. {plover-5.0.0.dev2 → plover-5.0.0rc1}/test/test_translation.py +398 -390
  164. plover-5.0.0rc1/windows/dist_blacklist.txt +74 -0
  165. plover-5.0.0.dev2/doc/conf.py +0 -100
  166. plover-5.0.0.dev2/linux/appimage/pyinfo.py +0 -14
  167. plover-5.0.0.dev2/osx/app_resources/dist_blacklist.txt +0 -67
  168. plover-5.0.0.dev2/plover/key_combo.py +0 -221
  169. plover-5.0.0.dev2/plover/oslayer/linux/keyboardcontrol_x11.py +0 -1344
  170. plover-5.0.0.dev2/plover/oslayer/windows/keyboardlayout.py +0 -496
  171. plover-5.0.0.dev2/plover/output/keyboard.py +0 -25
  172. plover-5.0.0.dev2/plover/plugins_manager/__main__.py +0 -95
  173. plover-5.0.0.dev2/plover/scripts/dist_main.py +0 -23
  174. plover-5.0.0.dev2/plover/system/__init__.py +0 -74
  175. plover-5.0.0.dev2/plover/system/english_stenotype.py +0 -319
  176. plover-5.0.0.dev2/plover_build_utils/pyqt.py +0 -41
  177. plover-5.0.0.dev2/setup.py +0 -297
  178. plover-5.0.0.dev2/test/gui_qt/test_steno_validator.py +0 -28
  179. plover-5.0.0.dev2/test/test_config.py +0 -667
  180. plover-5.0.0.dev2/test/test_formatting.py +0 -1222
  181. plover-5.0.0.dev2/test/test_key_combo.py +0 -153
  182. plover-5.0.0.dev2/test/test_misc.py +0 -104
  183. plover-5.0.0.dev2/test/test_orthography.py +0 -146
  184. plover-5.0.0.dev2/test/test_rtfcre_dict.py +0 -531
  185. plover-5.0.0.dev2/test/test_steno.py +0 -103
  186. plover-5.0.0.dev2/test/test_steno_dictionary.py +0 -238
  187. plover-5.0.0.dev2/windows/dist_blacklist.txt +0 -27
  188. {plover-5.0.0.dev2 → plover-5.0.0rc1}/CONTRIBUTING.md +0 -0
  189. {plover-5.0.0.dev2 → plover-5.0.0rc1}/LICENSE.txt +0 -0
  190. {plover-5.0.0.dev2 → plover-5.0.0rc1}/README.md +0 -0
  191. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/SCOWL_README.txt +0 -0
  192. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/_static/board-layout.png +0 -0
  193. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/_static/custom.css +0 -0
  194. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/_static/de-speech.png +0 -0
  195. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/_static/dolores.svg +0 -0
  196. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/_static/engine-flow.png +0 -0
  197. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/_static/favicon.ico +0 -0
  198. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/_static/jp-speech.png +0 -0
  199. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/_static/keys-layout.png +0 -0
  200. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/_static/uncomfortable.png +0 -0
  201. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/_templates/breadcrumbs.html +0 -0
  202. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/_templates/layout.html +0 -0
  203. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/add_translation.md +0 -0
  204. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/config.md +0 -0
  205. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/dictionary.md +0 -0
  206. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/dictionary_lib.md +0 -0
  207. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/engine.md +0 -0
  208. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/exception.md +0 -0
  209. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/formatting.md +0 -0
  210. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/i18n.md +0 -0
  211. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/key_combo.md +0 -0
  212. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/log.md +0 -0
  213. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/machine.md +0 -0
  214. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/machine_keyboard_capture.md +0 -0
  215. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/machine_keymap.md +0 -0
  216. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/misc.md +0 -0
  217. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/orthography.md +0 -0
  218. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/oslayer.md +0 -0
  219. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/oslayer_config.md +0 -0
  220. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/oslayer_controller.md +0 -0
  221. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/oslayer_i18n.md +0 -0
  222. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/oslayer_keyboardcontrol.md +0 -0
  223. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/oslayer_log.md +0 -0
  224. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/oslayer_wmctrl.md +0 -0
  225. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/output.md +0 -0
  226. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/plover.md +0 -0
  227. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/plover_stroke.md +0 -0
  228. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/qt.md +0 -0
  229. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/registry.md +0 -0
  230. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/resource.md +0 -0
  231. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/steno.md +0 -0
  232. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/steno_dictionary.md +0 -0
  233. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/suggestions.md +0 -0
  234. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/system.md +0 -0
  235. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api/translation.md +0 -0
  236. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/api_reference.md +0 -0
  237. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/basic_usage.md +0 -0
  238. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/cli_reference.md +0 -0
  239. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/configuration.md +0 -0
  240. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/contributing.md +0 -0
  241. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/design.md +0 -0
  242. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/dict_editor.md +0 -0
  243. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/dict_formats.md +0 -0
  244. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/dictionaries.md +0 -0
  245. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/hardware_communication.md +0 -0
  246. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/hardware_setup.md +0 -0
  247. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/i18n.md +0 -0
  248. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/index.md +0 -0
  249. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/installation.md +0 -0
  250. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/internals.md +0 -0
  251. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/platform_layer.md +0 -0
  252. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/plugin-dev/commands.md +0 -0
  253. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/plugin-dev/dictionaries.md +0 -0
  254. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/plugin-dev/extensions.md +0 -0
  255. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/plugin-dev/gui_tools.md +0 -0
  256. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/plugin-dev/machines.md +0 -0
  257. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/plugin-dev/macros.md +0 -0
  258. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/plugin-dev/metas.md +0 -0
  259. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/plugin-dev/publishing.md +0 -0
  260. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/plugin-dev/systems.md +0 -0
  261. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/plugin_dev.md +0 -0
  262. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/plugins.md +0 -0
  263. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/releases.md +0 -0
  264. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/requirements.txt +0 -0
  265. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/system-dev/board-layout.md +0 -0
  266. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/system-dev/key-arrangement.md +0 -0
  267. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/system-dev/layout-test.md +0 -0
  268. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/system-dev/steno-system.md +0 -0
  269. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/system-dev/system.md +0 -0
  270. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/system_dev.md +0 -0
  271. {plover-5.0.0.dev2 → plover-5.0.0rc1}/doc/translation_language.md +0 -0
  272. {plover-5.0.0.dev2 → plover-5.0.0rc1}/linux/README.md +0 -0
  273. {plover-5.0.0.dev2 → plover-5.0.0rc1}/linux/appimage/Dockerfile +0 -0
  274. {plover-5.0.0.dev2 → plover-5.0.0rc1}/linux/appimage/apprun.sh +0 -0
  275. {plover-5.0.0.dev2 → plover-5.0.0rc1}/linux/appimage/build.sh +0 -0
  276. {plover-5.0.0.dev2 → plover-5.0.0rc1}/linux/appimage/deps.sh +0 -0
  277. {plover-5.0.0.dev2 → plover-5.0.0rc1}/linux/plover.desktop +0 -0
  278. {plover-5.0.0.dev2 → plover-5.0.0rc1}/news.d/api/.gitignore +0 -0
  279. {plover-5.0.0.dev2 → plover-5.0.0rc1}/news.d/bugfix/.gitignore +0 -0
  280. {plover-5.0.0.dev2 → plover-5.0.0rc1}/news.d/feature/.gitignore +0 -0
  281. {plover-5.0.0.dev2 → plover-5.0.0rc1}/news.d/template.md +0 -0
  282. {plover-5.0.0.dev2 → plover-5.0.0rc1}/osx/README.md +0 -0
  283. {plover-5.0.0.dev2 → plover-5.0.0rc1}/osx/app_resources/Info.plist +0 -0
  284. {plover-5.0.0.dev2 → plover-5.0.0rc1}/osx/app_resources/plover.icns +0 -0
  285. {plover-5.0.0.dev2 → plover-5.0.0rc1}/osx/app_resources/plover_launcher.c +0 -0
  286. {plover-5.0.0.dev2 → plover-5.0.0rc1}/osx/deps.sh +0 -0
  287. {plover-5.0.0.dev2 → plover-5.0.0rc1}/osx/dmg_resources/background.png +0 -0
  288. {plover-5.0.0.dev2 → plover-5.0.0rc1}/osx/dmg_resources/background.psd +0 -0
  289. {plover-5.0.0.dev2 → plover-5.0.0rc1}/osx/dmg_resources/background@2x.png +0 -0
  290. {plover-5.0.0.dev2 → plover-5.0.0rc1}/osx/make_app.sh +0 -0
  291. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/assets/american_english_words.txt +0 -0
  292. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/assets/commands.json +0 -0
  293. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/assets/main.json +0 -0
  294. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/assets/plover-icon.svg +0 -0
  295. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/assets/plover.ico +0 -0
  296. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/assets/plover.png +0 -0
  297. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/assets/user.json +0 -0
  298. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/command/__init__.py +0 -0
  299. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/dictionary/__init__.py +0 -0
  300. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_none/__init__.py +0 -0
  301. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/__init__.py +0 -0
  302. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/about_dialog.ui +0 -0
  303. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/add_translation_dialog.ui +0 -0
  304. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/add_translation_widget.ui +0 -0
  305. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/config_file_widget.ui +0 -0
  306. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/config_keyboard_widget.ui +0 -0
  307. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/config_serial_widget.ui +0 -0
  308. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/config_window.ui +0 -0
  309. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/console_widget.ui +0 -0
  310. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/dictionaries_widget.ui +0 -0
  311. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/dictionary_editor.ui +0 -0
  312. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/lookup_dialog.ui +0 -0
  313. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/main_window.ui +0 -0
  314. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/plugins_manager.ui +0 -0
  315. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/__init__.py +0 -0
  316. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/add.svg +0 -0
  317. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/dictionary_error.svg +0 -0
  318. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/dictionary_favorite.svg +0 -0
  319. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/dictionary_loading.svg +0 -0
  320. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/dictionary_normal.svg +0 -0
  321. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/dictionary_readonly.svg +0 -0
  322. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/down.svg +0 -0
  323. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/folder.svg +0 -0
  324. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/font_selector.svg +0 -0
  325. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/git.png +0 -0
  326. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/lightbulb.svg +0 -0
  327. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/lookup.svg +0 -0
  328. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/pencil.svg +0 -0
  329. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/pin.svg +0 -0
  330. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/plover.png +0 -0
  331. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/plugins_manager.svg +0 -0
  332. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/reconnect.svg +0 -0
  333. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/remove.svg +0 -0
  334. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/save.svg +0 -0
  335. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/settings.svg +0 -0
  336. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/state-disabled.svg +0 -0
  337. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/state-disconnected.svg +0 -0
  338. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/state-enabled.svg +0 -0
  339. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/tape.svg +0 -0
  340. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/translation_add.svg +0 -0
  341. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/trash.svg +0 -0
  342. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/undo.svg +0 -0
  343. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources/up.svg +0 -0
  344. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/resources.qrc +0 -0
  345. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/run_dialog.ui +0 -0
  346. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/gui_qt/suggestions_dialog.ui +0 -0
  347. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/machine/__init__.py +0 -0
  348. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/macro/__init__.py +0 -0
  349. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/messages/es/LC_MESSAGES/plover.po +0 -0
  350. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/messages/fr/LC_MESSAGES/plover.po +0 -0
  351. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/messages/it/LC_MESSAGES/plover.po +0 -0
  352. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/messages/nl/LC_MESSAGES/plover.po +0 -0
  353. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/messages/plover.pot +0 -0
  354. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/messages/zh_tw/LC_MESSAGES/plover.po +0 -0
  355. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/meta/__init__.py +0 -0
  356. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/meta/command.py +0 -0
  357. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/meta/glue.py +0 -0
  358. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/meta/key_combo.py +0 -0
  359. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/meta/word_end.py +0 -0
  360. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/oslayer/linux/__init__.py +0 -0
  361. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/oslayer/linux/display_server.py +0 -0
  362. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/oslayer/linux/wmctrl.py +0 -0
  363. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/oslayer/osx/__init__.py +0 -0
  364. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/oslayer/osx/i18n.py +0 -0
  365. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/oslayer/windows/__init__.py +0 -0
  366. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/oslayer/windows/i18n.py +0 -0
  367. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/plugins_manager/__init__.py +0 -0
  368. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover/scripts/__init__.py +0 -0
  369. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover.egg-info/dependency_links.txt +0 -0
  370. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover.egg-info/entry_points.txt +0 -0
  371. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover.egg-info/requires.txt +0 -0
  372. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover.egg-info/top_level.txt +0 -0
  373. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover.egg-info/zip-safe +0 -0
  374. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover_build_utils/__init__.py +0 -0
  375. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover_build_utils/functions.sh +0 -0
  376. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover_build_utils/testing/__init__.py +0 -0
  377. {plover-5.0.0.dev2 → plover-5.0.0rc1}/plover_build_utils/testing/steno.py +0 -0
  378. {plover-5.0.0.dev2 → plover-5.0.0rc1}/pyproject.toml +0 -0
  379. {plover-5.0.0.dev2 → plover-5.0.0rc1}/pytest.ini +0 -0
  380. {plover-5.0.0.dev2 → plover-5.0.0rc1}/reqs/bootstrap.txt +0 -0
  381. {plover-5.0.0.dev2 → plover-5.0.0rc1}/reqs/build.txt +0 -0
  382. {plover-5.0.0.dev2 → plover-5.0.0rc1}/reqs/ci.txt +0 -0
  383. {plover-5.0.0.dev2 → plover-5.0.0rc1}/reqs/dist.txt +0 -0
  384. {plover-5.0.0.dev2 → plover-5.0.0rc1}/reqs/dist_extra_gui_qt.txt +0 -0
  385. {plover-5.0.0.dev2 → plover-5.0.0rc1}/reqs/dist_extra_log.txt +0 -0
  386. {plover-5.0.0.dev2 → plover-5.0.0rc1}/reqs/packaging.txt +0 -0
  387. {plover-5.0.0.dev2 → plover-5.0.0rc1}/reqs/release.txt +0 -0
  388. {plover-5.0.0.dev2 → plover-5.0.0rc1}/reqs/setup.txt +0 -0
  389. {plover-5.0.0.dev2 → plover-5.0.0rc1}/reqs/test.txt +0 -0
  390. {plover-5.0.0.dev2 → plover-5.0.0rc1}/setup.cfg +0 -0
  391. {plover-5.0.0.dev2 → plover-5.0.0rc1}/test/__init__.py +0 -0
  392. {plover-5.0.0.dev2 → plover-5.0.0rc1}/test/gui_qt/__init__.py +0 -0
  393. {plover-5.0.0.dev2 → plover-5.0.0rc1}/test/py37compat.py +0 -0
  394. {plover-5.0.0.dev2 → plover-5.0.0rc1}/tox.ini +0 -0
  395. {plover-5.0.0.dev2 → plover-5.0.0rc1}/windows/README.md +0 -0
  396. {plover-5.0.0.dev2 → plover-5.0.0rc1}/windows/dist_build.sh +0 -0
  397. {plover-5.0.0.dev2 → plover-5.0.0rc1}/windows/dist_deps.sh +0 -0
  398. {plover-5.0.0.dev2 → plover-5.0.0rc1}/windows/installer.bmp +0 -0
  399. {plover-5.0.0.dev2 → plover-5.0.0rc1}/windows/installer.nsi +0 -0
@@ -33,6 +33,7 @@ include test/*.py
33
33
  include test/gui_qt/*.py
34
34
  include tox.ini
35
35
  include windows/*
36
+ exclude .pre-commit-config.yaml
36
37
  # without first including it, exluding .readthedocs.yml results in a warning when running locally
37
38
  include .readthedocs.yml
38
39
  exclude .readthedocs.yml
@@ -1,3 +1,52 @@
1
+ # v5.0.0rc1 (2025-09-02)
2
+
3
+
4
+ ## Features
5
+
6
+ ### Linux
7
+
8
+ - Refactor Uinput to use pipe instead of select with timeout. (#1760)
9
+ - Passthrough keyboard shortcuts. (#1761)
10
+ - Uinput: refactor initialization and cleanup. (#1765)
11
+
12
+ ## Bugfixes
13
+
14
+ No significant changes.
15
+
16
+ ## API
17
+
18
+ No significant changes.
19
+
20
+ # v5.0.0.dev3 (2025-07-14)
21
+
22
+
23
+ ## Features
24
+
25
+ ### Core
26
+
27
+ - Allow higher priority dictionaries to delete entries from others. (#1160)
28
+ - Improve orthography rules for `^ify` suffixes. (#1680)
29
+ - Reduce installer file size. (#1741)
30
+
31
+ ### Linux
32
+
33
+ - Add dvorak keymap support for uinput users. (#1746)
34
+
35
+ ## Bugfixes
36
+
37
+ ### Core
38
+
39
+ - Allow uninstall of installed unsupported plugins. (#1739)
40
+ - Fix missing font family warnings. (#1740)
41
+
42
+ ### Windows
43
+
44
+ - Do not consider extended scan codes in Windows keyboard capture. (#1357)
45
+
46
+ ## API
47
+
48
+ No significant changes.
49
+
1
50
  # v5.0.0.dev2 (2025-06-14)
2
51
 
3
52
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plover
3
- Version: 5.0.0.dev2
3
+ Version: 5.0.0rc1
4
4
  Summary: Open Source Stenography Software
5
5
  Home-page: http://www.openstenoproject.org/
6
6
  Download-URL: http://www.openstenoproject.org/plover
@@ -123,13 +123,8 @@ jobs completed successfully.
123
123
  ### PyPI release
124
124
 
125
125
  On *tagged* release, the source distribution and wheel are published
126
- to PyPI.
126
+ to PyPI via [Trusted Publishing](https://docs.pypi.org/trusted-publishers/).
127
127
 
128
- For this to work, a valid [PyPI token](https://pypi.org/help/#apitoken)
129
- must be configured: the `PYPI_TOKEN` secret of the `release`
130
- [environment](https://docs.github.com/en/actions/reference/environments)
131
- will be used. Additionally, the optional `PYPI_URL` secret can be set to
132
- use another PyPI compatible index (e.g. Test PyPI).
133
128
 
134
129
  ### GitHub release
135
130
 
@@ -0,0 +1,100 @@
1
+ # Configuration file for the Sphinx documentation builder.
2
+
3
+ # -- Project information -----------------------------------------------------
4
+
5
+ project = "Plover"
6
+ copyright = "Open Steno Project"
7
+ author = copyright
8
+
9
+ release = "5.0.0rc1"
10
+ version = release
11
+
12
+ # -- General configuration ---------------------------------------------------
13
+
14
+ extensions = [
15
+ "sphinx_plover",
16
+ "myst_parser",
17
+ "sphinx.ext.todo",
18
+ ]
19
+
20
+ myst_enable_extensions = ["colon_fence"]
21
+
22
+ templates_path = ["_templates"]
23
+
24
+ exclude_patterns = []
25
+
26
+ pygments_style = "manni"
27
+ pygments_dark_style = "monokai"
28
+
29
+ source_suffix = [".rst", ".md"]
30
+
31
+ todo_include_todos = True
32
+
33
+ # -- Options for HTML output -------------------------------------------------
34
+
35
+ html_theme = "furo"
36
+
37
+ html_static_path = ["_static"]
38
+
39
+ html_title = f"{project} {version}"
40
+
41
+ html_favicon = "_static/favicon.ico"
42
+
43
+ html_css_files = [
44
+ "custom.css",
45
+ ]
46
+
47
+ html_theme_options = {
48
+ "navigation_with_keys": True,
49
+ "light_css_variables": {
50
+ "color-brand-primary": "#3d6961",
51
+ "color-brand-content": "#3d6961",
52
+ "color-sidebar-background": "#3d6961",
53
+ "color-sidebar-brand-text": "white",
54
+ "color-sidebar-brand-text--hover": "white",
55
+ "color-sidebar-caption-text": "white",
56
+ "color-sidebar-link-text": "white",
57
+ "color-sidebar-link-text--top-level": "white",
58
+ "color-sidebar-item-background--hover": "#71a89f",
59
+ "color-sidebar-item-expander-background--hover": "#71a89f",
60
+ "color-inline-code-background": "transparent",
61
+ "font-stack--header": "'Patua One', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji'",
62
+ "font-stack--monospace": "'JetBrains Mono', SFMono-Regular, Menlo, Consolas, Monaco, Liberation Mono, Lucida Console, monospace",
63
+ },
64
+ "dark_css_variables": {
65
+ "color-link": "#68a69b",
66
+ "color-link--hover": "#68a69b",
67
+ },
68
+ "light_logo": "dolores.svg",
69
+ "dark_logo": "dolores.svg",
70
+ }
71
+
72
+ from pygments.lexer import RegexLexer, bygroups
73
+ from pygments import token as t
74
+ from sphinx.highlighting import lexers
75
+
76
+
77
+ class RTFLexer(RegexLexer):
78
+ name = "rtf"
79
+
80
+ tokens = {
81
+ "root": [
82
+ (r"(\\[a-z*\\_~\{\}]+)(-?\d+)?", bygroups(t.Keyword, t.Number.Integer)),
83
+ (r"{\\\*\\cxcomment\s+", t.Comment.Multiline, "comment"),
84
+ (
85
+ r"({)(\\\*\\cxs)(\s+)([A-Z#0-9\-/#!,]+)(})",
86
+ bygroups(t.Operator, t.Keyword, t.Text, t.String, t.Operator),
87
+ ),
88
+ (r"{", t.Operator),
89
+ (r"}", t.Operator),
90
+ (r".+?", t.Text),
91
+ ],
92
+ "comment": [
93
+ (r"{", t.Comment.Multiline, "#push"),
94
+ (r"}", t.Comment.Multiline, "#pop"),
95
+ (r".+", t.Comment.Multiline),
96
+ ],
97
+ }
98
+
99
+
100
+ lexers["rtf"] = RTFLexer(startinline=True)
@@ -1,8 +1,8 @@
1
1
  # Environment setup
2
2
 
3
- You need Python >= 3.10 installed, and you need [tox](https://pypi.org/project/tox/) >= 4.0.
3
+ You need Python installed.
4
4
  It is recommended to install the same Python version that is packaged in the official installer files.
5
- You can look up this version in the file `.github/workflows/ci/workflow_context.yml` in the vars section.
5
+ You can look up this version in the file `.github/workflows/ci/workflow_context.yml` in the vars section (`default_python`).
6
6
 
7
7
  Tox simplifies the process of creating and managing isolated virtual environments,
8
8
  handling dependency installation, and running the test suite in isolation. This
@@ -13,6 +13,33 @@ environment created using tools like [venv](https://docs.python.org/3/library/ve
13
13
  This helps keep your global Python environment clean, avoids project conflicts, and
14
14
  isolates tox and its dependencies.
15
15
 
16
+ A typical setup looks like this:
17
+
18
+ ### Linux/macOS (Bash):
19
+ ```bash
20
+ cd path/to/plover
21
+ python -m venv .venv
22
+ source .venv/bin/activate
23
+ pip install -r reqs/dev.txt
24
+ pre-commit install
25
+ pre-commit run --all-files
26
+ tox
27
+ ```
28
+
29
+ ### Windows (PowerShell):
30
+ ```powershell
31
+ cd path\to\plover
32
+ python -m venv .venv
33
+ .venv\Scripts\Activate.ps1
34
+ pip install -r reqs\dev.txt
35
+ pre-commit install
36
+ pre-commit run --all-files
37
+ tox
38
+ ```
39
+ Some features require a Bash shell, so on Windows you may need to use Git Bash or WSL instead of PowerShell.
40
+
41
+ ## Tox
42
+
16
43
  The command for using tox is: `tox {-e envlist} {-- arguments}`. Use `tox -a
17
44
  -v` to get a list of available environments.
18
45
 
@@ -27,9 +27,9 @@ keywords = plover plover_plugin
27
27
  [options]
28
28
  zip_safe = True
29
29
  setup_requires =
30
- setuptools>=30.3.0
30
+ setuptools>=79.0.0 # just an example, might need to be higher
31
31
  install_requires =
32
- plover>=4.0.0.dev10
32
+ plover>=4.0.0.dev10 # or higher, especially for GUI plugins
33
33
  packages =
34
34
  ... # Your packages go here
35
35
  py_modules =
@@ -28,36 +28,42 @@
28
28
  pip/_vendor/distlib/*.exe
29
29
  setuptools/*.exe
30
30
 
31
- # Plover.
32
- :usr/lib/python${pyversion}/site-packages/plover
33
- gui_qt/*.ui
34
- messages/**/*.po
35
- messages/plover.pot
36
-
37
- # PySide6.
31
+ # PySide6.
38
32
  :usr/bin
39
33
  pylupdate6
40
34
  pyuic6
41
35
  :usr/lib/python${pyversion}/site-packages/PySide6
42
- **/*Designer*
36
+ **/*[Aa]ssistant*
37
+ **/*[Dd]esigner*
43
38
  **/*[Hh]elp*
39
+ **/*[Ll]inguist*
40
+ **/*[Oo]pen[Gg][Ll]*
44
41
  **/*[Qq]ml*
45
42
  **/*[Qq]uick*
46
- **/*Test*
43
+ **/*[Ss]ql*
44
+ **/*[Tt]est*
47
45
  **/*[Ww]eb[Ee]ngine*
46
+ **/*.tmpl.py
48
47
  bindings
49
- Qt6/plugins/egldeviceintegrations
50
- Qt6/plugins/geoservices
51
- Qt6/plugins/platforms/libqeglfs.so
52
- Qt6/plugins/platforms/libqlinuxfb.so
53
- Qt6/plugins/platforms/libqminimal.so
54
- Qt6/plugins/platforms/libqminimalegl.so
55
- Qt6/plugins/platforms/libqoffscreen.so
56
- Qt6/plugins/platforms/libqvnc.so
57
- Qt6/plugins/platforms/libqwebgl.so
58
- Qt6/plugins/sceneparsers
59
- Qt6/plugins/webview
48
+ lupdate
49
+ lrelease
50
+ Qt/plugins/egldeviceintegrations
51
+ Qt/plugins/geoservices
52
+ Qt/plugins/platforms/libqeglfs.so
53
+ Qt/plugins/platforms/libqlinuxfb.so
54
+ Qt/plugins/platforms/libqminimal.so
55
+ Qt/plugins/platforms/libqminimalegl.so
56
+ Qt/plugins/platforms/libqoffscreen.so
57
+ Qt/plugins/platforms/libqvnc.so
58
+ Qt/plugins/platforms/libqwebgl.so
59
+ Qt/plugins/sceneparsers
60
+ Qt/plugins/webview
61
+ Qt/translations/qtdeclarative_*
60
62
  pylupdate*
61
63
  uic
62
64
 
63
- # vim: ft=config
65
+ # Plover.
66
+ :usr/lib/python${pyversion}/site-packages/plover
67
+ gui_qt/*.ui
68
+ messages/**/*.po
69
+ messages/plover.pot
@@ -0,0 +1,21 @@
1
+ from distutils import sysconfig
2
+ import sys
3
+
4
+ print(
5
+ "; ".join(
6
+ "py%s=%r" % (k, v)
7
+ for k, v in sorted(
8
+ {
9
+ "exe": sys.executable,
10
+ "prefix": getattr(sys, "base_prefix", sys.prefix),
11
+ "version": sysconfig.get_python_version(),
12
+ "include": sysconfig.get_python_inc(prefix=""),
13
+ "ldlib": sysconfig.get_config_var("LDLIBRARY"),
14
+ "py3lib": sysconfig.get_config_var("PY3LIBRARY"),
15
+ "stdlib": sysconfig.get_python_lib(standard_lib=1, prefix=""),
16
+ "purelib": sysconfig.get_python_lib(plat_specific=0, prefix=""),
17
+ "platlib": sysconfig.get_python_lib(plat_specific=1, prefix=""),
18
+ }.items()
19
+ )
20
+ )
21
+ )
@@ -0,0 +1,101 @@
1
+ # Python.
2
+ :
3
+ _CodeSignature
4
+ share
5
+ Resources/Python.app
6
+ :bin
7
+ !python
8
+ !python3*
9
+ !Info.plist
10
+ *
11
+ :lib
12
+ **/*.tcl
13
+ itcl*
14
+ pkgconfig
15
+ tcl*
16
+ [Tt]k*
17
+ :lib/python$python_base_version
18
+ pkgconfig
19
+ tkinter
20
+ idlelib
21
+ ensurepip
22
+ test
23
+ turtle*
24
+ **/*.exe
25
+ */test*
26
+ # PySide6.
27
+ :lib/python$python_base_version/site-packages/PySide6
28
+ **/*3D*
29
+ **/*AxContainer*
30
+ **/*Bluetooth*
31
+ **/*CLucene*
32
+ **/*Concurrent*
33
+ **/*DataVisualization*
34
+ **/*Designer*
35
+ **/*Graphs*
36
+ **/*Network*
37
+ **/*PrintSupport*
38
+ **/*Location*
39
+ **/*Nfc*
40
+ **/*Sensors*
41
+ **/*Serial*
42
+ **/*QtExampleIcons*
43
+ **/*QtHelp*
44
+ **/*QtLabs*
45
+ **/*QtOpenGL*
46
+ **/*QtQuick*
47
+ **/*QtQml*
48
+ **/*QtUiTools*
49
+ **/*QtXml*
50
+ **/*SpacialAudio*
51
+ **/*TextToSpeech*
52
+ **/*WebChannel*
53
+ **/*WebEngine*
54
+ **/*Sql*
55
+ **/*Pdf*
56
+ **/*Test*
57
+ **/*.app
58
+ **/*.tmpl.py
59
+ Qt/plugins/audio
60
+ Qt/plugins/bearer
61
+ Qt/plugins/designer
62
+ Qt/plugins/generic
63
+ Qt/plugins/geoservices
64
+ Qt/plugins/imageformats/libqtiff*.dylib
65
+ Qt/plugins/mediaservice
66
+ Qt/plugins/platforms/libqminimal*.dylib
67
+ Qt/plugins/platforms/libqoffscreen*.dylib
68
+ Qt/plugins/playlistformats
69
+ Qt/plugins/position
70
+ Qt/plugins/printsupport
71
+ Qt/plugins/qml*
72
+ Qt/plugins/sceneparsers
73
+ Qt/plugins/sensor*
74
+ Qt/plugins/sqldrivers
75
+ Qt/plugins/tls
76
+ Qt/qml
77
+ Qt/resources
78
+ Qt/translations/assistant_*
79
+ Qt/translations/designer_*
80
+ Qt/translations/linguist_*
81
+ Qt/translations/qt_help_*
82
+ Qt/translations/qtconnectivity_*
83
+ Qt/translations/qtdeclarative_*
84
+ Qt/translations/qtlocation_*
85
+ Qt/translations/qtmultimedia_*
86
+ Qt/translations/qtquick*
87
+ Qt/translations/qtserialport_*
88
+ Qt/translations/qtwebsockets_*
89
+ lupdate
90
+ pylupdate*
91
+ qmlls
92
+ qmlformat
93
+ scripts
94
+ uic
95
+ # Plover.
96
+ :lib/python$python_base_version/site-packages/plover
97
+ gui_qt/*.ui
98
+ messages/**/*.po
99
+ messages/plover.pot
100
+
101
+ # vim: ft=config
@@ -3,39 +3,37 @@
3
3
  import plistlib
4
4
  import os.path
5
5
 
6
- application = defines.get('app', './dist/Plover.app')
6
+ application = defines.get("app", "./dist/Plover.app")
7
7
  appname = os.path.basename(application)
8
8
 
9
9
 
10
10
  def icon_from_app(app_path):
11
- plist_path = os.path.join(app_path, 'Contents', 'Info.plist')
12
- with open(plist_path, 'rb') as plist_file:
11
+ plist_path = os.path.join(app_path, "Contents", "Info.plist")
12
+ with open(plist_path, "rb") as plist_file:
13
13
  plist = plistlib.load(plist_file)
14
- icon_name = plist['CFBundleIconFile']
14
+ icon_name = plist["CFBundleIconFile"]
15
15
  icon_root, icon_ext = os.path.splitext(icon_name)
16
16
  if not icon_ext:
17
- icon_ext = '.icns'
17
+ icon_ext = ".icns"
18
18
  icon_name = icon_root + icon_ext
19
- return os.path.join(app_path, 'Contents', 'Resources', icon_name)
19
+ return os.path.join(app_path, "Contents", "Resources", icon_name)
20
20
 
21
- format = defines.get('format', 'UDBZ')
21
+
22
+ format = defines.get("format", "UDBZ")
22
23
 
23
24
  # Files to include
24
25
  files = [application]
25
26
 
26
27
  # Symlinks to create
27
- symlinks = {'Applications': '/Applications'}
28
+ symlinks = {"Applications": "/Applications"}
28
29
 
29
30
  # Volume icon
30
31
  badge_icon = icon_from_app(application)
31
32
 
32
33
  # Where to put the icons
33
- icon_locations = {
34
- appname: (114, 244),
35
- 'Applications': (527, 236)
36
- }
34
+ icon_locations = {appname: (114, 244), "Applications": (527, 236)}
37
35
 
38
- background = 'osx/dmg_resources/background.png'
36
+ background = "osx/dmg_resources/background.png"
39
37
 
40
38
  show_status_bar = False
41
39
  show_tab_view = False
@@ -46,15 +44,15 @@ show_sidebar = False
46
44
  # Window position in ((x, y), (w, h)) format
47
45
  window_rect = ((100, 100), (640, 380))
48
46
 
49
- default_view = 'icon-view'
47
+ default_view = "icon-view"
50
48
  show_icon_preview = False
51
- include_icon_view_settings = 'auto'
52
- include_list_view_settings = 'auto'
49
+ include_icon_view_settings = "auto"
50
+ include_list_view_settings = "auto"
53
51
 
54
52
  arrange_by = None
55
53
  grid_offset = (0, 0)
56
54
  grid_spacing = 50
57
55
  scroll_position = (0, 0)
58
- label_pos = 'bottom'
56
+ label_pos = "bottom"
59
57
  text_size = 16
60
58
  icon_size = 86
@@ -3,8 +3,9 @@
3
3
 
4
4
  """Plover: Open Source Stenography Software"""
5
5
 
6
- if __name__ == 'plover':
6
+ if __name__ == "plover":
7
7
  from plover.i18n import Translator
8
+
8
9
  _ = Translator(__package__)
9
10
  else:
10
11
  # exec from `setup.py`, package data
@@ -12,10 +13,10 @@ else:
12
13
  # want to translate anyway.
13
14
  _ = lambda s: s
14
15
 
15
- __version__ = '5.0.0.dev2'
16
- __copyright__ = '(C) Open Steno Project'
17
- __url__ = 'http://www.openstenoproject.org/'
18
- __download_url__ = 'http://www.openstenoproject.org/plover'
16
+ __version__ = "5.0.0rc1"
17
+ __copyright__ = "(C) Open Steno Project"
18
+ __url__ = "http://www.openstenoproject.org/"
19
+ __download_url__ = "http://www.openstenoproject.org/plover"
19
20
  __credits__ = _("""\
20
21
  Founded by stenographer Mirabai Knight.
21
22
 
@@ -30,9 +31,9 @@ Martin Koerner
30
31
 
31
32
  and many more on GitHub:
32
33
  <https://github.com/openstenoproject/plover>""")
33
- __license__ = 'GNU General Public License v2 or later (GPLv2+)'
34
+ __license__ = "GNU General Public License v2 or later (GPLv2+)"
34
35
  # i18n: Short description for Plover, currently not used in the interface.
35
- __description__ = _('Open Source Stenography Software')
36
+ __description__ = _("Open Source Stenography Software")
36
37
  __long_description__ = _("""\
37
38
  Plover is a free open source program intended to bring realtime
38
39
  stenographic technology not just to stenographers, but also to
@@ -1,5 +1,5 @@
1
1
  from plover.scripts.main import main
2
2
 
3
3
 
4
- if __name__ == '__main__':
4
+ if __name__ == "__main__":
5
5
  main()
@@ -22,11 +22,14 @@ def set_config(engine, cmdline):
22
22
 
23
23
 
24
24
  def _cmdline_to_dict(cmdline):
25
- """ Add braces and parse the entire command line as a Python dict literal. """
25
+ """Add braces and parse the entire command line as a Python dict literal."""
26
26
  try:
27
- opt_dict = ast.literal_eval('{'+cmdline+'}')
27
+ opt_dict = ast.literal_eval("{" + cmdline + "}")
28
28
  assert isinstance(opt_dict, dict)
29
29
  return opt_dict
30
30
  except (AssertionError, SyntaxError, ValueError) as e:
31
- raise ValueError('Bad command string "%s" for PLOVER:SET_CONFIG.\n' % cmdline
32
- + 'See for reference:\n\n' + set_config.__doc__) from e
31
+ raise ValueError(
32
+ 'Bad command string "%s" for PLOVER:SET_CONFIG.\n' % cmdline
33
+ + "See for reference:\n\n"
34
+ + set_config.__doc__
35
+ ) from e