supervertaler 1.9.185__tar.gz → 1.9.187__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.

Potentially problematic release.


This version of supervertaler might be problematic. Click here for more details.

Files changed (384) hide show
  1. {supervertaler-1.9.185 → supervertaler-1.9.187}/CHANGELOG.md +34 -1
  2. {supervertaler-1.9.185 → supervertaler-1.9.187}/PKG-INFO +1 -1
  3. {supervertaler-1.9.185 → supervertaler-1.9.187}/Supervertaler.py +255 -69
  4. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/index.html +5 -5
  5. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/superbrowser.py +22 -0
  6. {supervertaler-1.9.185 → supervertaler-1.9.187}/pyproject.toml +1 -1
  7. {supervertaler-1.9.185 → supervertaler-1.9.187}/supervertaler.egg-info/PKG-INFO +1 -1
  8. {supervertaler-1.9.185 → supervertaler-1.9.187}/FAQ.md +0 -0
  9. {supervertaler-1.9.185 → supervertaler-1.9.187}/LICENSE +0 -0
  10. {supervertaler-1.9.185 → supervertaler-1.9.187}/MANIFEST.in +0 -0
  11. {supervertaler-1.9.185 → supervertaler-1.9.187}/README.md +0 -0
  12. {supervertaler-1.9.185 → supervertaler-1.9.187}/assets/ICON_CONVERSION_GUIDE.md +0 -0
  13. {supervertaler-1.9.185 → supervertaler-1.9.187}/assets/MB.ico +0 -0
  14. {supervertaler-1.9.185 → supervertaler-1.9.187}/assets/README.md +0 -0
  15. {supervertaler-1.9.185 → supervertaler-1.9.187}/assets/README_ICONS.md +0 -0
  16. {supervertaler-1.9.185 → supervertaler-1.9.187}/assets/arrow_left_dark.png +0 -0
  17. {supervertaler-1.9.185 → supervertaler-1.9.187}/assets/arrow_left_light.png +0 -0
  18. {supervertaler-1.9.185 → supervertaler-1.9.187}/assets/arrow_right_dark.png +0 -0
  19. {supervertaler-1.9.185 → supervertaler-1.9.187}/assets/arrow_right_light.png +0 -0
  20. {supervertaler-1.9.185 → supervertaler-1.9.187}/assets/generate_icons.py +0 -0
  21. {supervertaler-1.9.185 → supervertaler-1.9.187}/assets/icon.ico +0 -0
  22. {supervertaler-1.9.185 → supervertaler-1.9.187}/assets/icon_128.png +0 -0
  23. {supervertaler-1.9.185 → supervertaler-1.9.187}/assets/icon_16x16.png +0 -0
  24. {supervertaler-1.9.185 → supervertaler-1.9.187}/assets/icon_24.png +0 -0
  25. {supervertaler-1.9.185 → supervertaler-1.9.187}/assets/icon_256.png +0 -0
  26. {supervertaler-1.9.185 → supervertaler-1.9.187}/assets/icon_256x256.png +0 -0
  27. {supervertaler-1.9.185 → supervertaler-1.9.187}/assets/icon_32.png +0 -0
  28. {supervertaler-1.9.185 → supervertaler-1.9.187}/assets/icon_32x32.png +0 -0
  29. {supervertaler-1.9.185 → supervertaler-1.9.187}/assets/icon_48.png +0 -0
  30. {supervertaler-1.9.185 → supervertaler-1.9.187}/assets/icon_48x48.png +0 -0
  31. {supervertaler-1.9.185 → supervertaler-1.9.187}/assets/icon_64.png +0 -0
  32. {supervertaler-1.9.185 → supervertaler-1.9.187}/assets/icon_preview.html +0 -0
  33. {supervertaler-1.9.185 → supervertaler-1.9.187}/assets/icon_sv_modern.svg +0 -0
  34. {supervertaler-1.9.185 → supervertaler-1.9.187}/assets/icon_sv_modern_paths.svg +0 -0
  35. {supervertaler-1.9.185 → supervertaler-1.9.187}/assets/icon_sv_simple.svg +0 -0
  36. {supervertaler-1.9.185 → supervertaler-1.9.187}/assets/icon_sv_website.svg +0 -0
  37. {supervertaler-1.9.185 → supervertaler-1.9.187}/assets/patent-drawing-1951.jpg +0 -0
  38. {supervertaler-1.9.185 → supervertaler-1.9.187}/assets/supervertaler_icon_colours.png +0 -0
  39. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/.nojekyll +0 -0
  40. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/CNAME +0 -0
  41. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/SIMILAR_APPS.md +0 -0
  42. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/apple-touch-icon.png +0 -0
  43. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/BUGFIX_README.md +0 -0
  44. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/CHANGELIST.md +0 -0
  45. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/CHANGELOG_Old.md +0 -0
  46. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/FAQ.md +0 -0
  47. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/INSTALLATION_v1.7.8.md +0 -0
  48. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/PROJECT_ORGANIZATION.md +0 -0
  49. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/TERMBASE_REFACTORING_SUMMARY.md +0 -0
  50. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/USER_GUIDE_v1.7.8.md +0 -0
  51. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/VERIFICATION_CHECKLIST.md +0 -0
  52. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/BEFORE_AFTER_COMPARISON.md +0 -0
  53. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/BUGFIX_SESSION_SUMMARY.md +0 -0
  54. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/COLOR_SCHEME_REFERENCE.md +0 -0
  55. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/COMPACT_LAYOUT_CHANGELOG.md +0 -0
  56. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/COMPACT_LAYOUT_DOCUMENTATION_INDEX.md +0 -0
  57. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/COMPACT_LAYOUT_IMPLEMENTATION_SUMMARY.md +0 -0
  58. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/COMPACT_LAYOUT_UPDATE.md +0 -0
  59. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/COMPLETE_IMPLEMENTATION_SUMMARY.md +0 -0
  60. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/COMPLETE_PROJECT_SUMMARY.md +0 -0
  61. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/DATABASE_FINAL_SUMMARY.md +0 -0
  62. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/DATABASE_IMPLEMENTATION.md +0 -0
  63. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/DATABASE_PRODUCTION_READY.md +0 -0
  64. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/DATABASE_QUICK_REFERENCE.md +0 -0
  65. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/DUAL_VERSION_STRATEGY.md +0 -0
  66. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/FINAL_SESSION_SUMMARY.md +0 -0
  67. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/FOLDER_STRUCTURE_UPDATE.md +0 -0
  68. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/GITHUB_PAGES_SETUP.md +0 -0
  69. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/IMPLEMENTATION_CHECKLIST.md +0 -0
  70. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/IMPLEMENTATION_COMPLETE.md +0 -0
  71. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/IMPLEMENTATION_COMPLETE_COMPACT_LAYOUT.md +0 -0
  72. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/IMPLEMENTATION_READY.md +0 -0
  73. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/IMPLEMENTATION_STATUS_PHASE2_READY.md +0 -0
  74. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/KEYBOARD_SHORTCUTS_MATCHES.md +0 -0
  75. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/LAYOUT_BEFORE_AFTER.md +0 -0
  76. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/MASTER_INDEX.md +0 -0
  77. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/MATCH_DISPLAY_IMPROVEMENTS.md +0 -0
  78. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/MATCH_DISPLAY_LONG_SEGMENTS_UPDATE.md +0 -0
  79. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/MATCH_DISPLAY_QUICK_REFERENCE.md +0 -0
  80. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/MATCH_INSERTION_FEATURES.md +0 -0
  81. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/MATCH_SHORTCUTS_QUICK_REF.md +0 -0
  82. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/MODULAR_ARCHITECTURE_GUIDE.md +0 -0
  83. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/PHASE2_IMPLEMENTATION_CHECKLIST.md +0 -0
  84. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/PHASE2_IMPLEMENTATION_DETAILED_CHECKLIST.md +0 -0
  85. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/PHASE2_IMPLEMENTATION_IN_PROGRESS.md +0 -0
  86. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/PHASE2_NEXT_STEPS.md +0 -0
  87. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/PHASE2_READY_TO_IMPLEMENT.md +0 -0
  88. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/PHASE2_START_HERE.md +0 -0
  89. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/QT_MIGRATION_PLAN.md +0 -0
  90. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/QT_SESSION_SUMMARY.md +0 -0
  91. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/QUICK_SESSION_SUMMARY.md +0 -0
  92. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/RELEASE_Qt_v1.0.0_Phase5.md +0 -0
  93. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/RELEASE_v1.9.38.md +0 -0
  94. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/RELEASE_v3.7.1.md +0 -0
  95. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/RELEASE_v3.7.6.md +0 -0
  96. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/RELEASE_v3.7.7.md +0 -0
  97. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/RESTRUCTURE_COMPLETE.md +0 -0
  98. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/SESSION_DOCUMENTATION_INDEX.md +0 -0
  99. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/SESSION_IMPLEMENTATION_SUMMARY.md +0 -0
  100. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/SESSION_LONG_SEGMENTS_COMPLETE.md +0 -0
  101. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/SESSION_MATCH_FEATURES_COMPLETE.md +0 -0
  102. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/SESSION_STATUS.md +0 -0
  103. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/SESSION_SUMMARY_Phase5.md +0 -0
  104. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/START_HERE.md +0 -0
  105. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/START_IMPLEMENTATION_HERE.md +0 -0
  106. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/STYLE_GUIDES_DELIVERABLES.md +0 -0
  107. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/STYLE_GUIDES_DOCUMENTATION_INDEX.md +0 -0
  108. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/STYLE_GUIDES_FEATURE_SUMMARY.md +0 -0
  109. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/STYLE_GUIDES_IMPLEMENTATION.md +0 -0
  110. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/STYLE_GUIDES_PROJECT_COMPLETION.md +0 -0
  111. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/STYLE_GUIDES_QUICK_REFERENCE.md +0 -0
  112. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/STYLE_GUIDES_VISUAL_ARCHITECTURE.md +0 -0
  113. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/TERMBASE_FIXES.md +0 -0
  114. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/TERMBASE_IMPLEMENTATION.md +0 -0
  115. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/TERMBASE_QUICK_START.md +0 -0
  116. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/TMX_CONCORDANCE_STYLE_HIGHLIGHTING.md +0 -0
  117. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/TMX_DUAL_HIGHLIGHTING.md +0 -0
  118. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/TMX_EDITOR_HIGHLIGHTING_UPDATE.md +0 -0
  119. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/TMX_EDITOR_IMPLEMENTATION.md +0 -0
  120. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/TMX_EDITOR_WORD_HIGHLIGHTING.md +0 -0
  121. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/TMX_TABLE_LAYOUT_INTEGRATED_EDIT.md +0 -0
  122. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/TMX_TREEVIEW_GRID_RESIZABLE.md +0 -0
  123. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/TMX_WORD_HIGHLIGHTING_IMPLEMENTATION_COMPLETE.md +0 -0
  124. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/TMX_WORD_HIGHLIGHTING_SUMMARY.md +0 -0
  125. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/TM_MATCH_PANE_CHECKLIST.md +0 -0
  126. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/TM_MATCH_PANE_IMPLEMENTATION.md +0 -0
  127. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/TM_MATCH_PANE_VISUAL_GUIDE.md +0 -0
  128. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/VISUAL_COLOR_REFERENCE.md +0 -0
  129. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/development/VISUAL_IMPLEMENTATION_SUMMARY.md +0 -0
  130. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/sessions/COLOR_FIX_EXPLANATION.md +0 -0
  131. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/sessions/DATABASE_CONSOLIDATION_REPORT.md +0 -0
  132. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/sessions/DUAL_EDITOR_WORKFLOW.md +0 -0
  133. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/sessions/DUAL_SELECTION_SYSTEM.md +0 -0
  134. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/sessions/IMPROVEMENTS_SUMMARY.md +0 -0
  135. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/sessions/ISSUES_FIXES_PROGRESS.md +0 -0
  136. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/sessions/MATCH_DISPLAY_COMPACT_FIXES.md +0 -0
  137. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/sessions/README_SESSION_TERMBASE.md +0 -0
  138. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/sessions/SAFE_DELETION_REMINDER.txt +0 -0
  139. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/sessions/SESSION_SUMMARY.md +0 -0
  140. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/sessions/TERMBASE_FIXES_APPLIED.md +0 -0
  141. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/sessions/TESTING_CHECKLIST.md +0 -0
  142. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/sessions/TMX_EDITOR_ANNOUNCEMENT.md +0 -0
  143. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/archive/sessions/TRANSLATION_RESULTS_IMPROVEMENTS.md +0 -0
  144. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/assets/Figure1.png +0 -0
  145. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/assets/patent-drawing-1951.jpg +0 -0
  146. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/changelog.html +0 -0
  147. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/dev-notes/QA.md +0 -0
  148. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/dev-notes/STYLE_GUIDES_UI_TEMPLATE.py +0 -0
  149. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/dev-notes/_Notes_2025-11-21.md +0 -0
  150. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/dev-notes/_things_to_remind_AIs_of_when_translating.md +0 -0
  151. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/dev-notes/issue_28.md +0 -0
  152. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/dev-notes/openai_debug.txt +0 -0
  153. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/dev-notes/pre-translation-dialog-enhancement.md +0 -0
  154. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/emoji_mockup.html +0 -0
  155. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/favicon.ico +0 -0
  156. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/guides/AI_PROMPT_ASSISTANT_USER_GUIDE.md +0 -0
  157. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/guides/ENCODING_REPAIR_TOOL.md +0 -0
  158. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/guides/FAQ.md +0 -0
  159. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/guides/GLOSSARY_OF_SUPERVERTALER_TERMINOLOGY.md +0 -0
  160. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/guides/JSON_EDITORS_AND_HUMAN_READABLE_FORMAT.md +0 -0
  161. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/guides/KEYBOARD_SHORTCUTS.md +0 -0
  162. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/guides/PDF_RESCUE.md +0 -0
  163. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/guides/PROMPT_ASSISTANT_USER_GUIDE.md +0 -0
  164. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/guides/QT_SETTINGS_DIALOG_GUIDE.md +0 -0
  165. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/guides/TERM_EXTRACTION_GUIDE.md +0 -0
  166. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/guides/USER_DATA_FOLDER_SETUP.md +0 -0
  167. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/idea_beijer.bot_integration_idea/BEIJERBOT_FEATURE_ANALYSIS.md +0 -0
  168. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/idea_beijer.bot_integration_idea/CLI_BRIDGE_SPECIFICATION.md +0 -0
  169. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/idea_beijer.bot_integration_idea/IMPLEMENTATION_ROADMAP.md +0 -0
  170. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/idea_beijer.bot_integration_idea/QUICKMENU_INTEGRATION_PLAN.md +0 -0
  171. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/idea_beijer.bot_integration_idea/README.md +0 -0
  172. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/idea_tag-cleaner/tag_cleaner.md +0 -0
  173. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/idea_use_vscode_as_cat_tool/ai-agent-translation-workflow.md +0 -0
  174. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/logo.png +0 -0
  175. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/screenshots/2025-10-13_00-46-16.jpg +0 -0
  176. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/screenshots/Superlookup_Web_resources.jpg +0 -0
  177. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/screenshots/Supervertaler_AI-Assistant.jpg +0 -0
  178. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/screenshots/Supervertaler_CLASSIC_v2.4.1_(tkinter).jpg +0 -0
  179. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/screenshots/Supervertaler_Prompt_Manager_2026-01-14.png +0 -0
  180. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/screenshots/Supervertaler_Qt_LLM_LeaderboardResults_2025-11-12.jpg +0 -0
  181. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/screenshots/Supervertaler_Qt_LLM_Leaderboard_2025-11-12.jpg +0 -0
  182. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/screenshots/Supervertaler_Superbrowser.jpg +0 -0
  183. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/screenshots/Supervertaler_dark_mode_2025-12-16.jpg +0 -0
  184. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/screenshots/Supervertaler_dark_mode_2025-12-17.jpg +0 -0
  185. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/screenshots/Supervertaler_grid.jpg +0 -0
  186. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/screenshots/Supervertaler_tkinter (v3.7.7).jpg +0 -0
  187. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/screenshots/Supervertaler_v1.9.102_compare_panel_2026-01-14.png +0 -0
  188. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/screenshots/Supervertaler_v1.9.102_grid_2026-01-14.png +0 -0
  189. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/screenshots/new/Supervertaler-grid.jpg +0 -0
  190. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/screenshots/new/Supervertaler_AI-Assistant.jpg +0 -0
  191. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/screenshots/new/Supervertaler_Prompt-Library.jpg +0 -0
  192. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/screenshots/new/Supervertaler_Qt_LLM_LeaderboardResults_2025-11-12.jpg +0 -0
  193. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/screenshots/new/Supervertaler_Qt_LLM_Leaderboard_2025-11-12.jpg +0 -0
  194. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/screenshots/new/Supervertaler_Superbrowser.jpg +0 -0
  195. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/screenshots/old/2025-10-13_00-50-24.jpg +0 -0
  196. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/screenshots/old/Supervertaler_Qt_2025-11-12.jpg +0 -0
  197. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/script.js +0 -0
  198. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/site.webmanifest +0 -0
  199. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/specifications/AI_ASSISTANT_PHASE2_IMPLEMENTATION.md +0 -0
  200. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/specifications/AI_PROMPT_ASSISTANT.md +0 -0
  201. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/specifications/AI_PROMPT_ASSISTANT_IMPLEMENTATION.md +0 -0
  202. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/specifications/EXPORT_MENU_UPDATE.md +0 -0
  203. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/specifications/IMPLEMENTATION_SUMMARY.md +0 -0
  204. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/specifications/QT_PHASE2_COMPLETE.md +0 -0
  205. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/specifications/QT_PHASE3_COMPLETE.md +0 -0
  206. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/specifications/SUPERVERTALER_DATA_FORMAT.md +0 -0
  207. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/specifications/TASK_TYPE_SYSTEM.md +0 -0
  208. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/specifications/TERMINOLOGY_UPDATE_SUMMARY.md +0 -0
  209. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/specifications/opus-api-integration.md +0 -0
  210. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/styles.css +0 -0
  211. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/.gitbook/assets/supervertaler-logo.png +0 -0
  212. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/.gitbook/assets/sv-icon.svg +0 -0
  213. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/GITBOOK_LANDING_DRAFT.md +0 -0
  214. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/README.md +0 -0
  215. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/SUMMARY.md +0 -0
  216. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/ai-translation/batch-translation.md +0 -0
  217. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/ai-translation/ollama.md +0 -0
  218. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/ai-translation/overview.md +0 -0
  219. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/ai-translation/prompt-library.md +0 -0
  220. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/ai-translation/prompts.md +0 -0
  221. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/ai-translation/providers.md +0 -0
  222. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/ai-translation/single-segment.md +0 -0
  223. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/cat-tools/cafetran.md +0 -0
  224. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/cat-tools/memoq.md +0 -0
  225. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/cat-tools/overview.md +0 -0
  226. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/cat-tools/phrase.md +0 -0
  227. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/cat-tools/trados.md +0 -0
  228. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/editor/editing-confirming.md +0 -0
  229. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/editor/filtering.md +0 -0
  230. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/editor/find-replace.md +0 -0
  231. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/editor/keyboard-shortcuts.md +0 -0
  232. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/editor/navigation.md +0 -0
  233. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/editor/pagination.md +0 -0
  234. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/editor/translation-grid.md +0 -0
  235. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/get-started/api-keys.md +0 -0
  236. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/get-started/first-project.md +0 -0
  237. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/get-started/installation.md +0 -0
  238. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/get-started/quick-start.md +0 -0
  239. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/glossaries/basics.md +0 -0
  240. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/glossaries/creating.md +0 -0
  241. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/glossaries/extraction.md +0 -0
  242. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/glossaries/highlighting.md +0 -0
  243. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/glossaries/importing.md +0 -0
  244. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/import-export/bilingual-tables.md +0 -0
  245. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/import-export/docx-import.md +0 -0
  246. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/import-export/exporting.md +0 -0
  247. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/import-export/formats.md +0 -0
  248. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/import-export/multi-file.md +0 -0
  249. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/import-export/txt-import.md +0 -0
  250. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/qa/non-translatables.md +0 -0
  251. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/qa/spellcheck.md +0 -0
  252. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/qa/tag-validation.md +0 -0
  253. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/reference/changelog.md +0 -0
  254. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/reference/contributing.md +0 -0
  255. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/reference/faq.md +0 -0
  256. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/reference/file-formats.md +0 -0
  257. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/settings/fonts.md +0 -0
  258. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/settings/general.md +0 -0
  259. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/settings/shortcuts.md +0 -0
  260. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/settings/theme.md +0 -0
  261. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/settings/view.md +0 -0
  262. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/superlookup/glossary-search.md +0 -0
  263. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/superlookup/mt.md +0 -0
  264. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/superlookup/overview.md +0 -0
  265. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/superlookup/tm-search.md +0 -0
  266. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/superlookup/web-resources.md +0 -0
  267. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/tools/autofingers.md +0 -0
  268. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/tools/image-extractor.md +0 -0
  269. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/tools/pdf-rescue.md +0 -0
  270. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/tools/tmx-editor.md +0 -0
  271. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/tools/voice-commands.md +0 -0
  272. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/translation-memory/basics.md +0 -0
  273. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/translation-memory/fuzzy-matching.md +0 -0
  274. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/translation-memory/importing-tmx.md +0 -0
  275. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/translation-memory/managing-tms.md +0 -0
  276. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/translation-memory/supermemory.md +0 -0
  277. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/troubleshooting/api-issues.md +0 -0
  278. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/troubleshooting/common-issues.md +0 -0
  279. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/troubleshooting/import-export-errors.md +0 -0
  280. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/troubleshooting/linux.md +0 -0
  281. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/superdocs/troubleshooting/performance.md +0 -0
  282. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/sv-icon.svg +0 -0
  283. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/technical/AI_ASSISTANT_GUIDE.md +0 -0
  284. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/technical/AI_ASSISTANT_IMPLEMENTATION.md +0 -0
  285. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/technical/AI_ASSISTANT_INTEGRATION.md +0 -0
  286. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/technical/AI_ASSISTANT_QUICK_REFERENCE.md +0 -0
  287. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/technical/DATABASE_LOCATIONS.md +0 -0
  288. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/technical/FILTER_HIGHLIGHTING_FIX.md +0 -0
  289. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/technical/MODULE_HEADER_PATTERN.md +0 -0
  290. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/technical/README.md +0 -0
  291. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/technical/SUPERBROWSER_GUIDE.md +0 -0
  292. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/technical/SUPERVOICE_TROUBLESHOOTING.md +0 -0
  293. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/technical/UNIFIED_PROMPT_LIBRARY_GUIDE.md +0 -0
  294. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/technical/VOICE_DICTATION_GUIDE.md +0 -0
  295. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/tests/test_encoding_corruption.txt +0 -0
  296. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/web-app-manifest-192x192.png +0 -0
  297. {supervertaler-1.9.185 → supervertaler-1.9.187}/docs/web-app-manifest-512x512.png +0 -0
  298. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/__init__.py +0 -0
  299. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/ai_actions.py +0 -0
  300. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/ai_attachment_manager.py +0 -0
  301. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/ai_file_viewer_dialog.py +0 -0
  302. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/autofingers_engine.py +0 -0
  303. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/cafetran_docx_handler.py +0 -0
  304. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/config_manager.py +0 -0
  305. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/database_manager.py +0 -0
  306. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/database_migrations.py +0 -0
  307. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/dejavurtf_handler.py +0 -0
  308. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/document_analyzer.py +0 -0
  309. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/docx_handler.py +0 -0
  310. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/encoding_repair.py +0 -0
  311. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/encoding_repair_Qt.py +0 -0
  312. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/encoding_repair_ui.py +0 -0
  313. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/extract_tm.py +0 -0
  314. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/feature_manager.py +0 -0
  315. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/figure_context_manager.py +0 -0
  316. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/file_dialog_helper.py +0 -0
  317. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/find_replace.py +0 -0
  318. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/find_replace_qt.py +0 -0
  319. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/glossary_manager.py +0 -0
  320. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/image_extractor.py +0 -0
  321. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/keyboard_shortcuts_widget.py +0 -0
  322. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/llm_clients.py +0 -0
  323. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/llm_leaderboard.py +0 -0
  324. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/llm_superbench_ui.py +0 -0
  325. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/local_llm_setup.py +0 -0
  326. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/model_update_dialog.py +0 -0
  327. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/model_version_checker.py +0 -0
  328. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/mqxliff_handler.py +0 -0
  329. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/non_translatables_manager.py +0 -0
  330. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/pdf_rescue_Qt.py +0 -0
  331. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/pdf_rescue_tkinter.py +0 -0
  332. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/phrase_docx_handler.py +0 -0
  333. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/project_home_panel.py +0 -0
  334. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/project_tm.py +0 -0
  335. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/prompt_assistant.py +0 -0
  336. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/prompt_library.py +0 -0
  337. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/prompt_library_migration.py +0 -0
  338. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/quick_access_sidebar.py +0 -0
  339. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/ribbon_widget.py +0 -0
  340. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/sdlppx_handler.py +0 -0
  341. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/setup_wizard.py +0 -0
  342. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/shortcut_manager.py +0 -0
  343. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/simple_segmenter.py +0 -0
  344. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/spellcheck_manager.py +0 -0
  345. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/statuses.py +0 -0
  346. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/style_guide_manager.py +0 -0
  347. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/superbench_ui.py +0 -0
  348. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/supercleaner.py +0 -0
  349. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/supercleaner_ui.py +0 -0
  350. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/superdocs.py +0 -0
  351. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/superdocs_viewer_qt.py +0 -0
  352. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/superlookup.py +0 -0
  353. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/tag_cleaner.py +0 -0
  354. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/tag_manager.py +0 -0
  355. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/term_extractor.py +0 -0
  356. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/termbase_entry_editor.py +0 -0
  357. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/termbase_import_export.py +0 -0
  358. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/termbase_manager.py +0 -0
  359. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/termview_widget.py +0 -0
  360. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/theme_manager.py +0 -0
  361. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/tm_editor_dialog.py +0 -0
  362. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/tm_manager_qt.py +0 -0
  363. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/tm_metadata_manager.py +0 -0
  364. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/tmx_editor.py +0 -0
  365. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/tmx_editor_qt.py +0 -0
  366. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/tmx_generator.py +0 -0
  367. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/tracked_changes.py +0 -0
  368. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/trados_docx_handler.py +0 -0
  369. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/translation_memory.py +0 -0
  370. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/translation_results_panel.py +0 -0
  371. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/translation_services.py +0 -0
  372. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/unified_prompt_library.py +0 -0
  373. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/unified_prompt_manager_qt.py +0 -0
  374. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/voice_commands.py +0 -0
  375. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/voice_dictation.py +0 -0
  376. {supervertaler-1.9.185 → supervertaler-1.9.187}/modules/voice_dictation_lite.py +0 -0
  377. {supervertaler-1.9.185 → supervertaler-1.9.187}/setup.cfg +0 -0
  378. {supervertaler-1.9.185 → supervertaler-1.9.187}/setup.py +0 -0
  379. {supervertaler-1.9.185 → supervertaler-1.9.187}/supervertaler.egg-info/SOURCES.txt +0 -0
  380. {supervertaler-1.9.185 → supervertaler-1.9.187}/supervertaler.egg-info/dependency_links.txt +0 -0
  381. {supervertaler-1.9.185 → supervertaler-1.9.187}/supervertaler.egg-info/entry_points.txt +0 -0
  382. {supervertaler-1.9.185 → supervertaler-1.9.187}/supervertaler.egg-info/not-zip-safe +0 -0
  383. {supervertaler-1.9.185 → supervertaler-1.9.187}/supervertaler.egg-info/requires.txt +0 -0
  384. {supervertaler-1.9.185 → supervertaler-1.9.187}/supervertaler.egg-info/top_level.txt +0 -0
