supervertaler 1.9.168__tar.gz → 1.9.172__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 (372) hide show
  1. {supervertaler-1.9.168 → supervertaler-1.9.172}/CHANGELOG.md +53 -1
  2. {supervertaler-1.9.168 → supervertaler-1.9.172}/PKG-INFO +25 -4
  3. {supervertaler-1.9.168 → supervertaler-1.9.172}/README.md +24 -3
  4. {supervertaler-1.9.168 → supervertaler-1.9.172}/Supervertaler.py +256 -50
  5. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/index.html +7 -3
  6. {supervertaler-1.9.168 → supervertaler-1.9.172}/pyproject.toml +1 -1
  7. {supervertaler-1.9.168 → supervertaler-1.9.172}/supervertaler.egg-info/PKG-INFO +25 -4
  8. {supervertaler-1.9.168 → supervertaler-1.9.172}/FAQ.md +0 -0
  9. {supervertaler-1.9.168 → supervertaler-1.9.172}/LICENSE +0 -0
  10. {supervertaler-1.9.168 → supervertaler-1.9.172}/MANIFEST.in +0 -0
  11. {supervertaler-1.9.168 → supervertaler-1.9.172}/assets/ICON_CONVERSION_GUIDE.md +0 -0
  12. {supervertaler-1.9.168 → supervertaler-1.9.172}/assets/MB.ico +0 -0
  13. {supervertaler-1.9.168 → supervertaler-1.9.172}/assets/README.md +0 -0
  14. {supervertaler-1.9.168 → supervertaler-1.9.172}/assets/generate_icons.py +0 -0
  15. {supervertaler-1.9.168 → supervertaler-1.9.172}/assets/icon.ico +0 -0
  16. {supervertaler-1.9.168 → supervertaler-1.9.172}/assets/icon_128.png +0 -0
  17. {supervertaler-1.9.168 → supervertaler-1.9.172}/assets/icon_24.png +0 -0
  18. {supervertaler-1.9.168 → supervertaler-1.9.172}/assets/icon_256.png +0 -0
  19. {supervertaler-1.9.168 → supervertaler-1.9.172}/assets/icon_32.png +0 -0
  20. {supervertaler-1.9.168 → supervertaler-1.9.172}/assets/icon_48.png +0 -0
  21. {supervertaler-1.9.168 → supervertaler-1.9.172}/assets/icon_64.png +0 -0
  22. {supervertaler-1.9.168 → supervertaler-1.9.172}/assets/icon_preview.html +0 -0
  23. {supervertaler-1.9.168 → supervertaler-1.9.172}/assets/icon_sv_modern.svg +0 -0
  24. {supervertaler-1.9.168 → supervertaler-1.9.172}/assets/icon_sv_modern_paths.svg +0 -0
  25. {supervertaler-1.9.168 → supervertaler-1.9.172}/assets/icon_sv_simple.svg +0 -0
  26. {supervertaler-1.9.168 → supervertaler-1.9.172}/assets/patent-drawing-1951.jpg +0 -0
  27. {supervertaler-1.9.168 → supervertaler-1.9.172}/assets/supervertaler_icon_colours.png +0 -0
  28. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/.nojekyll +0 -0
  29. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/CNAME +0 -0
  30. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/SIMILAR_APPS.md +0 -0
  31. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/apple-touch-icon.png +0 -0
  32. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/BUGFIX_README.md +0 -0
  33. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/CHANGELIST.md +0 -0
  34. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/CHANGELOG_Old.md +0 -0
  35. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/FAQ.md +0 -0
  36. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/INSTALLATION_v1.7.8.md +0 -0
  37. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/PROJECT_ORGANIZATION.md +0 -0
  38. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/TERMBASE_REFACTORING_SUMMARY.md +0 -0
  39. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/USER_GUIDE_v1.7.8.md +0 -0
  40. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/VERIFICATION_CHECKLIST.md +0 -0
  41. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/BEFORE_AFTER_COMPARISON.md +0 -0
  42. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/BUGFIX_SESSION_SUMMARY.md +0 -0
  43. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/COLOR_SCHEME_REFERENCE.md +0 -0
  44. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/COMPACT_LAYOUT_CHANGELOG.md +0 -0
  45. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/COMPACT_LAYOUT_DOCUMENTATION_INDEX.md +0 -0
  46. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/COMPACT_LAYOUT_IMPLEMENTATION_SUMMARY.md +0 -0
  47. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/COMPACT_LAYOUT_UPDATE.md +0 -0
  48. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/COMPLETE_IMPLEMENTATION_SUMMARY.md +0 -0
  49. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/COMPLETE_PROJECT_SUMMARY.md +0 -0
  50. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/DATABASE_FINAL_SUMMARY.md +0 -0
  51. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/DATABASE_IMPLEMENTATION.md +0 -0
  52. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/DATABASE_PRODUCTION_READY.md +0 -0
  53. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/DATABASE_QUICK_REFERENCE.md +0 -0
  54. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/DUAL_VERSION_STRATEGY.md +0 -0
  55. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/FINAL_SESSION_SUMMARY.md +0 -0
  56. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/FOLDER_STRUCTURE_UPDATE.md +0 -0
  57. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/GITHUB_PAGES_SETUP.md +0 -0
  58. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/IMPLEMENTATION_CHECKLIST.md +0 -0
  59. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/IMPLEMENTATION_COMPLETE.md +0 -0
  60. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/IMPLEMENTATION_COMPLETE_COMPACT_LAYOUT.md +0 -0
  61. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/IMPLEMENTATION_READY.md +0 -0
  62. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/IMPLEMENTATION_STATUS_PHASE2_READY.md +0 -0
  63. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/KEYBOARD_SHORTCUTS_MATCHES.md +0 -0
  64. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/LAYOUT_BEFORE_AFTER.md +0 -0
  65. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/MASTER_INDEX.md +0 -0
  66. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/MATCH_DISPLAY_IMPROVEMENTS.md +0 -0
  67. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/MATCH_DISPLAY_LONG_SEGMENTS_UPDATE.md +0 -0
  68. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/MATCH_DISPLAY_QUICK_REFERENCE.md +0 -0
  69. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/MATCH_INSERTION_FEATURES.md +0 -0
  70. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/MATCH_SHORTCUTS_QUICK_REF.md +0 -0
  71. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/MODULAR_ARCHITECTURE_GUIDE.md +0 -0
  72. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/PHASE2_IMPLEMENTATION_CHECKLIST.md +0 -0
  73. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/PHASE2_IMPLEMENTATION_DETAILED_CHECKLIST.md +0 -0
  74. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/PHASE2_IMPLEMENTATION_IN_PROGRESS.md +0 -0
  75. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/PHASE2_NEXT_STEPS.md +0 -0
  76. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/PHASE2_READY_TO_IMPLEMENT.md +0 -0
  77. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/PHASE2_START_HERE.md +0 -0
  78. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/QT_MIGRATION_PLAN.md +0 -0
  79. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/QT_SESSION_SUMMARY.md +0 -0
  80. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/QUICK_SESSION_SUMMARY.md +0 -0
  81. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/RELEASE_Qt_v1.0.0_Phase5.md +0 -0
  82. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/RELEASE_v1.9.38.md +0 -0
  83. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/RELEASE_v3.7.1.md +0 -0
  84. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/RELEASE_v3.7.6.md +0 -0
  85. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/RELEASE_v3.7.7.md +0 -0
  86. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/RESTRUCTURE_COMPLETE.md +0 -0
  87. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/SESSION_DOCUMENTATION_INDEX.md +0 -0
  88. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/SESSION_IMPLEMENTATION_SUMMARY.md +0 -0
  89. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/SESSION_LONG_SEGMENTS_COMPLETE.md +0 -0
  90. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/SESSION_MATCH_FEATURES_COMPLETE.md +0 -0
  91. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/SESSION_STATUS.md +0 -0
  92. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/SESSION_SUMMARY_Phase5.md +0 -0
  93. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/START_HERE.md +0 -0
  94. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/START_IMPLEMENTATION_HERE.md +0 -0
  95. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/STYLE_GUIDES_DELIVERABLES.md +0 -0
  96. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/STYLE_GUIDES_DOCUMENTATION_INDEX.md +0 -0
  97. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/STYLE_GUIDES_FEATURE_SUMMARY.md +0 -0
  98. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/STYLE_GUIDES_IMPLEMENTATION.md +0 -0
  99. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/STYLE_GUIDES_PROJECT_COMPLETION.md +0 -0
  100. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/STYLE_GUIDES_QUICK_REFERENCE.md +0 -0
  101. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/STYLE_GUIDES_VISUAL_ARCHITECTURE.md +0 -0
  102. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/TERMBASE_FIXES.md +0 -0
  103. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/TERMBASE_IMPLEMENTATION.md +0 -0
  104. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/TERMBASE_QUICK_START.md +0 -0
  105. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/TMX_CONCORDANCE_STYLE_HIGHLIGHTING.md +0 -0
  106. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/TMX_DUAL_HIGHLIGHTING.md +0 -0
  107. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/TMX_EDITOR_HIGHLIGHTING_UPDATE.md +0 -0
  108. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/TMX_EDITOR_IMPLEMENTATION.md +0 -0
  109. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/TMX_EDITOR_WORD_HIGHLIGHTING.md +0 -0
  110. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/TMX_TABLE_LAYOUT_INTEGRATED_EDIT.md +0 -0
  111. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/TMX_TREEVIEW_GRID_RESIZABLE.md +0 -0
  112. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/TMX_WORD_HIGHLIGHTING_IMPLEMENTATION_COMPLETE.md +0 -0
  113. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/TMX_WORD_HIGHLIGHTING_SUMMARY.md +0 -0
  114. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/TM_MATCH_PANE_CHECKLIST.md +0 -0
  115. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/TM_MATCH_PANE_IMPLEMENTATION.md +0 -0
  116. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/TM_MATCH_PANE_VISUAL_GUIDE.md +0 -0
  117. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/VISUAL_COLOR_REFERENCE.md +0 -0
  118. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/development/VISUAL_IMPLEMENTATION_SUMMARY.md +0 -0
  119. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/sessions/COLOR_FIX_EXPLANATION.md +0 -0
  120. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/sessions/DATABASE_CONSOLIDATION_REPORT.md +0 -0
  121. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/sessions/DUAL_EDITOR_WORKFLOW.md +0 -0
  122. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/sessions/DUAL_SELECTION_SYSTEM.md +0 -0
  123. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/sessions/IMPROVEMENTS_SUMMARY.md +0 -0
  124. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/sessions/ISSUES_FIXES_PROGRESS.md +0 -0
  125. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/sessions/MATCH_DISPLAY_COMPACT_FIXES.md +0 -0
  126. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/sessions/README_SESSION_TERMBASE.md +0 -0
  127. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/sessions/SAFE_DELETION_REMINDER.txt +0 -0
  128. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/sessions/SESSION_SUMMARY.md +0 -0
  129. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/sessions/TERMBASE_FIXES_APPLIED.md +0 -0
  130. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/sessions/TESTING_CHECKLIST.md +0 -0
  131. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/sessions/TMX_EDITOR_ANNOUNCEMENT.md +0 -0
  132. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/archive/sessions/TRANSLATION_RESULTS_IMPROVEMENTS.md +0 -0
  133. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/assets/Figure1.png +0 -0
  134. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/assets/patent-drawing-1951.jpg +0 -0
  135. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/changelog.html +0 -0
  136. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/dev-notes/QA.md +0 -0
  137. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/dev-notes/STYLE_GUIDES_UI_TEMPLATE.py +0 -0
  138. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/dev-notes/_Notes_2025-11-21.md +0 -0
  139. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/dev-notes/_things_to_remind_AIs_of_when_translating.md +0 -0
  140. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/dev-notes/issue_28.md +0 -0
  141. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/dev-notes/openai_debug.txt +0 -0
  142. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/dev-notes/pre-translation-dialog-enhancement.md +0 -0
  143. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/emoji_mockup.html +0 -0
  144. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/favicon.ico +0 -0
  145. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/guides/AI_PROMPT_ASSISTANT_USER_GUIDE.md +0 -0
  146. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/guides/ENCODING_REPAIR_TOOL.md +0 -0
  147. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/guides/FAQ.md +0 -0
  148. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/guides/GLOSSARY_OF_SUPERVERTALER_TERMINOLOGY.md +0 -0
  149. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/guides/JSON_EDITORS_AND_HUMAN_READABLE_FORMAT.md +0 -0
  150. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/guides/KEYBOARD_SHORTCUTS.md +0 -0
  151. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/guides/PDF_RESCUE.md +0 -0
  152. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/guides/PROMPT_ASSISTANT_USER_GUIDE.md +0 -0
  153. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/guides/QT_SETTINGS_DIALOG_GUIDE.md +0 -0
  154. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/guides/TERM_EXTRACTION_GUIDE.md +0 -0
  155. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/guides/USER_DATA_FOLDER_SETUP.md +0 -0
  156. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/idea_beijer.bot_integration_idea/BEIJERBOT_FEATURE_ANALYSIS.md +0 -0
  157. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/idea_beijer.bot_integration_idea/CLI_BRIDGE_SPECIFICATION.md +0 -0
  158. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/idea_beijer.bot_integration_idea/IMPLEMENTATION_ROADMAP.md +0 -0
  159. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/idea_beijer.bot_integration_idea/QUICKMENU_INTEGRATION_PLAN.md +0 -0
  160. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/idea_beijer.bot_integration_idea/README.md +0 -0
  161. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/idea_tag-cleaner/tag_cleaner.md +0 -0
  162. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/idea_use_vscode_as_cat_tool/ai-agent-translation-workflow.md +0 -0
  163. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/logo.png +0 -0
  164. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/screenshots/2025-10-13_00-46-16.jpg +0 -0
  165. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/screenshots/Superlookup_Web_resources.jpg +0 -0
  166. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/screenshots/Supervertaler_AI-Assistant.jpg +0 -0
  167. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/screenshots/Supervertaler_CLASSIC_v2.4.1_(tkinter).jpg +0 -0
  168. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/screenshots/Supervertaler_Prompt_Manager_2026-01-14.png +0 -0
  169. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/screenshots/Supervertaler_Qt_LLM_LeaderboardResults_2025-11-12.jpg +0 -0
  170. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/screenshots/Supervertaler_Qt_LLM_Leaderboard_2025-11-12.jpg +0 -0
  171. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/screenshots/Supervertaler_Superbrowser.jpg +0 -0
  172. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/screenshots/Supervertaler_dark_mode_2025-12-16.jpg +0 -0
  173. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/screenshots/Supervertaler_dark_mode_2025-12-17.jpg +0 -0
  174. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/screenshots/Supervertaler_grid.jpg +0 -0
  175. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/screenshots/Supervertaler_tkinter (v3.7.7).jpg +0 -0
  176. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/screenshots/Supervertaler_v1.9.102_compare_panel_2026-01-14.png +0 -0
  177. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/screenshots/Supervertaler_v1.9.102_grid_2026-01-14.png +0 -0
  178. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/screenshots/new/Supervertaler-grid.jpg +0 -0
  179. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/screenshots/new/Supervertaler_AI-Assistant.jpg +0 -0
  180. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/screenshots/new/Supervertaler_Prompt-Library.jpg +0 -0
  181. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/screenshots/new/Supervertaler_Qt_LLM_LeaderboardResults_2025-11-12.jpg +0 -0
  182. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/screenshots/new/Supervertaler_Qt_LLM_Leaderboard_2025-11-12.jpg +0 -0
  183. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/screenshots/new/Supervertaler_Superbrowser.jpg +0 -0
  184. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/screenshots/old/2025-10-13_00-50-24.jpg +0 -0
  185. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/screenshots/old/Supervertaler_Qt_2025-11-12.jpg +0 -0
  186. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/script.js +0 -0
  187. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/site.webmanifest +0 -0
  188. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/specifications/AI_ASSISTANT_PHASE2_IMPLEMENTATION.md +0 -0
  189. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/specifications/AI_PROMPT_ASSISTANT.md +0 -0
  190. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/specifications/AI_PROMPT_ASSISTANT_IMPLEMENTATION.md +0 -0
  191. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/specifications/EXPORT_MENU_UPDATE.md +0 -0
  192. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/specifications/IMPLEMENTATION_SUMMARY.md +0 -0
  193. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/specifications/QT_PHASE2_COMPLETE.md +0 -0
  194. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/specifications/QT_PHASE3_COMPLETE.md +0 -0
  195. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/specifications/SUPERVERTALER_DATA_FORMAT.md +0 -0
  196. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/specifications/TASK_TYPE_SYSTEM.md +0 -0
  197. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/specifications/TERMINOLOGY_UPDATE_SUMMARY.md +0 -0
  198. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/specifications/opus-api-integration.md +0 -0
  199. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/styles.css +0 -0
  200. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/.gitbook/assets/supervertaler-logo.png +0 -0
  201. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/.gitbook/assets/sv-icon.svg +0 -0
  202. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/GITBOOK_LANDING_DRAFT.md +0 -0
  203. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/README.md +0 -0
  204. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/SUMMARY.md +0 -0
  205. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/ai-translation/batch-translation.md +0 -0
  206. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/ai-translation/ollama.md +0 -0
  207. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/ai-translation/overview.md +0 -0
  208. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/ai-translation/prompt-library.md +0 -0
  209. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/ai-translation/prompts.md +0 -0
  210. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/ai-translation/providers.md +0 -0
  211. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/ai-translation/single-segment.md +0 -0
  212. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/cat-tools/cafetran.md +0 -0
  213. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/cat-tools/memoq.md +0 -0
  214. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/cat-tools/overview.md +0 -0
  215. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/cat-tools/phrase.md +0 -0
  216. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/cat-tools/trados.md +0 -0
  217. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/editor/editing-confirming.md +0 -0
  218. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/editor/filtering.md +0 -0
  219. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/editor/find-replace.md +0 -0
  220. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/editor/keyboard-shortcuts.md +0 -0
  221. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/editor/navigation.md +0 -0
  222. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/editor/pagination.md +0 -0
  223. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/editor/translation-grid.md +0 -0
  224. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/get-started/api-keys.md +0 -0
  225. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/get-started/first-project.md +0 -0
  226. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/get-started/installation.md +0 -0
  227. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/get-started/quick-start.md +0 -0
  228. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/glossaries/basics.md +0 -0
  229. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/glossaries/creating.md +0 -0
  230. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/glossaries/extraction.md +0 -0
  231. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/glossaries/highlighting.md +0 -0
  232. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/glossaries/importing.md +0 -0
  233. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/import-export/bilingual-tables.md +0 -0
  234. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/import-export/docx-import.md +0 -0
  235. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/import-export/exporting.md +0 -0
  236. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/import-export/formats.md +0 -0
  237. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/import-export/multi-file.md +0 -0
  238. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/import-export/txt-import.md +0 -0
  239. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/qa/non-translatables.md +0 -0
  240. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/qa/spellcheck.md +0 -0
  241. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/qa/tag-validation.md +0 -0
  242. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/reference/changelog.md +0 -0
  243. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/reference/contributing.md +0 -0
  244. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/reference/faq.md +0 -0
  245. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/reference/file-formats.md +0 -0
  246. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/settings/fonts.md +0 -0
  247. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/settings/general.md +0 -0
  248. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/settings/shortcuts.md +0 -0
  249. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/settings/theme.md +0 -0
  250. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/settings/view.md +0 -0
  251. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/superlookup/glossary-search.md +0 -0
  252. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/superlookup/mt.md +0 -0
  253. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/superlookup/overview.md +0 -0
  254. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/superlookup/tm-search.md +0 -0
  255. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/superlookup/web-resources.md +0 -0
  256. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/tools/autofingers.md +0 -0
  257. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/tools/image-extractor.md +0 -0
  258. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/tools/pdf-rescue.md +0 -0
  259. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/tools/tmx-editor.md +0 -0
  260. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/tools/voice-commands.md +0 -0
  261. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/translation-memory/basics.md +0 -0
  262. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/translation-memory/fuzzy-matching.md +0 -0
  263. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/translation-memory/importing-tmx.md +0 -0
  264. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/translation-memory/managing-tms.md +0 -0
  265. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/translation-memory/supermemory.md +0 -0
  266. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/troubleshooting/api-issues.md +0 -0
  267. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/troubleshooting/common-issues.md +0 -0
  268. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/troubleshooting/import-export-errors.md +0 -0
  269. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/troubleshooting/linux.md +0 -0
  270. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/superdocs/troubleshooting/performance.md +0 -0
  271. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/sv-icon.svg +0 -0
  272. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/technical/AI_ASSISTANT_GUIDE.md +0 -0
  273. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/technical/AI_ASSISTANT_IMPLEMENTATION.md +0 -0
  274. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/technical/AI_ASSISTANT_INTEGRATION.md +0 -0
  275. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/technical/AI_ASSISTANT_QUICK_REFERENCE.md +0 -0
  276. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/technical/DATABASE_LOCATIONS.md +0 -0
  277. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/technical/FILTER_HIGHLIGHTING_FIX.md +0 -0
  278. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/technical/MODULE_HEADER_PATTERN.md +0 -0
  279. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/technical/README.md +0 -0
  280. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/technical/SUPERBROWSER_GUIDE.md +0 -0
  281. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/technical/SUPERVOICE_TROUBLESHOOTING.md +0 -0
  282. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/technical/UNIFIED_PROMPT_LIBRARY_GUIDE.md +0 -0
  283. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/technical/VOICE_DICTATION_GUIDE.md +0 -0
  284. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/tests/test_encoding_corruption.txt +0 -0
  285. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/web-app-manifest-192x192.png +0 -0
  286. {supervertaler-1.9.168 → supervertaler-1.9.172}/docs/web-app-manifest-512x512.png +0 -0
  287. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/__init__.py +0 -0
  288. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/ai_actions.py +0 -0
  289. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/ai_attachment_manager.py +0 -0
  290. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/ai_file_viewer_dialog.py +0 -0
  291. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/autofingers_engine.py +0 -0
  292. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/cafetran_docx_handler.py +0 -0
  293. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/config_manager.py +0 -0
  294. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/database_manager.py +0 -0
  295. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/database_migrations.py +0 -0
  296. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/dejavurtf_handler.py +0 -0
  297. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/document_analyzer.py +0 -0
  298. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/docx_handler.py +0 -0
  299. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/encoding_repair.py +0 -0
  300. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/encoding_repair_Qt.py +0 -0
  301. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/encoding_repair_ui.py +0 -0
  302. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/feature_manager.py +0 -0
  303. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/figure_context_manager.py +0 -0
  304. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/file_dialog_helper.py +0 -0
  305. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/find_replace.py +0 -0
  306. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/find_replace_qt.py +0 -0
  307. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/glossary_manager.py +0 -0
  308. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/image_extractor.py +0 -0
  309. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/keyboard_shortcuts_widget.py +0 -0
  310. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/llm_clients.py +0 -0
  311. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/llm_leaderboard.py +0 -0
  312. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/llm_superbench_ui.py +0 -0
  313. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/local_llm_setup.py +0 -0
  314. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/model_update_dialog.py +0 -0
  315. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/model_version_checker.py +0 -0
  316. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/mqxliff_handler.py +0 -0
  317. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/non_translatables_manager.py +0 -0
  318. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/pdf_rescue_Qt.py +0 -0
  319. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/pdf_rescue_tkinter.py +0 -0
  320. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/phrase_docx_handler.py +0 -0
  321. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/project_home_panel.py +0 -0
  322. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/prompt_assistant.py +0 -0
  323. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/prompt_library.py +0 -0
  324. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/prompt_library_migration.py +0 -0
  325. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/quick_access_sidebar.py +0 -0
  326. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/ribbon_widget.py +0 -0
  327. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/sdlppx_handler.py +0 -0
  328. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/setup_wizard.py +0 -0
  329. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/shortcut_manager.py +0 -0
  330. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/simple_segmenter.py +0 -0
  331. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/spellcheck_manager.py +0 -0
  332. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/statuses.py +0 -0
  333. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/style_guide_manager.py +0 -0
  334. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/superbench_ui.py +0 -0
  335. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/superbrowser.py +0 -0
  336. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/supercleaner.py +0 -0
  337. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/supercleaner_ui.py +0 -0
  338. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/superdocs.py +0 -0
  339. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/superdocs_viewer_qt.py +0 -0
  340. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/superlookup.py +0 -0
  341. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/tag_cleaner.py +0 -0
  342. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/tag_manager.py +0 -0
  343. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/term_extractor.py +0 -0
  344. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/termbase_entry_editor.py +0 -0
  345. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/termbase_import_export.py +0 -0
  346. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/termbase_manager.py +0 -0
  347. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/termview_widget.py +0 -0
  348. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/theme_manager.py +0 -0
  349. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/tm_editor_dialog.py +0 -0
  350. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/tm_manager_qt.py +0 -0
  351. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/tm_metadata_manager.py +0 -0
  352. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/tmx_editor.py +0 -0
  353. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/tmx_editor_qt.py +0 -0
  354. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/tmx_generator.py +0 -0
  355. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/tracked_changes.py +0 -0
  356. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/trados_docx_handler.py +0 -0
  357. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/translation_memory.py +0 -0
  358. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/translation_results_panel.py +0 -0
  359. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/translation_services.py +0 -0
  360. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/unified_prompt_library.py +0 -0
  361. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/unified_prompt_manager_qt.py +0 -0
  362. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/voice_commands.py +0 -0
  363. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/voice_dictation.py +0 -0
  364. {supervertaler-1.9.168 → supervertaler-1.9.172}/modules/voice_dictation_lite.py +0 -0
  365. {supervertaler-1.9.168 → supervertaler-1.9.172}/setup.cfg +0 -0
  366. {supervertaler-1.9.168 → supervertaler-1.9.172}/setup.py +0 -0
  367. {supervertaler-1.9.168 → supervertaler-1.9.172}/supervertaler.egg-info/SOURCES.txt +0 -0
  368. {supervertaler-1.9.168 → supervertaler-1.9.172}/supervertaler.egg-info/dependency_links.txt +0 -0
  369. {supervertaler-1.9.168 → supervertaler-1.9.172}/supervertaler.egg-info/entry_points.txt +0 -0
  370. {supervertaler-1.9.168 → supervertaler-1.9.172}/supervertaler.egg-info/not-zip-safe +0 -0
  371. {supervertaler-1.9.168 → supervertaler-1.9.172}/supervertaler.egg-info/requires.txt +0 -0
  372. {supervertaler-1.9.168 → supervertaler-1.9.172}/supervertaler.egg-info/top_level.txt +0 -0
