supervertaler 1.9.164__tar.gz → 1.9.168__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.164 → supervertaler-1.9.168}/CHANGELOG.md +50 -1
  2. {supervertaler-1.9.164 → supervertaler-1.9.168}/PKG-INFO +14 -11
  3. {supervertaler-1.9.164 → supervertaler-1.9.168}/README.md +13 -10
  4. {supervertaler-1.9.164 → supervertaler-1.9.168}/Supervertaler.py +316 -40
  5. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/index.html +3 -3
  6. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/keyboard_shortcuts_widget.py +7 -0
  7. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/tm_metadata_manager.py +41 -0
  8. {supervertaler-1.9.164 → supervertaler-1.9.168}/pyproject.toml +1 -1
  9. {supervertaler-1.9.164 → supervertaler-1.9.168}/supervertaler.egg-info/PKG-INFO +14 -11
  10. {supervertaler-1.9.164 → supervertaler-1.9.168}/FAQ.md +0 -0
  11. {supervertaler-1.9.164 → supervertaler-1.9.168}/LICENSE +0 -0
  12. {supervertaler-1.9.164 → supervertaler-1.9.168}/MANIFEST.in +0 -0
  13. {supervertaler-1.9.164 → supervertaler-1.9.168}/assets/ICON_CONVERSION_GUIDE.md +0 -0
  14. {supervertaler-1.9.164 → supervertaler-1.9.168}/assets/MB.ico +0 -0
  15. {supervertaler-1.9.164 → supervertaler-1.9.168}/assets/README.md +0 -0
  16. {supervertaler-1.9.164 → supervertaler-1.9.168}/assets/generate_icons.py +0 -0
  17. {supervertaler-1.9.164 → supervertaler-1.9.168}/assets/icon.ico +0 -0
  18. {supervertaler-1.9.164 → supervertaler-1.9.168}/assets/icon_128.png +0 -0
  19. {supervertaler-1.9.164 → supervertaler-1.9.168}/assets/icon_24.png +0 -0
  20. {supervertaler-1.9.164 → supervertaler-1.9.168}/assets/icon_256.png +0 -0
  21. {supervertaler-1.9.164 → supervertaler-1.9.168}/assets/icon_32.png +0 -0
  22. {supervertaler-1.9.164 → supervertaler-1.9.168}/assets/icon_48.png +0 -0
  23. {supervertaler-1.9.164 → supervertaler-1.9.168}/assets/icon_64.png +0 -0
  24. {supervertaler-1.9.164 → supervertaler-1.9.168}/assets/icon_preview.html +0 -0
  25. {supervertaler-1.9.164 → supervertaler-1.9.168}/assets/icon_sv_modern.svg +0 -0
  26. {supervertaler-1.9.164 → supervertaler-1.9.168}/assets/icon_sv_modern_paths.svg +0 -0
  27. {supervertaler-1.9.164 → supervertaler-1.9.168}/assets/icon_sv_simple.svg +0 -0
  28. {supervertaler-1.9.164 → supervertaler-1.9.168}/assets/patent-drawing-1951.jpg +0 -0
  29. {supervertaler-1.9.164 → supervertaler-1.9.168}/assets/supervertaler_icon_colours.png +0 -0
  30. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/.nojekyll +0 -0
  31. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/CNAME +0 -0
  32. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/SIMILAR_APPS.md +0 -0
  33. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/apple-touch-icon.png +0 -0
  34. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/BUGFIX_README.md +0 -0
  35. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/CHANGELIST.md +0 -0
  36. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/CHANGELOG_Old.md +0 -0
  37. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/FAQ.md +0 -0
  38. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/INSTALLATION_v1.7.8.md +0 -0
  39. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/PROJECT_ORGANIZATION.md +0 -0
  40. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/TERMBASE_REFACTORING_SUMMARY.md +0 -0
  41. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/USER_GUIDE_v1.7.8.md +0 -0
  42. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/VERIFICATION_CHECKLIST.md +0 -0
  43. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/BEFORE_AFTER_COMPARISON.md +0 -0
  44. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/BUGFIX_SESSION_SUMMARY.md +0 -0
  45. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/COLOR_SCHEME_REFERENCE.md +0 -0
  46. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/COMPACT_LAYOUT_CHANGELOG.md +0 -0
  47. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/COMPACT_LAYOUT_DOCUMENTATION_INDEX.md +0 -0
  48. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/COMPACT_LAYOUT_IMPLEMENTATION_SUMMARY.md +0 -0
  49. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/COMPACT_LAYOUT_UPDATE.md +0 -0
  50. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/COMPLETE_IMPLEMENTATION_SUMMARY.md +0 -0
  51. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/COMPLETE_PROJECT_SUMMARY.md +0 -0
  52. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/DATABASE_FINAL_SUMMARY.md +0 -0
  53. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/DATABASE_IMPLEMENTATION.md +0 -0
  54. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/DATABASE_PRODUCTION_READY.md +0 -0
  55. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/DATABASE_QUICK_REFERENCE.md +0 -0
  56. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/DUAL_VERSION_STRATEGY.md +0 -0
  57. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/FINAL_SESSION_SUMMARY.md +0 -0
  58. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/FOLDER_STRUCTURE_UPDATE.md +0 -0
  59. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/GITHUB_PAGES_SETUP.md +0 -0
  60. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/IMPLEMENTATION_CHECKLIST.md +0 -0
  61. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/IMPLEMENTATION_COMPLETE.md +0 -0
  62. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/IMPLEMENTATION_COMPLETE_COMPACT_LAYOUT.md +0 -0
  63. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/IMPLEMENTATION_READY.md +0 -0
  64. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/IMPLEMENTATION_STATUS_PHASE2_READY.md +0 -0
  65. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/KEYBOARD_SHORTCUTS_MATCHES.md +0 -0
  66. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/LAYOUT_BEFORE_AFTER.md +0 -0
  67. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/MASTER_INDEX.md +0 -0
  68. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/MATCH_DISPLAY_IMPROVEMENTS.md +0 -0
  69. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/MATCH_DISPLAY_LONG_SEGMENTS_UPDATE.md +0 -0
  70. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/MATCH_DISPLAY_QUICK_REFERENCE.md +0 -0
  71. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/MATCH_INSERTION_FEATURES.md +0 -0
  72. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/MATCH_SHORTCUTS_QUICK_REF.md +0 -0
  73. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/MODULAR_ARCHITECTURE_GUIDE.md +0 -0
  74. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/PHASE2_IMPLEMENTATION_CHECKLIST.md +0 -0
  75. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/PHASE2_IMPLEMENTATION_DETAILED_CHECKLIST.md +0 -0
  76. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/PHASE2_IMPLEMENTATION_IN_PROGRESS.md +0 -0
  77. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/PHASE2_NEXT_STEPS.md +0 -0
  78. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/PHASE2_READY_TO_IMPLEMENT.md +0 -0
  79. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/PHASE2_START_HERE.md +0 -0
  80. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/QT_MIGRATION_PLAN.md +0 -0
  81. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/QT_SESSION_SUMMARY.md +0 -0
  82. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/QUICK_SESSION_SUMMARY.md +0 -0
  83. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/RELEASE_Qt_v1.0.0_Phase5.md +0 -0
  84. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/RELEASE_v1.9.38.md +0 -0
  85. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/RELEASE_v3.7.1.md +0 -0
  86. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/RELEASE_v3.7.6.md +0 -0
  87. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/RELEASE_v3.7.7.md +0 -0
  88. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/RESTRUCTURE_COMPLETE.md +0 -0
  89. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/SESSION_DOCUMENTATION_INDEX.md +0 -0
  90. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/SESSION_IMPLEMENTATION_SUMMARY.md +0 -0
  91. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/SESSION_LONG_SEGMENTS_COMPLETE.md +0 -0
  92. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/SESSION_MATCH_FEATURES_COMPLETE.md +0 -0
  93. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/SESSION_STATUS.md +0 -0
  94. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/SESSION_SUMMARY_Phase5.md +0 -0
  95. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/START_HERE.md +0 -0
  96. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/START_IMPLEMENTATION_HERE.md +0 -0
  97. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/STYLE_GUIDES_DELIVERABLES.md +0 -0
  98. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/STYLE_GUIDES_DOCUMENTATION_INDEX.md +0 -0
  99. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/STYLE_GUIDES_FEATURE_SUMMARY.md +0 -0
  100. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/STYLE_GUIDES_IMPLEMENTATION.md +0 -0
  101. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/STYLE_GUIDES_PROJECT_COMPLETION.md +0 -0
  102. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/STYLE_GUIDES_QUICK_REFERENCE.md +0 -0
  103. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/STYLE_GUIDES_VISUAL_ARCHITECTURE.md +0 -0
  104. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/TERMBASE_FIXES.md +0 -0
  105. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/TERMBASE_IMPLEMENTATION.md +0 -0
  106. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/TERMBASE_QUICK_START.md +0 -0
  107. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/TMX_CONCORDANCE_STYLE_HIGHLIGHTING.md +0 -0
  108. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/TMX_DUAL_HIGHLIGHTING.md +0 -0
  109. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/TMX_EDITOR_HIGHLIGHTING_UPDATE.md +0 -0
  110. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/TMX_EDITOR_IMPLEMENTATION.md +0 -0
  111. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/TMX_EDITOR_WORD_HIGHLIGHTING.md +0 -0
  112. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/TMX_TABLE_LAYOUT_INTEGRATED_EDIT.md +0 -0
  113. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/TMX_TREEVIEW_GRID_RESIZABLE.md +0 -0
  114. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/TMX_WORD_HIGHLIGHTING_IMPLEMENTATION_COMPLETE.md +0 -0
  115. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/TMX_WORD_HIGHLIGHTING_SUMMARY.md +0 -0
  116. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/TM_MATCH_PANE_CHECKLIST.md +0 -0
  117. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/TM_MATCH_PANE_IMPLEMENTATION.md +0 -0
  118. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/TM_MATCH_PANE_VISUAL_GUIDE.md +0 -0
  119. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/VISUAL_COLOR_REFERENCE.md +0 -0
  120. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/development/VISUAL_IMPLEMENTATION_SUMMARY.md +0 -0
  121. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/sessions/COLOR_FIX_EXPLANATION.md +0 -0
  122. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/sessions/DATABASE_CONSOLIDATION_REPORT.md +0 -0
  123. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/sessions/DUAL_EDITOR_WORKFLOW.md +0 -0
  124. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/sessions/DUAL_SELECTION_SYSTEM.md +0 -0
  125. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/sessions/IMPROVEMENTS_SUMMARY.md +0 -0
  126. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/sessions/ISSUES_FIXES_PROGRESS.md +0 -0
  127. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/sessions/MATCH_DISPLAY_COMPACT_FIXES.md +0 -0
  128. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/sessions/README_SESSION_TERMBASE.md +0 -0
  129. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/sessions/SAFE_DELETION_REMINDER.txt +0 -0
  130. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/sessions/SESSION_SUMMARY.md +0 -0
  131. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/sessions/TERMBASE_FIXES_APPLIED.md +0 -0
  132. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/sessions/TESTING_CHECKLIST.md +0 -0
  133. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/sessions/TMX_EDITOR_ANNOUNCEMENT.md +0 -0
  134. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/archive/sessions/TRANSLATION_RESULTS_IMPROVEMENTS.md +0 -0
  135. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/assets/Figure1.png +0 -0
  136. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/assets/patent-drawing-1951.jpg +0 -0
  137. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/changelog.html +0 -0
  138. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/dev-notes/QA.md +0 -0
  139. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/dev-notes/STYLE_GUIDES_UI_TEMPLATE.py +0 -0
  140. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/dev-notes/_Notes_2025-11-21.md +0 -0
  141. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/dev-notes/_things_to_remind_AIs_of_when_translating.md +0 -0
  142. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/dev-notes/issue_28.md +0 -0
  143. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/dev-notes/openai_debug.txt +0 -0
  144. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/dev-notes/pre-translation-dialog-enhancement.md +0 -0
  145. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/emoji_mockup.html +0 -0
  146. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/favicon.ico +0 -0
  147. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/guides/AI_PROMPT_ASSISTANT_USER_GUIDE.md +0 -0
  148. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/guides/ENCODING_REPAIR_TOOL.md +0 -0
  149. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/guides/FAQ.md +0 -0
  150. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/guides/GLOSSARY_OF_SUPERVERTALER_TERMINOLOGY.md +0 -0
  151. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/guides/JSON_EDITORS_AND_HUMAN_READABLE_FORMAT.md +0 -0
  152. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/guides/KEYBOARD_SHORTCUTS.md +0 -0
  153. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/guides/PDF_RESCUE.md +0 -0
  154. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/guides/PROMPT_ASSISTANT_USER_GUIDE.md +0 -0
  155. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/guides/QT_SETTINGS_DIALOG_GUIDE.md +0 -0
  156. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/guides/TERM_EXTRACTION_GUIDE.md +0 -0
  157. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/guides/USER_DATA_FOLDER_SETUP.md +0 -0
  158. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/idea_beijer.bot_integration_idea/BEIJERBOT_FEATURE_ANALYSIS.md +0 -0
  159. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/idea_beijer.bot_integration_idea/CLI_BRIDGE_SPECIFICATION.md +0 -0
  160. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/idea_beijer.bot_integration_idea/IMPLEMENTATION_ROADMAP.md +0 -0
  161. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/idea_beijer.bot_integration_idea/QUICKMENU_INTEGRATION_PLAN.md +0 -0
  162. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/idea_beijer.bot_integration_idea/README.md +0 -0
  163. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/idea_tag-cleaner/tag_cleaner.md +0 -0
  164. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/idea_use_vscode_as_cat_tool/ai-agent-translation-workflow.md +0 -0
  165. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/logo.png +0 -0
  166. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/screenshots/2025-10-13_00-46-16.jpg +0 -0
  167. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/screenshots/Superlookup_Web_resources.jpg +0 -0
  168. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/screenshots/Supervertaler_AI-Assistant.jpg +0 -0
  169. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/screenshots/Supervertaler_CLASSIC_v2.4.1_(tkinter).jpg +0 -0
  170. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/screenshots/Supervertaler_Prompt_Manager_2026-01-14.png +0 -0
  171. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/screenshots/Supervertaler_Qt_LLM_LeaderboardResults_2025-11-12.jpg +0 -0
  172. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/screenshots/Supervertaler_Qt_LLM_Leaderboard_2025-11-12.jpg +0 -0
  173. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/screenshots/Supervertaler_Superbrowser.jpg +0 -0
  174. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/screenshots/Supervertaler_dark_mode_2025-12-16.jpg +0 -0
  175. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/screenshots/Supervertaler_dark_mode_2025-12-17.jpg +0 -0
  176. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/screenshots/Supervertaler_grid.jpg +0 -0
  177. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/screenshots/Supervertaler_tkinter (v3.7.7).jpg +0 -0
  178. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/screenshots/Supervertaler_v1.9.102_compare_panel_2026-01-14.png +0 -0
  179. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/screenshots/Supervertaler_v1.9.102_grid_2026-01-14.png +0 -0
  180. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/screenshots/new/Supervertaler-grid.jpg +0 -0
  181. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/screenshots/new/Supervertaler_AI-Assistant.jpg +0 -0
  182. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/screenshots/new/Supervertaler_Prompt-Library.jpg +0 -0
  183. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/screenshots/new/Supervertaler_Qt_LLM_LeaderboardResults_2025-11-12.jpg +0 -0
  184. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/screenshots/new/Supervertaler_Qt_LLM_Leaderboard_2025-11-12.jpg +0 -0
  185. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/screenshots/new/Supervertaler_Superbrowser.jpg +0 -0
  186. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/screenshots/old/2025-10-13_00-50-24.jpg +0 -0
  187. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/screenshots/old/Supervertaler_Qt_2025-11-12.jpg +0 -0
  188. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/script.js +0 -0
  189. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/site.webmanifest +0 -0
  190. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/specifications/AI_ASSISTANT_PHASE2_IMPLEMENTATION.md +0 -0
  191. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/specifications/AI_PROMPT_ASSISTANT.md +0 -0
  192. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/specifications/AI_PROMPT_ASSISTANT_IMPLEMENTATION.md +0 -0
  193. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/specifications/EXPORT_MENU_UPDATE.md +0 -0
  194. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/specifications/IMPLEMENTATION_SUMMARY.md +0 -0
  195. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/specifications/QT_PHASE2_COMPLETE.md +0 -0
  196. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/specifications/QT_PHASE3_COMPLETE.md +0 -0
  197. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/specifications/SUPERVERTALER_DATA_FORMAT.md +0 -0
  198. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/specifications/TASK_TYPE_SYSTEM.md +0 -0
  199. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/specifications/TERMINOLOGY_UPDATE_SUMMARY.md +0 -0
  200. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/specifications/opus-api-integration.md +0 -0
  201. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/styles.css +0 -0
  202. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/.gitbook/assets/supervertaler-logo.png +0 -0
  203. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/.gitbook/assets/sv-icon.svg +0 -0
  204. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/GITBOOK_LANDING_DRAFT.md +0 -0
  205. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/README.md +0 -0
  206. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/SUMMARY.md +0 -0
  207. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/ai-translation/batch-translation.md +0 -0
  208. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/ai-translation/ollama.md +0 -0
  209. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/ai-translation/overview.md +0 -0
  210. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/ai-translation/prompt-library.md +0 -0
  211. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/ai-translation/prompts.md +0 -0
  212. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/ai-translation/providers.md +0 -0
  213. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/ai-translation/single-segment.md +0 -0
  214. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/cat-tools/cafetran.md +0 -0
  215. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/cat-tools/memoq.md +0 -0
  216. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/cat-tools/overview.md +0 -0
  217. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/cat-tools/phrase.md +0 -0
  218. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/cat-tools/trados.md +0 -0
  219. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/editor/editing-confirming.md +0 -0
  220. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/editor/filtering.md +0 -0
  221. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/editor/find-replace.md +0 -0
  222. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/editor/keyboard-shortcuts.md +0 -0
  223. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/editor/navigation.md +0 -0
  224. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/editor/pagination.md +0 -0
  225. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/editor/translation-grid.md +0 -0
  226. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/get-started/api-keys.md +0 -0
  227. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/get-started/first-project.md +0 -0
  228. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/get-started/installation.md +0 -0
  229. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/get-started/quick-start.md +0 -0
  230. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/glossaries/basics.md +0 -0
  231. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/glossaries/creating.md +0 -0
  232. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/glossaries/extraction.md +0 -0
  233. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/glossaries/highlighting.md +0 -0
  234. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/glossaries/importing.md +0 -0
  235. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/import-export/bilingual-tables.md +0 -0
  236. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/import-export/docx-import.md +0 -0
  237. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/import-export/exporting.md +0 -0
  238. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/import-export/formats.md +0 -0
  239. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/import-export/multi-file.md +0 -0
  240. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/import-export/txt-import.md +0 -0
  241. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/qa/non-translatables.md +0 -0
  242. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/qa/spellcheck.md +0 -0
  243. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/qa/tag-validation.md +0 -0
  244. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/reference/changelog.md +0 -0
  245. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/reference/contributing.md +0 -0
  246. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/reference/faq.md +0 -0
  247. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/reference/file-formats.md +0 -0
  248. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/settings/fonts.md +0 -0
  249. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/settings/general.md +0 -0
  250. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/settings/shortcuts.md +0 -0
  251. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/settings/theme.md +0 -0
  252. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/settings/view.md +0 -0
  253. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/superlookup/glossary-search.md +0 -0
  254. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/superlookup/mt.md +0 -0
  255. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/superlookup/overview.md +0 -0
  256. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/superlookup/tm-search.md +0 -0
  257. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/superlookup/web-resources.md +0 -0
  258. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/tools/autofingers.md +0 -0
  259. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/tools/image-extractor.md +0 -0
  260. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/tools/pdf-rescue.md +0 -0
  261. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/tools/tmx-editor.md +0 -0
  262. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/tools/voice-commands.md +0 -0
  263. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/translation-memory/basics.md +0 -0
  264. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/translation-memory/fuzzy-matching.md +0 -0
  265. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/translation-memory/importing-tmx.md +0 -0
  266. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/translation-memory/managing-tms.md +0 -0
  267. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/translation-memory/supermemory.md +0 -0
  268. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/troubleshooting/api-issues.md +0 -0
  269. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/troubleshooting/common-issues.md +0 -0
  270. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/troubleshooting/import-export-errors.md +0 -0
  271. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/troubleshooting/linux.md +0 -0
  272. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/superdocs/troubleshooting/performance.md +0 -0
  273. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/sv-icon.svg +0 -0
  274. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/technical/AI_ASSISTANT_GUIDE.md +0 -0
  275. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/technical/AI_ASSISTANT_IMPLEMENTATION.md +0 -0
  276. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/technical/AI_ASSISTANT_INTEGRATION.md +0 -0
  277. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/technical/AI_ASSISTANT_QUICK_REFERENCE.md +0 -0
  278. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/technical/DATABASE_LOCATIONS.md +0 -0
  279. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/technical/FILTER_HIGHLIGHTING_FIX.md +0 -0
  280. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/technical/MODULE_HEADER_PATTERN.md +0 -0
  281. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/technical/README.md +0 -0
  282. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/technical/SUPERBROWSER_GUIDE.md +0 -0
  283. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/technical/SUPERVOICE_TROUBLESHOOTING.md +0 -0
  284. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/technical/UNIFIED_PROMPT_LIBRARY_GUIDE.md +0 -0
  285. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/technical/VOICE_DICTATION_GUIDE.md +0 -0
  286. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/tests/test_encoding_corruption.txt +0 -0
  287. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/web-app-manifest-192x192.png +0 -0
  288. {supervertaler-1.9.164 → supervertaler-1.9.168}/docs/web-app-manifest-512x512.png +0 -0
  289. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/__init__.py +0 -0
  290. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/ai_actions.py +0 -0
  291. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/ai_attachment_manager.py +0 -0
  292. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/ai_file_viewer_dialog.py +0 -0
  293. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/autofingers_engine.py +0 -0
  294. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/cafetran_docx_handler.py +0 -0
  295. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/config_manager.py +0 -0
  296. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/database_manager.py +0 -0
  297. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/database_migrations.py +0 -0
  298. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/dejavurtf_handler.py +0 -0
  299. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/document_analyzer.py +0 -0
  300. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/docx_handler.py +0 -0
  301. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/encoding_repair.py +0 -0
  302. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/encoding_repair_Qt.py +0 -0
  303. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/encoding_repair_ui.py +0 -0
  304. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/feature_manager.py +0 -0
  305. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/figure_context_manager.py +0 -0
  306. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/file_dialog_helper.py +0 -0
  307. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/find_replace.py +0 -0
  308. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/find_replace_qt.py +0 -0
  309. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/glossary_manager.py +0 -0
  310. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/image_extractor.py +0 -0
  311. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/llm_clients.py +0 -0
  312. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/llm_leaderboard.py +0 -0
  313. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/llm_superbench_ui.py +0 -0
  314. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/local_llm_setup.py +0 -0
  315. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/model_update_dialog.py +0 -0
  316. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/model_version_checker.py +0 -0
  317. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/mqxliff_handler.py +0 -0
  318. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/non_translatables_manager.py +0 -0
  319. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/pdf_rescue_Qt.py +0 -0
  320. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/pdf_rescue_tkinter.py +0 -0
  321. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/phrase_docx_handler.py +0 -0
  322. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/project_home_panel.py +0 -0
  323. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/prompt_assistant.py +0 -0
  324. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/prompt_library.py +0 -0
  325. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/prompt_library_migration.py +0 -0
  326. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/quick_access_sidebar.py +0 -0
  327. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/ribbon_widget.py +0 -0
  328. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/sdlppx_handler.py +0 -0
  329. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/setup_wizard.py +0 -0
  330. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/shortcut_manager.py +0 -0
  331. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/simple_segmenter.py +0 -0
  332. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/spellcheck_manager.py +0 -0
  333. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/statuses.py +0 -0
  334. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/style_guide_manager.py +0 -0
  335. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/superbench_ui.py +0 -0
  336. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/superbrowser.py +0 -0
  337. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/supercleaner.py +0 -0
  338. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/supercleaner_ui.py +0 -0
  339. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/superdocs.py +0 -0
  340. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/superdocs_viewer_qt.py +0 -0
  341. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/superlookup.py +0 -0
  342. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/tag_cleaner.py +0 -0
  343. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/tag_manager.py +0 -0
  344. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/term_extractor.py +0 -0
  345. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/termbase_entry_editor.py +0 -0
  346. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/termbase_import_export.py +0 -0
  347. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/termbase_manager.py +0 -0
  348. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/termview_widget.py +0 -0
  349. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/theme_manager.py +0 -0
  350. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/tm_editor_dialog.py +0 -0
  351. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/tm_manager_qt.py +0 -0
  352. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/tmx_editor.py +0 -0
  353. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/tmx_editor_qt.py +0 -0
  354. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/tmx_generator.py +0 -0
  355. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/tracked_changes.py +0 -0
  356. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/trados_docx_handler.py +0 -0
  357. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/translation_memory.py +0 -0
  358. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/translation_results_panel.py +0 -0
  359. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/translation_services.py +0 -0
  360. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/unified_prompt_library.py +0 -0
  361. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/unified_prompt_manager_qt.py +0 -0
  362. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/voice_commands.py +0 -0
  363. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/voice_dictation.py +0 -0
  364. {supervertaler-1.9.164 → supervertaler-1.9.168}/modules/voice_dictation_lite.py +0 -0
  365. {supervertaler-1.9.164 → supervertaler-1.9.168}/setup.cfg +0 -0
  366. {supervertaler-1.9.164 → supervertaler-1.9.168}/setup.py +0 -0
  367. {supervertaler-1.9.164 → supervertaler-1.9.168}/supervertaler.egg-info/SOURCES.txt +0 -0
  368. {supervertaler-1.9.164 → supervertaler-1.9.168}/supervertaler.egg-info/dependency_links.txt +0 -0
  369. {supervertaler-1.9.164 → supervertaler-1.9.168}/supervertaler.egg-info/entry_points.txt +0 -0
  370. {supervertaler-1.9.164 → supervertaler-1.9.168}/supervertaler.egg-info/not-zip-safe +0 -0
  371. {supervertaler-1.9.164 → supervertaler-1.9.168}/supervertaler.egg-info/requires.txt +0 -0
  372. {supervertaler-1.9.164 → supervertaler-1.9.168}/supervertaler.egg-info/top_level.txt +0 -0