@@ -2,10 +2,43 @@
2
2
 
3
3
  All notable changes to Supervertaler are documented in this file.
4
4
 
5
- **Current Version:** v1.9.185 (February 1, 2026)
5
+ **Current Version:** v1.9.187 (February 1, 2026)
6
6
 
7
7
 
8
8
 
9
+ ## v1.9.187 - February 1, 2026
10
+
11
+ ### ✨ New Features
12
+
13
+ - **Segment Sorting**: Added comprehensive sort dropdown button (⇅ Sort) in the toolbar, positioned after Advanced Filters. Similar to memoQ's sorting functionality, you can now sort segments by:
14
+ - **Alphabetical**: Source/Target text (A → Z or Z → A)
15
+ - **Text Length**: Source/Target (longer or shorter first)
16
+ - **Match Rate**: TM match percentage (higher or lower first)
17
+ - **Frequency**: Source/Target text occurrence count (higher or lower first)
18
+ - **Last Changed**: Modification timestamp (newest or older first)
19
+ - **Row Status**: Grouped by translation status (not started → draft → translated → confirmed)
20
+ - **Document Order**: Reset to original document structure
21
+
22
+ Sorting is applied to the entire project and reloads the grid to reflect the new order. The orange sort button with dropdown menu makes it easy to organize segments for review, identify patterns, or work systematically through similar content.
23
+
24
+ ---
25
+
26
+ ## v1.9.186 - February 1, 2026
27
+
28
+ ### 🐛 Bug Fixes
29
+
30
+ - **Exit Crash Fixed**: Resolved Python crash that occurred when closing the program via File > Exit. The crash was caused by manual WebEngine cleanup interfering with Qt's internal shutdown sequence. Now lets Qt handle WebEngine cleanup naturally, resulting in clean program exit without crashes.
31
+
32
+ - **Import Shadowing Fixed**: Fixed UnboundLocalError crashes on startup caused by local imports shadowing global imports (QWidget, QHBoxLayout). Only QButtonGroup is now imported locally where needed.
33
+
34
+ ### 🎨 UI Improvements
35
+
36
+ - **View Toggle Clarity**: Replaced confusing single "Tags OFF" toggle button with clear segmented control showing both "WYSIWYG" and "Tags" options. One button is always highlighted to show the current view mode.
37
+
38
+ - **Default View Mode**: Changed default view from WYSIWYG to Tags mode for better alignment with actual initial state. Tags button is now highlighted by default on startup.
39
+
40
+ ---
41
+
9
42
  ## v1.9.185 - February 1, 2026