@@ -2,7 +2,59 @@
2
2
 
3
3
  All notable changes to Supervertaler are documented in this file.
4
4
 
5
- **Current Version:** v1.9.168 (January 27, 2026)
5
+ **Current Version:** v1.9.172 (January 28, 2026)
6
+
7
+
8
+
9
+ ## v1.9.172 - January 28, 2026
10
+
11
+ ### 🐛 Bug Fixes
12
+
13
+ - **Fresh Projects Start Clean**: Fixed bug where TMs and glossaries remained activated from previous sessions when loading/creating new projects. Now all TMs and glossaries are properly deactivated when loading a project, giving you a clean slate. Saved resource activations are then restored from the project file if available.
14
+
15
+ ---
16
+
17
+ ## v1.9.171 - January 28, 2026
18
+
19
+ ### 🐛 Bug Fixes
20
+
21
+ - **TM Target & Alt+0 Badge Restored**: Fixed regression where the TM Target and its blue "0" badge (Alt+0 shortcut) were missing from the Match Panel, even when TM matches were found. TM matches are now displayed correctly, and the Alt+0 shortcut works as documented.
22
+
23
+ ---
24
+
25
+ ## v1.9.170 - January 27, 2026
26
+
27
+ ### ✨ New Features
28
+
29
+ - **Scratchpad Tab in Right Panel**: The Scratchpad is now available as a permanent tab in the right panel for easier access.
30
+ - **Location**: Right panel tabs → last tab after "Session Log"
31
+ - **Auto-Update**: Content automatically syncs with project's scratchpad notes
32
+ - **Dual Access**: Available both as popup dialog (`Ctrl+Shift+P`) and as permanent tab
33
+ - **Project-Aware**: Tab clears when creating new project, populates when loading project
34
+
35
+ - **Settings Improvement**: "Disable ALL caches" is now checked by default for new installs, ensuring maximum privacy and control for new users.
36
+
37
+ - **TM Target Shortcut Badge**: Added a blue "0" badge next to the TM Target in the Match Panel, indicating the Alt+0 shortcut for instant TM match insertion. Shortcut is documented and works out of the box.
38
+
39
+ ---
40
+
41
+ ## v1.9.169 - January 27, 2026
42
+
43
+ ### ✨ New Features
44
+
45
+ - **Scratchpad for Private Notes**: New pop-up scratchpad for translator's private notes during a job.
46
+ - **Access**: `Tools → 📝 Scratchpad...` or keyboard shortcut `Ctrl+Shift+P`
47
+ - **Private**: Notes are stored only in the `.svproj` file and are **never** exported to CAT tools or shared with clients
48
+ - **Persistent**: Notes are saved with the project and restored when you reopen it
49
+ - **Use Cases**:
50
+ - Terminology decisions and rationale
51
+ - Client preferences and style notes
52
+ - Research findings and reference links
53
+ - Questions to ask the project manager
54
+ - Personal reminders and to-do items
55
+ - **Design**: Clean dialog with monospace font, placeholder text with usage suggestions
56
+
57
+ ---
6
58
 