@@ -2,7 +2,56 @@
2
2
 
3
3
  All notable changes to Supervertaler are documented in this file.
4
4
 
5
- **Current Version:** v1.9.164 (January 26, 2026)
5
+ **Current Version:** v1.9.168 (January 27, 2026)
6
+
7
+ ## v1.9.168 - January 27, 2026
8
+
9
+ ### ✨ New Features
10
+
11
+ - **Markdown File Import Support**: Added `.md` file support to the text file importer. ([#127](https://github.com/michaelbeijer/Supervertaler/issues/127))
12
+ - **File Menu**: `Import → Text / Markdown File (TXT, MD)...`
13
+ - **File Filter**: Now shows "Text Files (*.txt *.md)", "Markdown (*.md)", "Plain Text (*.txt)"
14
+ - **Smart Dialog**: Detects Markdown files and shows Markdown-specific import instructions
15
+ - **Syntax Highlighting**: Markdown elements are highlighted with distinctive colors:
16
+ - **Headings** (`#`, `##`, etc.): Blue, bold
17
+ - **Bold/Italic markers** (`**`, `*`, `__`, `_`): Violet, bold
18
+ - **Code** (`` ` ``, `` ``` ``): Orange, bold
19
+ - **Links/Images** (`[]()`, `![]()`): Purple
20
+ - **Blockquotes** (`>`): Green, bold
21
+ - **Lists** (`-`, `*`, `+`, `1.`): Orange, bold
22
+ - **Round-trip Safe**: Markdown syntax is preserved as-is for clean export back to `.md`
23
+ - **Use Case**: Translate documentation, README files, AI prompts, and other Markdown content
24
+
25
+ ---
26
+
27
+ ## v1.9.167 - January 27, 2026
28
+
29
+ ### 🐛 Bug Fixes
30
+
31
+ - **Keyboard Shortcuts Panel Text Vanishing**: Fixed bug where UI text (Action, Shortcut, Status columns) would disappear after changing a shortcut. ([#125](https://github.com/michaelbeijer/Supervertaler/issues/125))
32
+ - **Root Cause**: Qt's sorting feature was interfering with table row modifications during `load_shortcuts()`, causing items to become disassociated from their rows.
33
+ - **Fix**: Disabled sorting during table modifications and re-enabled it after completion.
34
+
35
+ ---
36
+
37
+ ## v1.9.166 - January 27, 2026
38
+
39
+ ### 🐛 Bug Fixes
40
+
41
+ - **CRITICAL: TM Write Checkbox Now Works**: Fixed confirmed translations going to "project" TM instead of user-designated TM. The Write checkbox (not Read) now determines where segments are saved. ([#126](https://github.com/michaelbeijer/Supervertaler/issues/126))
42
+ - **Root Cause**: `save_segment_to_activated_tms()` was using `get_active_tm_ids()` which only returns TMs with the Read checkbox enabled, ignoring the Write setting entirely.
43
+ - **Fix**: Added new `get_writable_tm_ids()` method that checks for TMs with Write enabled (`read_only = 0`), and updated save logic to use it.
44
+ - **Now**: Enabling Write checkbox alone (without Read) will save confirmed segments to that TM.
45
+
46
+ ---
47
+
48
+ ## v1.9.165 - January 27, 2026
49
+
50
+ ### ✨ New Features
51
+
52
+ - **Settings Panel Font Scaling**: Added UI Font Scale setting (80%-200%) in View Settings for better readability on high-DPI/4K displays. Especially useful for macOS users with Retina displays. Click "Apply" for instant preview or save to persist. ([#128](https://github.com/michaelbeijer/Supervertaler/issues/128))
53
+
54
+ ---
6
55
 
7
56
  ## v1.9.164 - January 26, 2026
8
57
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: supervertaler
3
- Version: 1.9.164
3
+ Version: 1.9.168
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.164
74
+ # 🚀 Supervertaler v1.9.168
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,18 +79,21 @@ 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.164 (January 26, 2026)
82
+ **Current Version:** v1.9.168 (January 27, 2026)
83
83
 
84
- ### NEW in v1.9.162 - Cache Kill Switch & Performance Testing
84
+ ### NEW in v1.9.168 - 📝 Markdown File Import with Syntax Highlighting
85
85
 
86
- Added experimental performance toggle to test grid responsiveness:
87
- - **New Setting:** Settings → Experimental Performance → "Disable all caching systems"
88
- - **What it does:** Bypasses termbase cache, TM/MT cache, and prefetch workers
89
- - **Why:** Testing showed direct database lookups may be faster than cache overhead for some workflows
90
- - **Proactive Highlighting:** Glossary terms now highlighted in upcoming segments while you're still editing the current one
91
- - **Improved TM Matching:** Fixed fuzzy match issues with multi-TM projects
86
+ 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))
92
87
 
93
- ### Previously in v1.9.154 - 🎯 Match Panel Consolidation
88
+ ### Previously in v1.9.167 - 🐛 Keyboard Shortcuts Panel Fix
89
+
90
+ Fixed bug where UI text (Action, Shortcut, Status columns) would disappear after changing a shortcut. ([#125](https://github.com/michaelbeijer/Supervertaler/issues/125))
91
+
92
+ ### Previously in v1.9.166 - 🐛 TM Write Checkbox Fix
93
+
94
+ Fixed critical bug where confirmed translations went to "project" TM instead of user-designated TM with Write enabled. ([#126](https://github.com/michaelbeijer/Supervertaler/issues/126))
95
+
96
+ ### Previously in v1.9.162 - ⚡ Cache Kill Switch & Performance Testing
94
97
 
95
98
  Streamlined the right panel by replacing Compare Panel with Match Panel:
96
99
  - **Match Panel** combines Termview + TM Source/Target in one tab
@@ -1,4 +1,4 @@
1
- # 🚀 Supervertaler v1.9.164
1
+ # 🚀 Supervertaler v1.9.168
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,18 +6,21 @@
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.164 (January 26, 2026)
9
+ **Current Version:** v1.9.168 (January 27, 2026)
10
10
 
11
- ### NEW in v1.9.162 - Cache Kill Switch & Performance Testing
11
+ ### NEW in v1.9.168 - 📝 Markdown File Import with Syntax Highlighting
12
12
 
13
- Added experimental performance toggle to test grid responsiveness:
14
- - **New Setting:** Settings → Experimental Performance → "Disable all caching systems"
15
- - **What it does:** Bypasses termbase cache, TM/MT cache, and prefetch workers
16
- - **Why:** Testing showed direct database lookups may be faster than cache overhead for some workflows
17
- - **Proactive Highlighting:** Glossary terms now highlighted in upcoming segments while you're still editing the current one
18
- - **Improved TM Matching:** Fixed fuzzy match issues with multi-TM projects
13
+ 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))
19
14
 
20
- ### Previously in v1.9.154 - 🎯 Match Panel Consolidation
15
+ ### Previously in v1.9.167 - 🐛 Keyboard Shortcuts Panel Fix
16
+
17
+ Fixed bug where UI text (Action, Shortcut, Status columns) would disappear after changing a shortcut. ([#125](https://github.com/michaelbeijer/Supervertaler/issues/125))
18
+
19
+ ### Previously in v1.9.166 - 🐛 TM Write Checkbox Fix
20
+
21
+ Fixed critical bug where confirmed translations went to "project" TM instead of user-designated TM with Write enabled. ([#126](https://github.com/michaelbeijer/Supervertaler/issues/126))
22
+
23
+ ### Previously in v1.9.162 - ⚡ Cache Kill Switch & Performance Testing
21
24
 
22
25
  Streamlined the right panel by replacing Compare Panel with Match Panel:
23
26
  - **Match Panel** combines Termview + TM Source/Target in one tab
@@ -34,9 +34,9 @@ License: MIT
34
34
  """
35
35
 
36
36
  # Version Information.
37
- __version__ = "1.9.164"
37
+ __version__ = "1.9.168"
38
38
  __phase__ = "0.9"
39
- __release_date__ = "2026-01-26"
39
+ __release_date__ = "2026-01-27"
40
40
  __edition__ = "Qt"
41
41
 
42
42
  import sys
@@ -2286,12 +2286,13 @@ class ReadOnlyGridTextEditor(QTextEdit):
2286
2286
 
2287
2287
 
2288
2288
  class TagHighlighter(QSyntaxHighlighter):
2289
- """Syntax highlighter for HTML/XML tags, CAT tool tags, CafeTran pipe symbols, and spell checking in text editors"""
2289
+ """Syntax highlighter for HTML/XML tags, CAT tool tags, CafeTran pipe symbols, Markdown syntax, and spell checking in text editors"""
2290
2290
 
2291
2291
  # Class-level reference to spellcheck manager (shared across all instances)
2292
2292
  _spellcheck_manager = None
2293
2293
  _spellcheck_enabled = False
2294
2294
  _is_cafetran_project = False # Only highlight pipe symbols for CafeTran projects
2295
+ _is_markdown_project = False # Highlight Markdown syntax for Markdown imports
2295
2296
 
2296
2297
  def __init__(self, document, tag_color='#7f0001', invisible_char_color='#999999', enable_spellcheck=False):
2297
2298
  super().__init__(document)
@@ -2330,6 +2331,36 @@ class TagHighlighter(QSyntaxHighlighter):
2330
2331
  self.spellcheck_format.setUnderlineColor(QColor('#FF0000'))
2331
2332
  self.spellcheck_format.setUnderlineStyle(QTextCharFormat.UnderlineStyle.WaveUnderline)
2332
2333
 
2334
+ # Markdown syntax formats
2335
+ # Bold/Italic markers: ** __ * _
2336
+ self.md_bold_format = QTextCharFormat()
2337
+ self.md_bold_format.setForeground(QColor('#C71585')) # Medium violet red
2338
+ self.md_bold_format.setFontWeight(700) # Bold to make it stand out
2339
+
2340
+ # Heading markers: # ## ### etc.
2341
+ self.md_heading_format = QTextCharFormat()
2342
+ self.md_heading_format.setForeground(QColor('#0066CC')) # Blue
2343
+ self.md_heading_format.setFontWeight(700)
2344
+
2345
+ # Code markers: ` ```
2346
+ self.md_code_format = QTextCharFormat()
2347
+ self.md_code_format.setForeground(QColor('#D2691E')) # Chocolate/Orange
2348
+ self.md_code_format.setFontWeight(700)
2349
+
2350
+ # Link/Image syntax: []() ![]()
2351
+ self.md_link_format = QTextCharFormat()
2352
+ self.md_link_format.setForeground(QColor('#6A5ACD')) # Slate blue/Purple
2353
+
2354
+ # Blockquote markers: >
2355
+ self.md_quote_format = QTextCharFormat()
2356
+ self.md_quote_format.setForeground(QColor('#228B22')) # Forest green
2357
+ self.md_quote_format.setFontWeight(700)
2358
+
2359
+ # List markers: - * + 1. 2.
2360
+ self.md_list_format = QTextCharFormat()
2361
+ self.md_list_format.setForeground(QColor('#FF6600')) # Orange
2362
+ self.md_list_format.setFontWeight(700)
2363
+
2333
2364
  def set_tag_color(self, color: str):
2334
2365
  """Update tag highlight color"""
2335
2366
  self.tag_color = color
@@ -2393,6 +2424,10 @@ class TagHighlighter(QSyntaxHighlighter):
2393
2424
  if char == '|':
2394
2425
  self.setFormat(i, 1, self.pipe_format)
2395
2426
 
2427
+ # Markdown syntax highlighting - ONLY for Markdown projects
2428
+ if TagHighlighter._is_markdown_project:
2429
+ self._highlight_markdown_syntax(text)
2430
+
2396
2431
  # Spell checking - only for target editors when enabled
2397
2432
  if self._local_spellcheck_enabled and TagHighlighter._spellcheck_enabled and TagHighlighter._spellcheck_manager:
2398
2433
  self._highlight_misspelled_words(text)
@@ -2455,6 +2490,96 @@ class TagHighlighter(QSyntaxHighlighter):
2455
2490
  TagHighlighter._spellcheck_manager._crash_detected = True
2456
2491
  TagHighlighter._spellcheck_manager.enabled = False
2457
2492
 
2493
+ def _highlight_markdown_syntax(self, text):
2494
+ """Highlight Markdown syntax elements to make them visually distinct"""
2495
+ import re
2496
+
2497
+ # 1. Heading markers at start of line: # ## ### #### ##### ######
2498
+ # Only match at start of line (or after only whitespace)
2499
+ heading_pattern = re.compile(r'^(#{1,6})\s', re.MULTILINE)
2500
+ for match in heading_pattern.finditer(text):
2501
+ self.setFormat(match.start(1), len(match.group(1)), self.md_heading_format)
2502
+
2503
+ # 2. Bold markers: **text** or __text__
2504
+ # Highlight just the markers, not the content
2505
+ bold_pattern = re.compile(r'(\*\*|__)(?=\S)(.+?)(?<=\S)\1')
2506
+ for match in bold_pattern.finditer(text):
2507
+ # Opening marker
2508
+ self.setFormat(match.start(), 2, self.md_bold_format)
2509
+ # Closing marker
2510
+ self.setFormat(match.end() - 2, 2, self.md_bold_format)
2511
+
2512
+ # 3. Italic markers: *text* or _text_ (but not ** or __)
2513
+ # Must not be preceded/followed by same character
2514
+ italic_pattern = re.compile(r'(?<!\*)\*(?!\*)(?=\S)(.+?)(?<=\S)\*(?!\*)|(?<!_)_(?!_)(?=\S)(.+?)(?<=\S)_(?!_)')
2515
+ for match in italic_pattern.finditer(text):
2516
+ # Opening marker (1 char)
2517
+ self.setFormat(match.start(), 1, self.md_bold_format)
2518
+ # Closing marker (1 char)
2519
+ self.setFormat(match.end() - 1, 1, self.md_bold_format)
2520
+
2521
+ # 4. Inline code: `code`
2522
+ code_inline_pattern = re.compile(r'(`+)([^`]+)\1')
2523
+ for match in code_inline_pattern.finditer(text):
2524
+ # Highlight entire code span including backticks
2525
+ self.setFormat(match.start(), len(match.group(0)), self.md_code_format)
2526
+
2527
+ # 5. Code fence markers: ``` or ~~~
2528
+ code_fence_pattern = re.compile(r'^(`{3,}|~{3,}).*$', re.MULTILINE)
2529
+ for match in code_fence_pattern.finditer(text):
2530
+ self.setFormat(match.start(), len(match.group(0)), self.md_code_format)
2531
+
2532
+ # 6. Links: [text](url) - highlight brackets and parens, not the text
2533
+ link_pattern = re.compile(r'\[([^\]]+)\]\(([^\)]+)\)')
2534
+ for match in link_pattern.finditer(text):
2535
+ full_start = match.start()
2536
+ text_part = match.group(1)
2537
+ url_part = match.group(2)
2538
+ # [ bracket
2539
+ self.setFormat(full_start, 1, self.md_link_format)
2540
+ # ] bracket
2541
+ self.setFormat(full_start + 1 + len(text_part), 1, self.md_link_format)
2542
+ # ( and url and )
2543
+ url_start = full_start + 1 + len(text_part) + 1
2544
+ self.setFormat(url_start, len(url_part) + 2, self.md_link_format)
2545
+
2546
+ # 7. Images: ![alt](url) - same as links but with !
2547
+ image_pattern = re.compile(r'!\[([^\]]*)\]\(([^\)]+)\)')
2548
+ for match in image_pattern.finditer(text):
2549
+ full_start = match.start()
2550
+ alt_part = match.group(1)
2551
+ url_part = match.group(2)
2552
+ # ! and [
2553
+ self.setFormat(full_start, 2, self.md_link_format)
2554
+ # ]
2555
+ self.setFormat(full_start + 2 + len(alt_part), 1, self.md_link_format)
2556
+ # ( and url and )
2557
+ url_start = full_start + 2 + len(alt_part) + 1
2558
+ self.setFormat(url_start, len(url_part) + 2, self.md_link_format)
2559
+
2560
+ # 8. Blockquote markers: > at start of line
2561
+ quote_pattern = re.compile(r'^(>+)\s?', re.MULTILINE)
2562
+ for match in quote_pattern.finditer(text):
2563
+ self.setFormat(match.start(1), len(match.group(1)), self.md_quote_format)
2564
+
2565
+ # 9. Unordered list markers: - * + at start of line (with space after)
2566
+ ul_pattern = re.compile(r'^(\s*)([-*+])\s', re.MULTILINE)
2567
+ for match in ul_pattern.finditer(text):
2568
+ marker_start = match.start(2)
2569
+ self.setFormat(marker_start, 1, self.md_list_format)
2570
+
2571
+ # 10. Ordered list markers: 1. 2. 3. etc. at start of line
2572
+ ol_pattern = re.compile(r'^(\s*)(\d+\.)\s', re.MULTILINE)
2573
+ for match in ol_pattern.finditer(text):
2574
+ marker_start = match.start(2)
2575
+ marker_len = len(match.group(2))
2576
+ self.setFormat(marker_start, marker_len, self.md_list_format)
2577
+
2578
+ # 11. Horizontal rules: --- or *** or ___ (3+ chars)
2579
+ hr_pattern = re.compile(r'^([-*_]{3,})\s*$', re.MULTILINE)
2580
+ for match in hr_pattern.finditer(text):
2581
+ self.setFormat(match.start(1), len(match.group(1)), self.md_heading_format)
2582
+
2458
2583
 
2459
2584
  class EditableGridTextEditor(QTextEdit):
2460
2585
  """Editable QTextEdit for target cells - allows text selection and editing"""
@@ -7040,7 +7165,7 @@ class SupervertalerQt(QMainWindow):
7040
7165
  import_docx_action.setShortcut("Ctrl+O")
7041
7166
  import_menu.addAction(import_docx_action)
7042
7167
 
7043
- import_txt_action = QAction("Simple &Text File (TXT)...", self)
7168
+ import_txt_action = QAction("&Text / Markdown File (TXT, MD)...", self)
7044
7169
  import_txt_action.triggered.connect(self.import_simple_txt)
7045
7170
  import_menu.addAction(import_txt_action)
7046
7171
 
@@ -14858,6 +14983,13 @@ class SupervertalerQt(QMainWindow):
14858
14983
 
14859
14984
  layout.addWidget(settings_tabs)
14860
14985
 
14986
+ # Apply saved UI font scale on startup
14987
+ saved_scale = self._get_settings_ui_font_scale()
14988
+ if saved_scale != 100:
14989
+ # Defer application to ensure widgets are fully created
14990
+ from PyQt6.QtCore import QTimer
14991
+ QTimer.singleShot(100, lambda: self._apply_settings_ui_font_scale(saved_scale))
14992
+
14861
14993
  return tab
14862
14994
 
14863
14995
  def _wrap_in_scroll(self, widget):
@@ -17019,6 +17151,58 @@ class SupervertalerQt(QMainWindow):
17019
17151
  termview_group.setLayout(termview_layout)
17020
17152
  layout.addWidget(termview_group)
17021
17153
 
17154
+ # ===== UI Font Scale (for Settings panels) =====
17155
+ ui_scale_group = QGroupBox("🖥️ Settings Panel Font Size")
17156
+ ui_scale_layout = QVBoxLayout()
17157
+
17158
+ ui_scale_info = QLabel(
17159
+ "Adjust the font size for all Settings panel text. Useful for high-DPI/4K displays.\n"
17160
+ "Changes apply immediately. Default is 100%."
17161
+ )
17162
+ ui_scale_info.setWordWrap(True)
17163
+ ui_scale_layout.addWidget(ui_scale_info)
17164
+
17165
+ ui_scale_row = QHBoxLayout()
17166
+ ui_scale_row.addWidget(QLabel("UI Font Scale:"))
17167
+ ui_scale_spin = QSpinBox()
17168
+ ui_scale_spin.setMinimum(80)
17169
+ ui_scale_spin.setMaximum(200)
17170
+ ui_scale_spin.setValue(font_settings.get('settings_ui_font_scale', 100))
17171
+ ui_scale_spin.setSuffix("%")
17172
+ ui_scale_spin.setSingleStep(10)
17173
+ ui_scale_spin.setToolTip("Scale Settings panel text (80%-200%)")
17174
+ ui_scale_spin.setMinimumHeight(28)
17175
+ ui_scale_spin.setMinimumWidth(90)
17176
+ ui_scale_spin.setStyleSheet("""
17177
+ QSpinBox {
17178
+ padding-right: 20px;
17179
+ }
17180
+ QSpinBox::up-button {
17181
+ width: 20px;
17182
+ height: 14px;
17183
+ }
17184
+ QSpinBox::down-button {
17185
+ width: 20px;
17186
+ height: 14px;
17187
+ }
17188
+ """)
17189
+ ui_scale_row.addWidget(ui_scale_spin)
17190
+
17191
+ # Apply button for immediate feedback
17192
+ apply_scale_btn = QPushButton("Apply")
17193
+ apply_scale_btn.setToolTip("Apply font scale immediately")
17194
+ apply_scale_btn.clicked.connect(lambda: self._apply_settings_ui_font_scale(ui_scale_spin.value()))
17195
+ ui_scale_row.addWidget(apply_scale_btn)
17196
+
17197
+ ui_scale_row.addStretch()
17198
+ ui_scale_layout.addLayout(ui_scale_row)
17199
+
17200
+ # Store reference for saving
17201
+ self._ui_scale_spin = ui_scale_spin
17202
+
17203
+ ui_scale_group.setLayout(ui_scale_layout)
17204
+ layout.addWidget(ui_scale_group)
17205
+
17022
17206
  # Quick Reference section
17023
17207
  reference_group = QGroupBox("⌨️ Font Size Quick Reference")
17024
17208
  reference_layout = QVBoxLayout()
@@ -17043,12 +17227,20 @@ class SupervertalerQt(QMainWindow):
17043
17227
  # Save button
17044
17228
  save_btn = QPushButton("💾 Save View Settings")
17045
17229
  save_btn.setStyleSheet("font-weight: bold; padding: 8px;")
17046
- save_btn.clicked.connect(lambda: self._save_view_settings_from_ui(
17047
- grid_font_spin, match_font_spin, compare_font_spin, show_tags_check, tag_color_btn,
17048
- alt_colors_check, even_color_btn, odd_color_btn, invisible_char_color_btn, grid_font_family_combo,
17049
- termview_font_family_combo, termview_font_spin, termview_bold_check,
17050
- border_color_btn, border_thickness_spin, badge_text_color_btn, tabs_above_check
17051
- ))
17230
+
17231
+ def save_view_settings_with_scale():
17232
+ # Save the UI scale setting first
17233
+ if hasattr(self, '_ui_scale_spin'):
17234
+ self._apply_settings_ui_font_scale(self._ui_scale_spin.value())
17235
+ # Then save other view settings
17236
+ self._save_view_settings_from_ui(
17237
+ grid_font_spin, match_font_spin, compare_font_spin, show_tags_check, tag_color_btn,
17238
+ alt_colors_check, even_color_btn, odd_color_btn, invisible_char_color_btn, grid_font_family_combo,
17239
+ termview_font_family_combo, termview_font_spin, termview_bold_check,
17240
+ border_color_btn, border_thickness_spin, badge_text_color_btn, tabs_above_check
17241
+ )
17242
+
17243
+ save_btn.clicked.connect(save_view_settings_with_scale)
17052
17244
  layout.addWidget(save_btn)
17053
17245
 
17054
17246
  layout.addStretch()
@@ -19167,6 +19359,73 @@ class SupervertalerQt(QMainWindow):
19167
19359
  msg.setStandardButtons(QMessageBox.StandardButton.Ok)
19168
19360
  msg.exec()
19169
19361
 
19362
+ def _apply_settings_ui_font_scale(self, scale_percent: int):
19363
+ """Apply font scale to all Settings panels for better readability on high-DPI displays"""
19364
+ # Save the setting
19365
+ general_settings = self.load_general_settings()
19366
+ general_settings['settings_ui_font_scale'] = scale_percent
19367
+ self.save_general_settings(general_settings)
19368
+
19369
+ # Calculate base font size (default system font is typically 9-10pt)
19370
+ base_size = 10 # Base font size in points
19371
+ scaled_size = int(base_size * scale_percent / 100)
19372
+
19373
+ # Create stylesheet for Settings panels
19374
+ settings_stylesheet = f"""
19375
+ QGroupBox {{
19376
+ font-size: {scaled_size + 1}pt;
19377
+ font-weight: bold;
19378
+ }}
19379
+ QGroupBox QLabel {{
19380
+ font-size: {scaled_size}pt;
19381
+ }}
19382
+ QGroupBox QCheckBox {{
19383
+ font-size: {scaled_size}pt;
19384
+ }}
19385
+ QGroupBox QRadioButton {{
19386
+ font-size: {scaled_size}pt;
19387
+ }}
19388
+ QGroupBox QComboBox {{
19389
+ font-size: {scaled_size}pt;
19390
+ }}
19391
+ QGroupBox QSpinBox {{
19392
+ font-size: {scaled_size}pt;
19393
+ }}
19394
+ QGroupBox QLineEdit {{
19395
+ font-size: {scaled_size}pt;
19396
+ }}
19397
+ QGroupBox QPushButton {{
19398
+ font-size: {scaled_size}pt;
19399
+ }}
19400
+ QGroupBox QTextEdit {{
19401
+ font-size: {scaled_size}pt;
19402
+ }}
19403
+ QGroupBox QPlainTextEdit {{
19404
+ font-size: {scaled_size}pt;
19405
+ }}
19406
+ """
19407
+
19408
+ # Apply to settings_tabs if it exists
19409
+ if hasattr(self, 'settings_tabs') and self.settings_tabs is not None:
19410
+ self.settings_tabs.setStyleSheet(
19411
+ "QTabBar::tab { outline: 0; font-size: " + str(scaled_size) + "pt; } "
19412
+ "QTabBar::tab:focus { outline: none; } "
19413
+ "QTabBar::tab:selected { border-bottom: 1px solid #2196F3; background-color: rgba(33, 150, 243, 0.08); }"
19414
+ )
19415
+
19416
+ # Apply to each tab's content
19417
+ for i in range(self.settings_tabs.count()):
19418
+ widget = self.settings_tabs.widget(i)
19419
+ if widget:
19420
+ widget.setStyleSheet(settings_stylesheet)
19421
+
19422
+ self.log(f"✓ Settings UI font scale set to {scale_percent}% (base: {scaled_size}pt)")
19423
+
19424
+ def _get_settings_ui_font_scale(self) -> int:
19425
+ """Get the current Settings UI font scale percentage"""
19426
+ general_settings = self.load_general_settings()
19427
+ return general_settings.get('settings_ui_font_scale', 100)
19428
+
19170
19429
  def create_grid_view_widget(self):
19171
19430
  """Create the Grid View widget (existing grid functionality)"""
19172
19431
  widget = QWidget()
@@ -21933,7 +22192,10 @@ class SupervertalerQt(QMainWindow):
21933
22192
 
21934
22193
  def save_segment_to_activated_tms(self, source: str, target: str):
21935
22194
  """
21936
- Save segment to all activated TMs for current project.
22195
+ Save segment to all writable TMs for current project.
22196
+
22197
+ Note: Uses get_writable_tm_ids() which checks the Write checkbox (read_only=0),
22198
+ NOT get_active_tm_ids() which checks the Read checkbox (is_active=1).
21937
22199
 
21938
22200
  Args:
21939
22201
  source: Source text
@@ -21945,7 +22207,7 @@ class SupervertalerQt(QMainWindow):
21945
22207
  if not hasattr(self.current_project, 'source_lang') or not hasattr(self.current_project, 'target_lang'):
21946
22208
  return
21947
22209
 
21948
- # Get activated TM IDs for this project
22210
+ # Get WRITABLE TM IDs for this project (Write checkbox enabled)
21949
22211
  tm_ids = []
21950
22212
 
21951
22213
  if hasattr(self, 'tm_metadata_mgr') and self.tm_metadata_mgr:
@@ -21953,7 +22215,8 @@ class SupervertalerQt(QMainWindow):
21953
22215
  project_id = self.current_project.id if hasattr(self.current_project, 'id') else None
21954
22216
 
21955
22217
  if project_id:
21956
- tm_ids = self.tm_metadata_mgr.get_active_tm_ids(project_id)
22218
+ # Use get_writable_tm_ids() to find TMs with Write enabled
22219
+ tm_ids = self.tm_metadata_mgr.get_writable_tm_ids(project_id)
21957
22220
  else:
21958
22221
  self.log(f"⚠️ Cannot save to TM: project has no 'id' attribute!")
21959
22222
  else:
@@ -21961,23 +22224,16 @@ class SupervertalerQt(QMainWindow):
21961
22224
  else:
21962
22225
  self.log(f"⚠️ Cannot save to TM: TM metadata manager not available!")
21963
22226
 
21964
- # If no TMs activated, skip saving (user must activate TMs explicitly)
22227
+ # If no TMs have Write enabled, skip saving
21965
22228
  if not tm_ids:
21966
- self.log("⚠️ No TMs activated - segment not saved to TM. Please activate at least one TM in Resources.")
21967
- self.log(f" - To fix: Go to Resources > Translation Memories > TM List and check the Active checkbox")
22229
+ self.log("⚠️ No TMs with Write enabled - segment not saved to TM.")
22230
+ self.log(f" - To fix: Go to Resources > Translation Memories > TM List and enable the Write checkbox")
21968
22231
  return
21969
22232
 
21970
- # Save to each activated TM (skip read-only ones)
22233
+ # Save to each writable TM
21971
22234
  saved_count = 0
21972
- skipped_readonly = 0
21973
22235
  for tm_id in tm_ids:
21974
22236
  try:
21975
- # Check if TM is read-only
21976
- tm_info = self.tm_metadata_mgr.get_tm_by_tm_id(tm_id)
21977
- if tm_info and tm_info.get('read_only'):
21978
- skipped_readonly += 1
21979
- continue
21980
-
21981
22237
  self.db_manager.add_translation_unit(
21982
22238
  source=source,
21983
22239
  target=target,
@@ -21991,13 +22247,9 @@ class SupervertalerQt(QMainWindow):
21991
22247
 
21992
22248
  if saved_count > 0:
21993
22249
  msg = f"💾 Saved segment to {saved_count} TM(s)"
21994
- if skipped_readonly > 0:
21995
- msg += f" (skipped {skipped_readonly} read-only)"
21996
22250
  self._queue_tm_save_log(msg)
21997
22251
  # Invalidate cache so prefetched segments get fresh TM matches
21998
22252
  self.invalidate_translation_cache()
21999
- elif skipped_readonly > 0:
22000
- self.log(f"ℹ️ Segment not saved - {skipped_readonly} activated TM(s) are read-only")
22001
22253
 
22002
22254
  def invalidate_translation_cache(self, smart_invalidation=True):
22003
22255
  """
@@ -22811,6 +23063,10 @@ class SupervertalerQt(QMainWindow):
22811
23063
  segments=segments
22812
23064
  )
22813
23065
 
23066
+ # Reset project-type specific highlighting flags
23067
+ TagHighlighter._is_cafetran_project = False
23068
+ TagHighlighter._is_markdown_project = False
23069
+
22814
23070
  # Set as current project and load into grid
22815
23071
  self.current_project = project
22816
23072
  self.current_document_path = file_path # Store document path
@@ -22863,18 +23119,19 @@ class SupervertalerQt(QMainWindow):
22863
23119
 
22864
23120
  def import_simple_txt(self):
22865
23121
  """
22866
- Import a simple text file where each line is a source segment.
23122
+ Import a simple text file or Markdown file where each line is a source segment.
22867
23123
 
22868
23124
  This is the simplest possible import format:
22869
23125
  - Each line becomes one source segment
22870
23126
  - Empty lines are preserved as empty segments (for structure)
22871
23127
  - After translation, export produces a matching file with translations
23128
+ - Markdown files are imported as-is (syntax preserved for round-trip)
22872
23129
  """
22873
23130
  file_path, _ = QFileDialog.getOpenFileName(
22874
23131
  self,
22875
- "Select Simple Text File",
23132
+ "Select Text or Markdown File",
22876
23133
  "",
22877
- "Text Files (*.txt);;All Files (*.*)"
23134
+ "Text Files (*.txt *.md);;Markdown (*.md);;Plain Text (*.txt);;All Files (*.*)"
22878
23135
  )
22879
23136
 
22880
23137
  if not file_path:
@@ -22882,18 +23139,30 @@ class SupervertalerQt(QMainWindow):
22882
23139
 
22883
23140
  # Show import options dialog
22884
23141
  dialog = QDialog(self)
22885
- dialog.setWindowTitle("Import Simple Text File")
23142
+ dialog.setWindowTitle("Import Text / Markdown File")
22886
23143
  dialog.setMinimumWidth(500)
22887
23144
 
22888
23145
  layout = QVBoxLayout(dialog)
22889
23146
 
23147
+ # Detect if it's a Markdown file
23148
+ is_markdown = file_path.lower().endswith('.md')
23149
+
22890
23150
  # Info message
22891
- info_label = QLabel(
22892
- "📄 <b>Simple Text File Import</b><br><br>"
22893
- "Each line in the file will become one source segment.<br>"
22894
- "After translation, you can export a matching file with translations.<br><br>"
22895
- "Empty lines are preserved to maintain document structure."
22896
- )
23151
+ if is_markdown:
23152
+ info_label = QLabel(
23153
+ "📝 <b>Markdown File Import</b><br><br>"
23154
+ "Each line in the file will become one source segment.<br>"
23155
+ "Markdown syntax (<b>**bold**</b>, <i>*italic*</i>, # headings, etc.) is preserved.<br>"
23156
+ "After translation, export will produce a matching Markdown file.<br><br>"
23157
+ "<b>Tip:</b> Keep Markdown syntax intact when translating!"
23158
+ )
23159
+ else:
23160
+ info_label = QLabel(
23161
+ "📄 <b>Simple Text File Import</b><br><br>"
23162
+ "Each line in the file will become one source segment.<br>"
23163
+ "After translation, you can export a matching file with translations.<br><br>"
23164
+ "Empty lines are preserved to maintain document structure."
23165
+ )
22897
23166
  info_label.setWordWrap(True)
22898
23167
  info_label.setTextFormat(Qt.TextFormat.RichText)
22899
23168
  layout.addWidget(info_label)
@@ -23019,7 +23288,7 @@ class SupervertalerQt(QMainWindow):
23019
23288
 
23020
23289
  # Create new project
23021
23290
  project = Project(
23022
- name=f"TXT Import - {os.path.basename(file_path)}",
23291
+ name=f"{'MD' if is_markdown else 'TXT'} Import - {os.path.basename(file_path)}",
23023
23292
  source_lang=source_lang,
23024
23293
  target_lang=target_lang,
23025
23294
  segments=segments
@@ -23028,6 +23297,10 @@ class SupervertalerQt(QMainWindow):
23028
23297
  # Store original file path for export
23029
23298
  project.original_txt_path = file_path
23030
23299
 
23300
+ # Reset project-type specific highlighting flags
23301
+ TagHighlighter._is_cafetran_project = False
23302
+ TagHighlighter._is_markdown_project = is_markdown
23303
+
23031
23304
  # Set as current project and load into grid
23032
23305
  self.current_project = project
23033
23306
  self.current_document_path = file_path
@@ -23041,7 +23314,10 @@ class SupervertalerQt(QMainWindow):
23041
23314
 
23042
23315
  # Update status
23043
23316
  empty_count = sum(1 for seg in segments if not seg.source.strip())
23044
- self.log(f" Loaded {len(segments)} lines from text file")
23317
+ file_type = "Markdown file" if is_markdown else "text file"
23318
+ self.log(f"✓ Loaded {len(segments)} lines from {file_type}")
23319
+ if is_markdown:
23320
+ self.log(f" 📝 Markdown syntax highlighting enabled")
23045
23321
  if empty_count > 0:
23046
23322
  self.log(f" ({empty_count} empty lines preserved for structure)")
23047
23323
  self.log(f"📍 Project language pair: {source_lang.upper()} → {target_lang.upper()}")