10
43
 
11
44
  ### 🎨 UI Improvements
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: supervertaler
3
- Version: 1.9.185
3
+ Version: 1.9.187
4
4
  Summary: Professional AI-enhanced translation workbench with multi-LLM support, glossary system, TM, spellcheck, voice commands, and PyQt6 interface. Batteries included (core).
5
5
  Home-page: https://supervertaler.com
6
6
  Author: Michael Beijer
@@ -32,7 +32,7 @@ License: MIT
32
32
  """
33
33
 
34
34
  # Version Information.
35
- __version__ = "1.9.185"
35
+ __version__ = "1.9.187"
36
36
  __phase__ = "0.9"
37
37
  __release_date__ = "2026-02-01"
38
38
  __edition__ = "Qt"
@@ -20348,7 +20348,68 @@ class SupervertalerQt(QMainWindow):
20348
20348
  advanced_filter_btn.clicked.connect(self.show_advanced_filters_dialog)
20349
20349
  advanced_filter_btn.setMaximumWidth(160)
20350
20350
  advanced_filter_btn.setStyleSheet("background-color: #2196F3; color: white; font-weight: bold;")
20351
-
20351
+
20352
+ # Sort dropdown button (similar to memoQ)
20353
+ sort_btn = QPushButton("⇅ Sort")
20354
+ sort_btn.setMaximumWidth(100)
20355
+ sort_btn.setStyleSheet("background-color: #FF9800; color: white; font-weight: bold;")
20356
+ sort_menu = QMenu(sort_btn)
20357
+
20358
+ # Initialize sort state if not exists
20359
+ if not hasattr(self, 'current_sort'):
20360
+ self.current_sort = None # None = document order
20361
+
20362
+ # Sort by source text
20363
+ sort_menu.addAction("📝 Source A → Z", lambda: self.apply_sort('source_asc'))
20364
+ sort_menu.addAction("📝 Source Z → A", lambda: self.apply_sort('source_desc'))
20365
+
20366
+ sort_menu.addSeparator()
20367
+
20368
+ # Sort by target text
20369
+ sort_menu.addAction("📄 Target A → Z", lambda: self.apply_sort('target_asc'))
20370
+ sort_menu.addAction("📄 Target Z → A", lambda: self.apply_sort('target_desc'))
20371
+
20372
+ sort_menu.addSeparator()
20373
+
20374
+ # Sort by text length
20375
+ sort_menu.addAction("📏 Source (longer first)", lambda: self.apply_sort('source_length_desc'))
20376
+ sort_menu.addAction("📏 Source (shorter first)", lambda: self.apply_sort('source_length_asc'))
20377
+ sort_menu.addAction("📏 Target (longer first)", lambda: self.apply_sort('target_length_desc'))
20378
+ sort_menu.addAction("📏 Target (shorter first)", lambda: self.apply_sort('target_length_asc'))
20379
+
20380
+ sort_menu.addSeparator()
20381
+
20382
+ # Sort by match rate
20383
+ sort_menu.addAction("🎯 Match Rate (higher first)", lambda: self.apply_sort('match_desc'))
20384
+ sort_menu.addAction("🎯 Match Rate (lower first)", lambda: self.apply_sort('match_asc'))
20385
+
20386
+ sort_menu.addSeparator()
20387
+
20388
+ # Sort by frequency
20389
+ sort_menu.addAction("📊 Source Frequency (higher first)", lambda: self.apply_sort('source_freq_desc'))
20390
+ sort_menu.addAction("📊 Source Frequency (lower first)", lambda: self.apply_sort('source_freq_asc'))
20391
+ sort_menu.addAction("📊 Target Frequency (higher first)", lambda: self.apply_sort('target_freq_desc'))
20392
+ sort_menu.addAction("📊 Target Frequency (lower first)", lambda: self.apply_sort('target_freq_asc'))
20393
+
20394
+ sort_menu.addSeparator()
20395
+
20396
+ # Sort by last changed
20397
+ sort_menu.addAction("🕒 Last Changed (newest first)", lambda: self.apply_sort('modified_desc'))
20398
+ sort_menu.addAction("🕒 Last Changed (oldest first)", lambda: self.apply_sort('modified_asc'))
20399
+
20400
+ sort_menu.addSeparator()
20401
+
20402
+ # Sort by row status
20403
+ sort_menu.addAction("🚦 Row Status", lambda: self.apply_sort('status'))
20404
+
20405
+ sort_menu.addSeparator()
20406
+
20407
+ # Reset to document order
20408
+ sort_menu.addAction("↩️ Document Order (default)", lambda: self.apply_sort(None))
20409
+
20410
+ sort_btn.setMenu(sort_menu)
20411
+ sort_btn.setToolTip("Sort segments by various criteria")
20412
+
20352
20413
  # File filter dropdown (for multi-file projects)
20353
20414
  self.file_filter_combo = QComboBox()
20354
20415
  self.file_filter_combo.setMinimumWidth(150)
@@ -20442,6 +20503,7 @@ class SupervertalerQt(QMainWindow):
20442
20503
  filter_layout.addWidget(clear_filters_btn)
20443
20504
  filter_layout.addWidget(quick_filter_btn)
20444
20505
  filter_layout.addWidget(advanced_filter_btn)
20506
+ filter_layout.addWidget(sort_btn) # Sort dropdown
20445
20507
  filter_layout.addWidget(self.file_filter_combo) # File filter for multi-file projects
20446
20508
  filter_layout.addWidget(show_invisibles_btn_home)
20447
20509
  filter_layout.addWidget(self.spellcheck_btn)
@@ -20565,30 +20627,80 @@ class SupervertalerQt(QMainWindow):
20565
20627
  tab_seg_info.setStyleSheet("font-weight: bold;")
20566
20628
  toolbar_layout.addWidget(tab_seg_info)
20567
20629
 
20568
- # Tag View toggle button
20569
- tag_view_btn = QPushButton("🏷️ Tags OFF")
20570
- tag_view_btn.setCheckable(True)
20571
- tag_view_btn.setChecked(False) # Default: WYSIWYG mode (tags hidden)
20572
- tag_view_btn.setStyleSheet("""
20630
+ # View mode segmented control (WYSIWYG / Tags)
20631
+ from PyQt6.QtWidgets import QButtonGroup
20632
+
20633
+ view_mode_container = QWidget()
20634
+ view_mode_layout = QHBoxLayout(view_mode_container)
20635
+ view_mode_layout.setContentsMargins(0, 0, 0, 0)
20636
+ view_mode_layout.setSpacing(0)
20637
+
20638
+ # Create button group to ensure only one is checked
20639
+ view_mode_group = QButtonGroup(self)
20640
+ view_mode_group.setExclusive(True)
20641
+
20642
+ # WYSIWYG button (left)
20643
+ wysiwyg_btn = QPushButton("WYSIWYG")
20644
+ wysiwyg_btn.setCheckable(True)
20645
+ wysiwyg_btn.setChecked(False)
20646
+ wysiwyg_btn.setToolTip("WYSIWYG View (Ctrl+Alt+T)\nShows formatted text without raw tags")
20647
+ wysiwyg_btn.setStyleSheet("""
20573
20648
  QPushButton {
20574
20649
  background-color: #757575;
20575
20650
  color: white;
20576
20651
  font-weight: bold;
20577
- padding: 4px 8px;
20578
- border-radius: 3px;
20652
+ padding: 4px 12px;
20653
+ border: none;
20654
+ border-top-left-radius: 3px;
20655
+ border-bottom-left-radius: 3px;
20579
20656
  }
20580
20657
  QPushButton:checked {
20581
20658
  background-color: #9C27B0;
20582
20659
  }
20660
+ QPushButton:hover:!checked {
20661
+ background-color: #858585;
20662
+ }
20583
20663
  """)