7
59
  ## v1.9.168 - January 27, 2026
8
60
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: supervertaler
3
- Version: 1.9.168
3
+ Version: 1.9.172
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
@@ -71,7 +71,7 @@ Dynamic: home-page
71
71
  Dynamic: license-file
72
72
  Dynamic: requires-python
73
73
 
74
- # 🚀 Supervertaler v1.9.168
74
+ # 🚀 Supervertaler v1.9.172
75
75
 
76
76
  [![PyPI version](https://badge.fury.io/py/supervertaler.svg)](https://pypi.org/project/Supervertaler/)
77
77
  [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
@@ -79,9 +79,30 @@ Dynamic: requires-python
79
79
 
80
80
  AI-enhanced CAT tool with multi-LLM support (GPT-4, Claude, Gemini, Ollama), innovative Superlookup concordance system offering access to multiple terminology sources (TMs, glossaries, web resources, etc.), and seamless CAT tool integration (memoQ, Trados, CafeTran, Phrase).
81
81
 
82
- **Current Version:** v1.9.168 (January 27, 2026)
83
82
 
84
- ### NEW in v1.9.168 - 📝 Markdown File Import with Syntax Highlighting
83
+ **Current Version:** v1.9.172 (January 28, 2026)
84
+
85
+ ### FIXED in v1.9.172 - 🐛 Fresh Projects Start Clean
86
+
87
+ - **Fresh Projects Start Clean**: Fixed bug where TMs and glossaries remained activated from previous sessions when loading/creating new projects. Now all resources are properly deactivated, giving you a clean slate.
88
+
89
+ ### FIXED in v1.9.171 - 🐛 TM Target & Alt+0 Badge Regression
90
+
91
+ - **TM Target & Alt+0 Badge Restored**: Fixed regression where the TM Target and its blue "0" badge (Alt+0 shortcut) were missing from the Match Panel.
92
+
93
+ ### NEW in v1.9.170 - 📝 Scratchpad Tab, Cache Defaults, TM Target Shortcut Badge
94
+
95
+ - **Scratchpad Tab in Right Panel**: The Scratchpad is now available as a permanent tab in the right panel for easier access.
96
+ - **Location**: Right panel tabs → last tab after "Session Log"
97
+ - **Auto-Update**: Content automatically syncs with project's scratchpad notes
98
+ - **Dual Access**: Available both as popup dialog (`Ctrl+Shift+P`) and as permanent tab
99
+ - **Project-Aware**: Tab clears when creating new project, populates when loading project
100
+
101
+ - **Settings Improvement**: "Disable ALL caches" is now checked by default for new installs, ensuring maximum privacy and control for new users.
102
+
103
+ - **TM Target Shortcut Badge**: Added a blue "0" badge next to the TM Target in the Match Panel, indicating the Alt+0 shortcut for instant TM match insertion. Shortcut is documented and works out of the box.
104
+
105
+ ### Previously in v1.9.168 - 📝 Markdown File Import with Syntax Highlighting
85
106
 
86
107
  Import Markdown files (`.md`) with full syntax highlighting! Headings, bold/italic markers, code blocks, links, images, blockquotes, and lists are all highlighted with distinctive colors. ([#127](https://github.com/michaelbeijer/Supervertaler/issues/127))
87
108
 
@@ -1,4 +1,4 @@
1
- # 🚀 Supervertaler v1.9.168
1
+ # 🚀 Supervertaler v1.9.172
2
2
 
3
3
  [![PyPI version](https://badge.fury.io/py/supervertaler.svg)](https://pypi.org/project/Supervertaler/)
4
4
  [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
@@ -6,9 +6,30 @@
6
6
 
7
7
  AI-enhanced CAT tool with multi-LLM support (GPT-4, Claude, Gemini, Ollama), innovative Superlookup concordance system offering access to multiple terminology sources (TMs, glossaries, web resources, etc.), and seamless CAT tool integration (memoQ, Trados, CafeTran, Phrase).
8
8
 
9
- **Current Version:** v1.9.168 (January 27, 2026)
10
9
 
11
- ### NEW in v1.9.168 - 📝 Markdown File Import with Syntax Highlighting
10
+ **Current Version:** v1.9.172 (January 28, 2026)
11
+
12
+ ### FIXED in v1.9.172 - 🐛 Fresh Projects Start Clean
13
+
14
+ - **Fresh Projects Start Clean**: Fixed bug where TMs and glossaries remained activated from previous sessions when loading/creating new projects. Now all resources are properly deactivated, giving you a clean slate.
15
+
16
+ ### FIXED in v1.9.171 - 🐛 TM Target & Alt+0 Badge Regression
17
+
18
+ - **TM Target & Alt+0 Badge Restored**: Fixed regression where the TM Target and its blue "0" badge (Alt+0 shortcut) were missing from the Match Panel.
19
+
20
+ ### NEW in v1.9.170 - 📝 Scratchpad Tab, Cache Defaults, TM Target Shortcut Badge
21
+
22
+ - **Scratchpad Tab in Right Panel**: The Scratchpad is now available as a permanent tab in the right panel for easier access.
23
+ - **Location**: Right panel tabs → last tab after "Session Log"
24
+ - **Auto-Update**: Content automatically syncs with project's scratchpad notes
25
+ - **Dual Access**: Available both as popup dialog (`Ctrl+Shift+P`) and as permanent tab
26
+ - **Project-Aware**: Tab clears when creating new project, populates when loading project
27
+
28
+ - **Settings Improvement**: "Disable ALL caches" is now checked by default for new installs, ensuring maximum privacy and control for new users.
29
+
30
+ - **TM Target Shortcut Badge**: Added a blue "0" badge next to the TM Target in the Match Panel, indicating the Alt+0 shortcut for instant TM match insertion. Shortcut is documented and works out of the box.
31
+
32
+ ### Previously in v1.9.168 - 📝 Markdown File Import with Syntax Highlighting
12
33
 
13
34
  Import Markdown files (`.md`) with full syntax highlighting! Headings, bold/italic markers, code blocks, links, images, blockquotes, and lists are all highlighted with distinctive colors. ([#127](https://github.com/michaelbeijer/Supervertaler/issues/127))
14
35
 
@@ -34,9 +34,9 @@ License: MIT
34
34
  """
35
35
 
36
36
  # Version Information.
37
- __version__ = "1.9.168"
37
+ __version__ = "1.9.172"
38
38
  __phase__ = "0.9"
39
- __release_date__ = "2026-01-27"
39
+ __release_date__ = "2026-01-28"
40
40
  __edition__ = "Qt"
41
41
 
42
42
  import sys
@@ -833,6 +833,8 @@ class Project:
833
833
  # Multi-file project support
834
834
  files: List[Dict[str, Any]] = None # List of files in project: [{id, name, path, type, segment_count, ...}]
835
835
  is_multifile: bool = False # True if this is a multi-file project
836
+ # Scratchpad for private translator notes (stored only in .svproj, never exported to CAT tools)
837
+ scratchpad_notes: str = ""
836
838
 
837
839
  def __post_init__(self):
838
840
  if self.segments is None:
@@ -926,6 +928,10 @@ class Project:
926
928
  if self.files:
927
929
  result['files'] = self.files
928
930
 
931
+ # Add scratchpad notes (private translator notes, never exported to CAT tools)
932
+ if self.scratchpad_notes:
933
+ result['scratchpad_notes'] = self.scratchpad_notes
934
+
929
935
  # Add segments LAST (so they appear at the end of the file)
930
936
  result['segments'] = [seg.to_dict() for seg in self.segments]
931
937
 
@@ -998,6 +1004,9 @@ class Project:
998
1004
  project.is_multifile = data['is_multifile']
999
1005
  if 'files' in data:
1000
1006
  project.files = data['files']
1007
+ # Store scratchpad notes if they exist
1008
+ if 'scratchpad_notes' in data:
1009
+ project.scratchpad_notes = data['scratchpad_notes']
1001
1010
  return project
1002
1011
 
1003
1012
 
@@ -5298,6 +5307,76 @@ class AdvancedFiltersDialog(QDialog):
5298
5307
 
5299
5308
  return filters
5300
5309
 
5310
+
5311
+ class ScratchpadDialog(QDialog):
5312
+ """Dialog for private translator notes (scratchpad).
5313
+
5314
+ Notes are stored only in the .svproj file and never exported to CAT tools.
5315
+ """
5316
+
5317
+ def __init__(self, parent=None, notes_text: str = ""):
5318
+ super().__init__(parent)
5319
+ self.notes_text = notes_text
5320
+ self.setup_ui()
5321
+
5322
+ def setup_ui(self):
5323
+ self.setWindowTitle("📝 Scratchpad - Private Notes")
5324
+ self.setMinimumWidth(500)
5325
+ self.setMinimumHeight(400)
5326
+ self.resize(600, 450)
5327
+
5328
+ layout = QVBoxLayout(self)
5329
+ layout.setSpacing(10)
5330
+
5331
+ # Info label
5332
+ info_label = QLabel(
5333
+ "📝 <b>Private notes for this project</b><br>"
5334
+ "<small>These notes are saved with your project (.svproj) file and are <b>never</b> "
5335
+ "exported to CAT tools or shared with clients.</small>"
5336
+ )
5337
+ info_label.setWordWrap(True)
5338
+ info_label.setStyleSheet("color: #666; padding: 5px; background: #f9f9f9; border-radius: 4px;")
5339
+ layout.addWidget(info_label)
5340
+
5341
+ # Notes text area
5342
+ self.notes_edit = QPlainTextEdit()
5343
+ self.notes_edit.setPlainText(self.notes_text)
5344
+ self.notes_edit.setPlaceholderText(
5345
+ "Use this scratchpad for your private notes during translation:\n\n"
5346
+ "• Terminology decisions\n"
5347
+ "• Client preferences\n"
5348
+ "• Research findings\n"
5349
+ "• Questions to ask\n"
5350
+ "• Reminders for yourself"
5351
+ )
5352
+ # Nice monospace-ish font for notes
5353
+ font = self.notes_edit.font()
5354
+ font.setFamily("Consolas, Courier New, monospace")
5355
+ font.setPointSize(10)
5356
+ self.notes_edit.setFont(font)
5357
+ layout.addWidget(self.notes_edit, 1) # Stretch to fill
5358
+
5359
+ # Button row
5360
+ button_layout = QHBoxLayout()
5361
+ button_layout.addStretch()
5362
+
5363
+ cancel_btn = QPushButton("Cancel")
5364
+ cancel_btn.clicked.connect(self.reject)
5365
+ button_layout.addWidget(cancel_btn)
5366
+
5367
+ save_btn = QPushButton("💾 Save Notes")
5368
+ save_btn.setStyleSheet("background-color: #4CAF50; color: white; font-weight: bold; padding: 6px 16px; border: none;")
5369
+ save_btn.clicked.connect(self.accept)
5370
+ save_btn.setDefault(True)
5371
+ button_layout.addWidget(save_btn)
5372
+
5373
+ layout.addLayout(button_layout)
5374
+
5375
+ def get_notes(self) -> str:
5376
+ """Return the current notes text."""
5377
+ return self.notes_edit.toPlainText()
5378
+
5379
+
5301
5380
  # ============================================================================
5302
5381
  # BATCH TRANSLATION WORKER & PROGRESS DIALOG
5303
5382
  # ============================================================================
@@ -6009,7 +6088,7 @@ class SupervertalerQt(QMainWindow):
6009
6088
 
6010
6089
  # 🧪 EXPERIMENTAL: Cache kill switch for performance testing
6011
6090
  # When True, all caches are bypassed - direct lookups every time
6012
- self.disable_all_caches = False
6091
+ self.disable_all_caches = True
6013
6092
 
6014
6093
  # Undo/Redo stack for grid edits
6015
6094
  self.undo_stack = [] # List of (segment_id, old_target, new_target, old_status, new_status)
@@ -7659,6 +7738,12 @@ class SupervertalerQt(QMainWindow):
7659
7738
  image_extractor_action.setToolTip("Extract images from DOCX files")
7660
7739
  tools_menu.addAction(image_extractor_action)
7661
7740
 
7741
+ scratchpad_action = QAction("📝 Scratch&pad...", self)
7742
+ scratchpad_action.setShortcut("Ctrl+Shift+P")
7743
+ scratchpad_action.triggered.connect(self.show_scratchpad)
7744
+ scratchpad_action.setToolTip("Private notes for this project (never exported to CAT tools)")
7745
+ tools_menu.addAction(scratchpad_action)
7746
+
7662
7747
  tools_menu.addSeparator()
7663
7748
 
7664
7749
  settings_action = QAction("&Settings...", self)
@@ -16399,7 +16484,7 @@ class SupervertalerQt(QMainWindow):
16399
16484
 
16400
16485
  # Cache kill switch
16401
16486
  disable_cache_cb = CheckmarkCheckBox("Disable ALL caches (direct lookups every time)")
16402
- disable_cache_cb.setChecked(general_settings.get('disable_all_caches', False))
16487
+ disable_cache_cb.setChecked(general_settings.get('disable_all_caches', True))
16403
16488
  disable_cache_cb.setToolTip(
16404
16489
  "When enabled, ALL caching is bypassed:\n"
16405
16490
  "• Termbase cache\n"
@@ -19042,7 +19127,7 @@ class SupervertalerQt(QMainWindow):
19042
19127
  'results_compare_font_size': 9,
19043
19128
  'autohotkey_path': ahk_path_edit.text().strip() if ahk_path_edit is not None else existing_settings.get('autohotkey_path', ''),
19044
19129
  'enable_sound_effects': sound_effects_cb.isChecked() if sound_effects_cb is not None else existing_settings.get('enable_sound_effects', False),
19045
- 'disable_all_caches': disable_cache_cb.isChecked() if disable_cache_cb is not None else existing_settings.get('disable_all_caches', False)
19130
+ 'disable_all_caches': disable_cache_cb.isChecked() if disable_cache_cb is not None else existing_settings.get('disable_all_caches', True)
19046
19131
  }
19047
19132
 
19048
19133
  # Keep a fast-access instance value
@@ -19999,6 +20084,35 @@ class SupervertalerQt(QMainWindow):
19999
20084
  self._notes_widget_for_right_panel = notes_widget
20000
20085
  self._session_log_widget_for_right_panel = session_log_widget
20001
20086
 
20087
+ # Scratchpad widget (for private translator notes - project-level, not segment-level)
20088
+ scratchpad_widget = QWidget()
20089
+ scratchpad_layout = QVBoxLayout(scratchpad_widget)
20090
+ scratchpad_layout.setContentsMargins(5, 5, 5, 5)
20091
+
20092
+ # Info label at top
20093
+ scratchpad_info = QLabel(
20094
+ "📝 <b>Private notes for this project</b><br>"
20095
+ "<small>Stored in .svproj file only — never exported to CAT tools</small>"
20096
+ )
20097
+ scratchpad_info.setWordWrap(True)
20098
+ scratchpad_info.setStyleSheet("color: #666; font-size: 9pt; padding: 3px; background: #f9f9f9; border-radius: 3px; margin-bottom: 5px;")
20099
+ scratchpad_layout.addWidget(scratchpad_info)
20100
+
20101
+ self.scratchpad_edit = QPlainTextEdit()
20102
+ self.scratchpad_edit.setPlaceholderText(
20103
+ "Use this scratchpad for your private notes:\n\n"
20104
+ "• Terminology decisions\n"
20105
+ "• Client preferences\n"
20106
+ "• Research findings\n"
20107
+ "• Questions to ask\n"
20108
+ "• Reminders"
20109
+ )
20110
+ self.scratchpad_edit.setStyleSheet("font-family: 'Consolas', 'Courier New', monospace; font-size: 10pt;")
20111
+ self.scratchpad_edit.textChanged.connect(self._on_scratchpad_changed)
20112
+ scratchpad_layout.addWidget(self.scratchpad_edit)
20113
+
20114
+ self._scratchpad_widget_for_right_panel = scratchpad_widget
20115
+
20002
20116
  # Create a container for the left side that will hold everything
20003
20117
  left_container = QWidget()
20004
20118
  left_container_layout = QVBoxLayout(left_container)
@@ -20074,6 +20188,7 @@ class SupervertalerQt(QMainWindow):
20074
20188
 
20075
20189
  # Tab 2: Match Panel (Termview + TM Source/Target) - shown first by default
20076
20190
  match_panel_widget = self._create_match_panel()
20191
+ self.match_panel_widget = match_panel_widget # Store reference for mode detection
20077
20192
  right_tabs.addTab(match_panel_widget, "🎯 Match Panel")
20078
20193
  match_panel_tab_index = tab_index
20079
20194
  tab_index += 1
@@ -20093,6 +20208,10 @@ class SupervertalerQt(QMainWindow):
20093
20208
  right_tabs.addTab(self._session_log_widget_for_right_panel, "📋 Session Log")
20094
20209
  tab_index += 1
20095
20210
 
20211
+ # Tab 7: Scratchpad (private translator notes for the whole project)
20212
+ right_tabs.addTab(self._scratchpad_widget_for_right_panel, "📝 Scratchpad")
20213
+ tab_index += 1
20214
+
20096
20215
  # Set default selected tab to Match Panel (always show Match Panel first)
20097
20216
  right_tabs.setCurrentIndex(match_panel_tab_index)
20098
20217
 
@@ -21149,6 +21268,9 @@ class SupervertalerQt(QMainWindow):
21149
21268
  self.load_segments_to_grid()
21150
21269
  self.initialize_tm_database() # Initialize TM for this project
21151
21270
 
21271
+ # Clear scratchpad for new project
21272
+ self._update_scratchpad_for_project()
21273
+
21152
21274
  self.log(f"Created new project: {project_name} ({source_lang} → {target_lang})")
21153
21275
 
21154
21276
  # Prompt to save
@@ -21343,37 +21465,38 @@ class SupervertalerQt(QMainWindow):
21343
21465
  # Restore activated TMs for this project
21344
21466
  if hasattr(self, 'tm_metadata_mgr') and self.tm_metadata_mgr and self.current_project:
21345
21467
  project_id = self.current_project.id if hasattr(self.current_project, 'id') else None
21346
- if project_id and hasattr(self.current_project, 'tm_settings') and self.current_project.tm_settings:
21347
- activated_tm_ids = self.current_project.tm_settings.get('activated_tm_ids', [])
21348
- if activated_tm_ids:
21349
- # First deactivate all TMs for this project
21350
- all_tms = self.tm_metadata_mgr.get_all_tms()
21351
- for tm in all_tms:
21352
- self.tm_metadata_mgr.deactivate_tm(tm['id'], project_id)
21353
-
21354
- # Then activate the saved TMs and restore read_only status
21355
- tm_read_only_status = self.current_project.tm_settings.get('tm_read_only_status', {})
21356
- for tm_id in activated_tm_ids:
21357
- # Find TM by tm_id (not db id)
21358
- tm = next((t for t in all_tms if t['tm_id'] == tm_id), None)
21359
- if tm:
21360
- self.tm_metadata_mgr.activate_tm(tm['id'], project_id)
21361
- # Restore read_only status if saved
21362
- if tm_id in tm_read_only_status:
21363
- read_only = tm_read_only_status[tm_id]
21364
- self.tm_metadata_mgr.set_read_only(tm['id'], read_only)
21365
- status = "read-only" if read_only else "writable"
21366
- self.log(f"✓ Restored TM: {tm['name']} (activated, {status})")
21468
+ if project_id:
21469
+ # First deactivate all TMs for this project (start clean)
21470
+ all_tms = self.tm_metadata_mgr.get_all_tms()
21471
+ for tm in all_tms:
21472
+ self.tm_metadata_mgr.deactivate_tm(tm['id'], project_id)
21473
+
21474
+ # Then restore saved TM activations if they exist
21475
+ if hasattr(self.current_project, 'tm_settings') and self.current_project.tm_settings:
21476
+ activated_tm_ids = self.current_project.tm_settings.get('activated_tm_ids', [])
21477
+ if activated_tm_ids:
21478
+ # Activate the saved TMs and restore read_only status
21479
+ tm_read_only_status = self.current_project.tm_settings.get('tm_read_only_status', {})
21480
+ for tm_id in activated_tm_ids:
21481
+ # Find TM by tm_id (not db id)
21482
+ tm = next((t for t in all_tms if t['tm_id'] == tm_id), None)
21483
+ if tm:
21484
+ self.tm_metadata_mgr.activate_tm(tm['id'], project_id)
21485
+ # Restore read_only status if saved
21486
+ if tm_id in tm_read_only_status:
21487
+ read_only = tm_read_only_status[tm_id]
21488
+ self.tm_metadata_mgr.set_read_only(tm['id'], read_only)
21489
+ status = "read-only" if read_only else "writable"
21490
+ self.log(f"✓ Restored TM: {tm['name']} (activated, {status})")
21491
+ else:
21492
+ self.log(f"✓ Restored activated TM: {tm['name']}")
21367
21493
  else:
21368
- self.log(f" Restored activated TM: {tm['name']}")
21369
- else:
21370
- self.log(f"⚠️ Could not find TM with tm_id: {tm_id}")
21371
-
21372
- # Refresh TM UI to show restored activations
21373
- if hasattr(self, 'tm_tab_refresh_callback'):
21374
- self.tm_tab_refresh_callback()
21375
- self.log(f"✓ Refreshed TM UI with restored activations")
21376
-
21494
+ self.log(f"⚠️ Could not find TM with tm_id: {tm_id}")
21495
+
21496
+ # Refresh TM UI to show (de)activations
21497
+ if hasattr(self, 'tm_tab_refresh_callback'):
21498
+ self.tm_tab_refresh_callback()
21499
+
21377
21500
  # Restore activated termbases for this project
21378
21501
  if hasattr(self, 'termbase_mgr') and self.termbase_mgr and self.current_project:
21379
21502
  project_id = self.current_project.id if hasattr(self.current_project, 'id') else None
@@ -21548,6 +21671,9 @@ class SupervertalerQt(QMainWindow):
21548
21671
  self.sound_effects_map = project_settings['sound_effects_map']
21549
21672
  self.log(f"✓ Project override: sound effects map loaded")
21550
21673
 
21674
+ # Update scratchpad with project's private notes
21675
+ self._update_scratchpad_for_project()
21676
+
21551
21677
  self.log(f"✓ Loaded project: {self.current_project.name} ({len(self.current_project.segments)} segments)")
21552
21678
 
21553
21679
 
@@ -28564,9 +28690,10 @@ class SupervertalerQt(QMainWindow):
28564
28690
  tm_nav_btns[1].clicked.connect(lambda: self._match_panel_nav_tm(1))
28565
28691
  tm_layout.addWidget(tm_source_container, 1)
28566
28692
 
28567
- # TM Target box (GREEN, with metadata)
28693
+ # TM Target box (GREEN, with metadata and shortcut badge)
28568
28694
  tm_target_container, self.match_panel_tm_target, self.match_panel_tm_target_label, _ = self._create_compare_panel_box(
28569
- "✅ TM Target", tm_box_bg, text_color, border_color, has_navigation=False, show_metadata_label=True)
28695
+ "✅ TM Target", tm_box_bg, text_color, border_color, has_navigation=False, show_metadata_label=True,
28696
+ shortcut_badge_text="0", shortcut_badge_tooltip="Alt+0")
28570
28697
  tm_layout.addWidget(tm_target_container, 1)
28571
28698
 
28572
28699
  # Force stylesheet on the tm_container itself (the parent widget holding both boxes)
@@ -28620,8 +28747,9 @@ class SupervertalerQt(QMainWindow):
28620
28747
  self.match_panel_tm_source.setPlainText(tm_source_text or "(No TM match)")
28621
28748
 
28622
28749
  # Update TM Target text (no diff highlighting needed for target)
28750
+ # Badge is now in the title bar (QLabel), so just set plain text here
28623
28751
  target_text = match.get('target', '')
28624
- self.match_panel_tm_target.setPlainText(target_text)
28752
+ self.match_panel_tm_target.setPlainText(target_text if target_text else "")
28625
28753
 
28626
28754
  # Update metadata label (TM name, percentage)
28627
28755
  if hasattr(self, 'match_panel_tm_target_label') and self.match_panel_tm_target_label:
@@ -28667,7 +28795,7 @@ class SupervertalerQt(QMainWindow):
28667
28795
  badge_label.setFixedSize(badge_width, 14)
28668
28796
  badge_label.setStyleSheet("""
28669
28797
  QLabel {
28670
- background-color: #2196F3;
28798
+ background-color: #1976D2;
28671
28799
  color: white;
28672
28800
  border-radius: 7px;
28673
28801
  font-size: 9px;
@@ -30165,8 +30293,8 @@ class SupervertalerQt(QMainWindow):
30165
30293
  self.show_translation_results_pane = settings.get('show_translation_results_pane', False)
30166
30294
  self.show_compare_panel = settings.get('show_compare_panel', True)
30167
30295
 
30168
- # 🧪 EXPERIMENTAL: Load cache kill switch setting (default: False = caches enabled)
30169
- self.disable_all_caches = settings.get('disable_all_caches', False)
30296
+ # 🧪 EXPERIMENTAL: Load cache kill switch setting (default: True = caches disabled for stability)
30297
+ self.disable_all_caches = settings.get('disable_all_caches', True)
30170
30298
 
30171
30299
  # Load LLM provider settings for AI Assistant
30172
30300
  llm_settings = self.load_llm_settings()
@@ -34777,15 +34905,21 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
34777
34905
  self.log(f" ⚠️ Panel update error: {e}")
34778
34906
  self.log(" ✓ Translation Results panel updated")
34779
34907
 
34780
- # 7b. Update Match Panel with TM matches
34908
+ # 7b. Update Match Panel with TM matches (must use TranslationMatch objects for correct display)
34909
+ from modules.translation_results_panel import TranslationMatch
34781
34910
  tm_matches_for_panel = []
34782
34911
  for tm_match in tm_matches:
34783
- tm_matches_for_panel.append({
34784
- 'source': tm_match.get('source', ''),
34785
- 'target': tm_match.get('target', ''),
34786
- 'tm_name': tm_match.get('tm_name', 'TM'),
34787
- 'match_pct': int(tm_match.get('similarity', 0) * 100)
34788
- })
34912
+ tm_matches_for_panel.append(TranslationMatch(
34913
+ source=tm_match.get('source', ''),
34914
+ target=tm_match.get('target', ''),
34915
+ relevance=int(tm_match.get('similarity', 0) * 100),
34916
+ metadata={
34917
+ 'tm_name': tm_match.get('tm_name', 'TM'),
34918
+ },
34919
+ match_type='TM',
34920
+ compare_source=tm_match.get('source', ''),
34921
+ provider_code='TM'
34922
+ ))
34789
34923
  self.set_compare_panel_matches(segment_id, segment.source, tm_matches_for_panel, [])
34790
34924
  self.log(" ✓ Match Panel updated")
34791
34925
 
@@ -36671,6 +36805,28 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
36671
36805
  self._refresh_segment_status(seg)
36672
36806
  break
36673
36807
 
36808
+ def _on_scratchpad_changed(self):
36809
+ """Handle scratchpad change - saves to current project (not segment-level)"""
36810
+ if not self.current_project:
36811
+ return
36812
+
36813
+ new_notes = self.scratchpad_edit.toPlainText()
36814
+ self.current_project.scratchpad_notes = new_notes
36815
+ self.current_project.modified = datetime.now().isoformat()
36816
+ self.project_modified = True
36817
+
36818
+ def _update_scratchpad_for_project(self):
36819
+ """Update the Scratchpad tab with the current project's scratchpad notes"""
36820
+ if not hasattr(self, 'scratchpad_edit') or not self.scratchpad_edit:
36821
+ return
36822
+
36823
+ self.scratchpad_edit.blockSignals(True)
36824
+ if self.current_project and hasattr(self.current_project, 'scratchpad_notes'):
36825
+ self.scratchpad_edit.setPlainText(self.current_project.scratchpad_notes or '')
36826
+ else:
36827
+ self.scratchpad_edit.clear()
36828
+ self.scratchpad_edit.blockSignals(False)
36829
+
36674
36830
  def _update_bottom_notes_for_segment(self, segment):
36675
36831
  """Update the bottom Notes tab with the current segment's notes"""
36676
36832
  if not hasattr(self, 'bottom_notes_edit') or not self.bottom_notes_edit:
@@ -37300,6 +37456,7 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
37300
37456
  """Return active shortcut context for match shortcuts.
37301
37457
 
37302
37458
  Returns:
37459
+ 'match' if Match Panel tab is active,
37303
37460
  'results' if Translation Results tab is active,
37304
37461
  '' otherwise.
37305
37462
  """
@@ -37309,6 +37466,8 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
37309
37466
  except Exception:
37310
37467
  current = None
37311
37468
  if current is not None:
37469
+ if hasattr(self, 'match_panel_widget') and self.match_panel_widget and current is self.match_panel_widget:
37470
+ return 'match'
37312
37471
  if hasattr(self, 'translation_results_panel') and self.translation_results_panel and current is self.translation_results_panel:
37313
37472
  return 'results'
37314
37473
  return ''
@@ -37370,12 +37529,27 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
37370
37529
  self.on_match_inserted(text)
37371
37530
 
37372
37531
  def _handle_compare_panel_alt0_shortcut(self):
37373
- """Handle Compare Panel Alt+0 / Alt+00 (double-tap) insertion.
37532
+ """Handle Alt+0 insertion from Match Panel or Compare Panel.
37533
+
37534
+ Match Panel (mode='match'):
37535
+ - Single tap Alt+0: insert TM Target from Match Panel
37374
37536
 
37537
+ Compare Panel (mode='compare' - not currently used):
37375
37538
  - Single tap (Alt+0): insert MT
37376
37539
  - Double tap (Alt+0,0 within 300ms): undo first insert, then insert TM Target
37377
37540
  """
37378
- if self._get_active_match_shortcut_mode() != 'compare':
37541
+ mode = self._get_active_match_shortcut_mode()
37542
+
37543
+ # Handle Match Panel: Alt+0 inserts TM Target directly
37544
+ if mode == 'match':
37545
+ if hasattr(self, 'match_panel_tm_target'):
37546
+ text = self.match_panel_tm_target.toPlainText().strip()
37547
+ if text and not text.startswith('('):
37548
+ self._replace_current_target_segment_text(text, source_label='TM Target (Match Panel)')
37549
+ return
37550
+
37551
+ # Handle Compare Panel (legacy - currently not reached since mode never equals 'compare')
37552
+ if mode != 'compare':
37379
37553
  return
37380
37554
 
37381
37555
  import time
@@ -42634,6 +42808,38 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
42634
42808
  self.resources_tabs.setCurrentIndex(i)
42635
42809
  break
42636
42810
 
42811
+ def show_scratchpad(self):
42812
+ """Show Scratchpad dialog for private translator notes.
42813
+
42814
+ Notes are saved with the project (.svproj) and never exported to CAT tools.
42815
+ """
42816
+ if not hasattr(self, 'current_project') or self.current_project is None:
42817
+ QMessageBox.warning(
42818
+ self,
42819
+ "No Project Open",
42820
+ "Please open or create a project first before using the Scratchpad."
42821
+ )
42822
+ return
42823
+
42824
+ # Get current notes from project
42825
+ current_notes = getattr(self.current_project, 'scratchpad_notes', '') or ''
42826
+
42827
+ dialog = ScratchpadDialog(self, current_notes)
42828
+ if dialog.exec():
42829
+ # Save the notes back to the project
42830
+ new_notes = dialog.get_notes()
42831
+ self.current_project.scratchpad_notes = new_notes
42832
+
42833
+ # Mark project as modified so it will be saved
42834
+ self.current_project.modified = datetime.now().isoformat()
42835
+
42836
+ # Update status bar / log
42837
+ if new_notes:
42838
+ note_preview = new_notes[:50] + "..." if len(new_notes) > 50 else new_notes
42839
+ self.log(f"📝 Scratchpad notes updated: {note_preview.replace(chr(10), ' ')}")
42840
+ else:
42841
+ self.log("📝 Scratchpad notes cleared")
42842
+
42637
42843
  def show_theme_editor(self):
42638
42844
  """Show Theme Editor dialog"""
42639
42845
  dialog = ThemeEditorDialog(self, self.theme_manager)