20584
- tag_view_btn.setToolTip("Toggle Tag View (Ctrl+Alt+T)\n\nTags OFF: Shows formatted text (WYSIWYG)\nTags ON: Shows raw tags like <b>bold</b>")
20585
- tag_view_btn.clicked.connect(lambda checked: self.toggle_tag_view(checked, tag_view_btn))
20586
- toolbar_layout.addWidget(tag_view_btn)
20587
- self.tag_view_btn = tag_view_btn # Store reference
20664
+ wysiwyg_btn.clicked.connect(lambda: self.toggle_tag_view(False, None))
20665
+ view_mode_group.addButton(wysiwyg_btn, 0)
20666
+ view_mode_layout.addWidget(wysiwyg_btn)
20667
+
20668
+ # Tags button (right)
20669
+ tags_btn = QPushButton("Tags")
20670
+ tags_btn.setCheckable(True)
20671
+ tags_btn.setChecked(True) # Default: Tags mode
20672
+ tags_btn.setToolTip("Tag View (Ctrl+Alt+T)\nShows raw tags like <b>bold</b>")
20673
+ tags_btn.setStyleSheet("""
20674
+ QPushButton {
20675
+ background-color: #757575;
20676
+ color: white;
20677
+ font-weight: bold;
20678
+ padding: 4px 12px;
20679
+ border: none;
20680
+ border-top-right-radius: 3px;
20681
+ border-bottom-right-radius: 3px;
20682
+ }
20683
+ QPushButton:checked {
20684
+ background-color: #9C27B0;
20685
+ }
20686
+ QPushButton:hover:!checked {
20687
+ background-color: #858585;
20688
+ }
20689
+ """)
20690
+ tags_btn.clicked.connect(lambda: self.toggle_tag_view(True, None))
20691
+ view_mode_group.addButton(tags_btn, 1)
20692
+ view_mode_layout.addWidget(tags_btn)
20693
+
20694
+ toolbar_layout.addWidget(view_mode_container)
20695
+
20696
+ # Store references for keyboard shortcut and programmatic access
20697
+ self.wysiwyg_btn = wysiwyg_btn
20698
+ self.tags_btn = tags_btn
20699
+ self.view_mode_group = view_mode_group
20588
20700
 
20589
20701
  # Initialize tag view state
20590
20702
  if not hasattr(self, 'show_tags'):
20591
- self.show_tags = False
20703
+ self.show_tags = True # Default: show tags
20592
20704
 
20593
20705
  # Status selector
20594
20706
  from modules.statuses import get_status, STATUSES
@@ -37566,7 +37678,116 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
37566
37678
  self.table.setUpdatesEnabled(True)
37567
37679
 
37568
37680
  self.log(f"🔍 Advanced filters: showing {visible_count} of {len(self.current_project.segments)} segments")
37569
-
37681
+
37682
+ def apply_sort(self, sort_type: str = None):
37683
+ """Sort segments by various criteria (similar to memoQ)"""
37684
+ if not self.current_project or not hasattr(self, 'table') or self.table is None:
37685
+ return
37686
+
37687
+ if not self.current_project.segments:
37688
+ return
37689
+
37690
+ # Store original document order if not already stored
37691
+ if not hasattr(self, '_original_segment_order'):
37692
+ self._original_segment_order = self.current_project.segments.copy()
37693
+
37694
+ # Update current sort state
37695
+ self.current_sort = sort_type
37696
+
37697
+ # If sort_type is None, restore document order
37698
+ if sort_type is None:
37699
+ self.current_project.segments = self._original_segment_order.copy()
37700
+ self.load_segments_to_grid()
37701
+ self.log("↩️ Restored document order")
37702
+ return
37703
+
37704
+ # Helper function to get text without tags for more accurate sorting
37705
+ def strip_tags(text: str) -> str:
37706
+ """Remove HTML/XML tags from text for sorting"""
37707
+ import re
37708
+ return re.sub(r'<[^>]+>', '', text).strip()
37709
+
37710
+ # Calculate frequency maps if needed
37711
+ frequency_cache = {}
37712
+ if 'freq' in sort_type:
37713
+ from collections import Counter
37714
+ if 'source' in sort_type:
37715
+ counter = Counter(strip_tags(seg.source).lower() for seg in self.current_project.segments)
37716
+ frequency_cache = {strip_tags(seg.source).lower(): counter[strip_tags(seg.source).lower()]
37717
+ for seg in self.current_project.segments}
37718
+ else: # target frequency
37719
+ counter = Counter(strip_tags(seg.target).lower() for seg in self.current_project.segments if seg.target)
37720
+ frequency_cache = {strip_tags(seg.target).lower(): counter[strip_tags(seg.target).lower()]
37721
+ for seg in self.current_project.segments if seg.target}
37722
+
37723
+ # Sort based on selected criterion
37724
+ try:
37725
+ if sort_type == 'source_asc':
37726
+ self.current_project.segments.sort(key=lambda s: strip_tags(s.source).lower())
37727
+ sort_name = "Source A → Z"
37728
+ elif sort_type == 'source_desc':
37729
+ self.current_project.segments.sort(key=lambda s: strip_tags(s.source).lower(), reverse=True)
37730
+ sort_name = "Source Z → A"
37731
+ elif sort_type == 'target_asc':
37732
+ self.current_project.segments.sort(key=lambda s: strip_tags(s.target).lower() if s.target else "")
37733
+ sort_name = "Target A → Z"
37734
+ elif sort_type == 'target_desc':
37735
+ self.current_project.segments.sort(key=lambda s: strip_tags(s.target).lower() if s.target else "", reverse=True)
37736
+ sort_name = "Target Z → A"
37737
+ elif sort_type == 'source_length_asc':
37738
+ self.current_project.segments.sort(key=lambda s: len(strip_tags(s.source)))
37739
+ sort_name = "Source (shorter first)"
37740
+ elif sort_type == 'source_length_desc':
37741
+ self.current_project.segments.sort(key=lambda s: len(strip_tags(s.source)), reverse=True)
37742
+ sort_name = "Source (longer first)"
37743
+ elif sort_type == 'target_length_asc':
37744
+ self.current_project.segments.sort(key=lambda s: len(strip_tags(s.target)) if s.target else 0)
37745
+ sort_name = "Target (shorter first)"
37746
+ elif sort_type == 'target_length_desc':
37747
+ self.current_project.segments.sort(key=lambda s: len(strip_tags(s.target)) if s.target else 0, reverse=True)
37748
+ sort_name = "Target (longer first)"
37749
+ elif sort_type == 'match_asc':
37750
+ self.current_project.segments.sort(key=lambda s: getattr(s, 'match_percent', 0) or 0)
37751
+ sort_name = "Match Rate (lower first)"
37752
+ elif sort_type == 'match_desc':
37753
+ self.current_project.segments.sort(key=lambda s: getattr(s, 'match_percent', 0) or 0, reverse=True)
37754
+ sort_name = "Match Rate (higher first)"
37755
+ elif sort_type == 'source_freq_asc':
37756
+ self.current_project.segments.sort(key=lambda s: frequency_cache.get(strip_tags(s.source).lower(), 0))
37757
+ sort_name = "Source Frequency (lower first)"
37758
+ elif sort_type == 'source_freq_desc':
37759
+ self.current_project.segments.sort(key=lambda s: frequency_cache.get(strip_tags(s.source).lower(), 0), reverse=True)
37760
+ sort_name = "Source Frequency (higher first)"
37761
+ elif sort_type == 'target_freq_asc':
37762
+ self.current_project.segments.sort(key=lambda s: frequency_cache.get(strip_tags(s.target).lower(), 0) if s.target else 0)
37763
+ sort_name = "Target Frequency (lower first)"
37764
+ elif sort_type == 'target_freq_desc':
37765
+ self.current_project.segments.sort(key=lambda s: frequency_cache.get(strip_tags(s.target).lower(), 0) if s.target else 0, reverse=True)
37766
+ sort_name = "Target Frequency (higher first)"
37767
+ elif sort_type == 'modified_asc':
37768
+ self.current_project.segments.sort(key=lambda s: s.modified_at if s.modified_at else "")
37769
+ sort_name = "Last Changed (oldest first)"
37770
+ elif sort_type == 'modified_desc':
37771
+ self.current_project.segments.sort(key=lambda s: s.modified_at if s.modified_at else "", reverse=True)
37772
+ sort_name = "Last Changed (newest first)"
37773
+ elif sort_type == 'status':
37774
+ # Sort by status in a logical order: not_started, draft, translated, confirmed
37775
+ status_order = {'not_started': 0, 'draft': 1, 'translated': 2, 'confirmed': 3}
37776
+ self.current_project.segments.sort(key=lambda s: status_order.get(s.status, 99))
37777
+ sort_name = "Row Status"
37778
+ else:
37779
+ self.log(f"⚠️ Unknown sort type: {sort_type}")
37780
+ return
37781
+
37782
+ # Reload grid to reflect new order
37783
+ self.load_segments_to_grid()
37784
+ self.log(f"⇅ Sorted by: {sort_name}")
37785
+
37786
+ except Exception as e:
37787
+ self.log(f"❌ Error sorting segments: {e}")
37788
+ import traceback
37789
+ traceback.print_exc()
37790
+
37570
37791
  # ========================================================================
37571
37792
  # TABBED SEGMENT EDITOR METHODS (for Grid view)
37572
37793
  # ========================================================================
@@ -39560,32 +39781,30 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
39560
39781
 
39561
39782
  def _toggle_tag_view_via_shortcut(self):
39562
39783
  """Toggle tag view using keyboard shortcut (Ctrl+Alt+T)"""
39563
- if hasattr(self, 'tag_view_btn'):
39564
- # Toggle the button state (which triggers toggle_tag_view)
39565
- new_state = not self.tag_view_btn.isChecked()
39566
- self.tag_view_btn.setChecked(new_state)
39567
- self.toggle_tag_view(new_state, self.tag_view_btn)
39784
+ if hasattr(self, 'wysiwyg_btn') and hasattr(self, 'tags_btn'):
39785
+ # Toggle between the two modes
39786
+ new_state = not self.show_tags
39787
+ self.toggle_tag_view(new_state, None)
39568
39788
 
39569
39789
  def _enable_tag_view_after_import(self):
39570
39790
  """Auto-enable Tag View after importing a document with formatting tags"""
39571
- if hasattr(self, 'tag_view_btn'):
39572
- self.tag_view_btn.setChecked(True)
39573
- self.toggle_tag_view(True, self.tag_view_btn)
39791
+ if hasattr(self, 'tags_btn'):
39792
+ self.toggle_tag_view(True, None)
39574
39793
  self.log("🏷️ Tag View auto-enabled (formatting tags detected in import)")
39575
39794
 
39576
39795
  def toggle_tag_view(self, checked: bool, button: QPushButton = None):
39577
39796
  """Toggle between Tag View (showing raw tags) and WYSIWYG View (formatted display)"""
39578
39797
  self.show_tags = checked
39579
-
39580
- # Update button text
39581
- if button:
39798
+
39799
+ # Update segmented control buttons if they exist
39800
+ if hasattr(self, 'wysiwyg_btn') and hasattr(self, 'tags_btn'):
39582
39801
  if checked:
39583
- button.setText("🏷️ Tags ON")
39802
+ self.tags_btn.setChecked(True)
39584
39803
  else:
39585
- button.setText("🏷️ Tags OFF")
39586
-
39804
+ self.wysiwyg_btn.setChecked(True)
39805
+
39587
39806
  self.log(f"{'🏷️ Tag View ENABLED - showing raw tags' if checked else '✨ WYSIWYG View ENABLED - showing formatted text'}")
39588
-
39807
+
39589
39808
  # Refresh the grid to update display
39590
39809
  if hasattr(self, 'table') and self.current_project:
39591
39810
  self._refresh_grid_display_mode()
@@ -40958,45 +41177,12 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
40958
41177
  event.accept()
40959
41178
 
40960
41179
  def _cleanup_web_views(self):
40961
- """Clean up WebEngine views to prevent 'Release of profile requested' warning"""
40962
- try:
40963
- # Close any SuperBrowser tabs
40964
- if hasattr(self, 'superbrowser_tabs'):
40965
- for tab in self.superbrowser_tabs.values():
40966
- try:
40967
- if hasattr(tab, 'web_view'):
40968
- # Stop any loading/rendering
40969
- tab.web_view.stop()
40970
- # Clear page to release resources
40971
- tab.web_view.setPage(None)
40972
- tab.web_view.setUrl(QUrl('about:blank'))
40973
- tab.web_view.deleteLater()
40974
- except:
40975
- pass
40976
-
40977
- # Close Superlookup web views (from Web Resources tab)
40978
- if hasattr(self, 'web_views'):
40979
- for resource_id, web_view in list(self.web_views.items()):
40980
- try:
40981
- web_view.stop()
40982
- web_view.setPage(None)
40983
- web_view.setUrl(QUrl('about:blank'))
40984
- web_view.deleteLater()
40985
- except:
40986
- pass
40987
- self.web_views.clear()
40988
-
40989
- # Process events multiple times to ensure cleanup completes
40990
- from PyQt6.QtWidgets import QApplication
40991
- from PyQt6.QtCore import QUrl
40992
- for _ in range(3):
40993
- QApplication.processEvents()
40994
-
40995
- # Small delay to allow Qt to finish cleanup
40996
- import time
40997
- time.sleep(0.1)
40998
- except:
40999
- pass
41180
+ """Clean up WebEngine views - DISABLED to prevent crash"""
41181
+ # WebEngine cleanup has been disabled because it was causing Python crashes
41182
+ # on program exit. Qt will handle WebEngine cleanup automatically, though
41183
+ # you may see a "Release of profile requested" warning which is harmless.
41184
+ print("[WebEngine Cleanup] Skipping manual cleanup - letting Qt handle it")
41185
+ pass
41000
41186
 
41001
41187
  def _close_detached_log_windows(self):
41002
41188
  """Close all detached log windows when main window closes"""
@@ -17,7 +17,7 @@
17
17
  <link rel="apple-touch-icon" href="apple-touch-icon.png">
18
18
  <link rel="manifest" href="site.webmanifest">
19
19
 
20
- <link rel="stylesheet" href="styles.css?v=1.9.185">
20
+ <link rel="stylesheet" href="styles.css?v=1.9.187">
21
21
  <link rel="preconnect" href="https://fonts.googleapis.com">
22
22
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
23
23
  <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap"
@@ -50,7 +50,7 @@
50
50
  class="nav-discussions">💬 Discussions</a></li>
51
51
  <li class="nav-action">
52
52
  <a href="https://github.com/michaelbeijer/Supervertaler/blob/main/CHANGELOG.md" target="_blank"
53
- class="nav-version" title="Current version">v1.9.185</a>
53
+ class="nav-version" title="Current version">v1.9.187</a>
54
54
  </li>
55
55
  <li class="nav-action">
56
56
  <a href="https://github.com/michaelbeijer/Supervertaler" target="_blank" class="nav-icon-link"
@@ -74,7 +74,7 @@
74
74
  Supervertaler
75
75
  <span class="gradient-text">The Ultimate Translation Workbench</span>
76
76
  </h1>
77
- <p class="version-badge">v1.9.185</p>
77
+ <p class="version-badge">v1.9.187</p>
78
78
  <p class="hero-subtitle">
79
79
  AI-enhanced translation workbench. Work with ChatGPT, Claude, and Gemini simultaneously.
80
80
  Built by translators, for translators and writers.
@@ -711,7 +711,7 @@
711
711
  <div style="text-align: center; margin: 40px 0;">
712
712
  <div class="download-card featured"
713
713
  style="border: 3px solid #6366F1; max-width: 700px; margin: 0 auto;">
714
- <div class="download-badge" style="background: #6366F1;">v1.9.185</div>
714
+ <div class="download-badge" style="background: #6366F1;">v1.9.187</div>
715
715
  <h3>🎨 Supervertaler</h3>
716
716
  <p class="download-description" style="font-weight: 600; color: #6366F1; margin-bottom: 10px;">
717
717
  Modern Professional Interface
@@ -1207,7 +1207,7 @@
1207
1207
  </svg>
1208
1208
  </button>
1209
1209
 
1210
- <script src="script.js?v=1.9.185"></script>
1210
+ <script src="script.js?v=1.9.187"></script>
1211
1211
  </body>
1212
1212
 
1213
1213
  </html>
@@ -160,6 +160,20 @@ class ChatColumn(QWidget):
160
160
  """Update URL bar when page changes"""
161
161
  self.url_input.setText(url.toString())
162
162
 
163
+ def cleanup(self):
164
+ """Clean up web engine resources before deletion"""
165
+ try:
166
+ from PyQt6.QtCore import QUrl
167
+ if hasattr(self, 'web_view'):
168
+ self.web_view.stop()
169
+ self.web_view.setPage(None)
170
+ self.web_view.setUrl(QUrl('about:blank'))
171
+ self.web_view.deleteLater()
172
+ if hasattr(self, 'profile'):
173
+ self.profile.deleteLater()
174
+ except:
175
+ pass
176
+
163
177
 
164
178
  class SuperbrowserWidget(QWidget):
165
179
  """
@@ -304,6 +318,14 @@ class SuperbrowserWidget(QWidget):
304
318
  self.claude_column.go_home()
305
319
  self.gemini_column.go_home()
306
320
 
321
+ def cleanup(self):
322
+ """Clean up all web engine resources before widget deletion"""
323
+ try:
324
+ for column in self.chat_columns:
325
+ column.cleanup()
326
+ except:
327
+ pass
328
+
307
329
 
308
330
  # ============================================================================
309
331
  # STANDALONE USAGE
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "supervertaler"
7
- version = "1.9.185"
7
+ version = "1.9.187"
8
8
  description = "Professional AI-enhanced translation workbench with multi-LLM support, glossary system, TM, spellcheck, voice commands, and PyQt6 interface. Batteries included (core)."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: supervertaler
3
- Version: 1.9.185
3
+ Version: 1.9.187
4
4
  Summary: Professional AI-enhanced translation workbench with multi-LLM support, glossary system, TM, spellcheck, voice commands, and PyQt6 interface. Batteries included (core).
5
5
  Home-page: https://supervertaler.com
6
6
  Author: Michael Beijer
File without changes
File without changes