supervertaler 1.9.198__tar.gz → 1.9.202__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 (389) hide show
  1. {supervertaler-1.9.198 → supervertaler-1.9.202}/CHANGELOG.md +19 -1
  2. {supervertaler-1.9.198 → supervertaler-1.9.202}/PKG-INFO +1 -1
  3. {supervertaler-1.9.198 → supervertaler-1.9.202}/Supervertaler.py +162 -91
  4. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/index.html +9 -9
  5. {supervertaler-1.9.198 → supervertaler-1.9.202}/pyproject.toml +1 -1
  6. {supervertaler-1.9.198 → supervertaler-1.9.202}/supervertaler.egg-info/PKG-INFO +1 -1
  7. {supervertaler-1.9.198 → supervertaler-1.9.202}/FAQ.md +0 -0
  8. {supervertaler-1.9.198 → supervertaler-1.9.202}/LICENSE +0 -0
  9. {supervertaler-1.9.198 → supervertaler-1.9.202}/MANIFEST.in +0 -0
  10. {supervertaler-1.9.198 → supervertaler-1.9.202}/README.md +0 -0
  11. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/ICON_CONVERSION_GUIDE.md +0 -0
  12. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/MB.ico +0 -0
  13. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/README.md +0 -0
  14. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/README_ICONS.md +0 -0
  15. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/arrow_left_dark.png +0 -0
  16. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/arrow_left_light.png +0 -0
  17. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/arrow_right_dark.png +0 -0
  18. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/arrow_right_light.png +0 -0
  19. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/generate_icons.py +0 -0
  20. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon.ico +0 -0
  21. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_128.png +0 -0
  22. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_16x16.png +0 -0
  23. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_24.png +0 -0
  24. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_256.png +0 -0
  25. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_256x256.png +0 -0
  26. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_32.png +0 -0
  27. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_32x32.png +0 -0
  28. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_48.png +0 -0
  29. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_48x48.png +0 -0
  30. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_64.png +0 -0
  31. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_preview.html +0 -0
  32. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_sv_modern.svg +0 -0
  33. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_sv_modern_paths.svg +0 -0
  34. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_sv_simple.svg +0 -0
  35. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_sv_website.svg +0 -0
  36. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/patent-drawing-1951.jpg +0 -0
  37. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/scrollbar_down.png +0 -0
  38. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/scrollbar_up.png +0 -0
  39. {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/supervertaler_icon_colours.png +0 -0
  40. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/.nojekyll +0 -0
  41. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/CNAME +0 -0
  42. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/SIMILAR_APPS.md +0 -0
  43. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/apple-touch-icon.png +0 -0
  44. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/BUGFIX_README.md +0 -0
  45. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/CHANGELIST.md +0 -0
  46. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/CHANGELOG_Old.md +0 -0
  47. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/FAQ.md +0 -0
  48. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/INSTALLATION_v1.7.8.md +0 -0
  49. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/PROJECT_ORGANIZATION.md +0 -0
  50. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/TERMBASE_REFACTORING_SUMMARY.md +0 -0
  51. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/USER_GUIDE_v1.7.8.md +0 -0
  52. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/VERIFICATION_CHECKLIST.md +0 -0
  53. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/BEFORE_AFTER_COMPARISON.md +0 -0
  54. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/BUGFIX_SESSION_SUMMARY.md +0 -0
  55. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/COLOR_SCHEME_REFERENCE.md +0 -0
  56. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/COMPACT_LAYOUT_CHANGELOG.md +0 -0
  57. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/COMPACT_LAYOUT_DOCUMENTATION_INDEX.md +0 -0
  58. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/COMPACT_LAYOUT_IMPLEMENTATION_SUMMARY.md +0 -0
  59. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/COMPACT_LAYOUT_UPDATE.md +0 -0
  60. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/COMPLETE_IMPLEMENTATION_SUMMARY.md +0 -0
  61. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/COMPLETE_PROJECT_SUMMARY.md +0 -0
  62. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/DATABASE_FINAL_SUMMARY.md +0 -0
  63. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/DATABASE_IMPLEMENTATION.md +0 -0
  64. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/DATABASE_PRODUCTION_READY.md +0 -0
  65. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/DATABASE_QUICK_REFERENCE.md +0 -0
  66. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/DUAL_VERSION_STRATEGY.md +0 -0
  67. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/FINAL_SESSION_SUMMARY.md +0 -0
  68. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/FOLDER_STRUCTURE_UPDATE.md +0 -0
  69. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/GITHUB_PAGES_SETUP.md +0 -0
  70. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/IMPLEMENTATION_CHECKLIST.md +0 -0
  71. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/IMPLEMENTATION_COMPLETE.md +0 -0
  72. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/IMPLEMENTATION_COMPLETE_COMPACT_LAYOUT.md +0 -0
  73. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/IMPLEMENTATION_READY.md +0 -0
  74. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/IMPLEMENTATION_STATUS_PHASE2_READY.md +0 -0
  75. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/KEYBOARD_SHORTCUTS_MATCHES.md +0 -0
  76. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/LAYOUT_BEFORE_AFTER.md +0 -0
  77. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/MASTER_INDEX.md +0 -0
  78. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/MATCH_DISPLAY_IMPROVEMENTS.md +0 -0
  79. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/MATCH_DISPLAY_LONG_SEGMENTS_UPDATE.md +0 -0
  80. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/MATCH_DISPLAY_QUICK_REFERENCE.md +0 -0
  81. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/MATCH_INSERTION_FEATURES.md +0 -0
  82. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/MATCH_SHORTCUTS_QUICK_REF.md +0 -0
  83. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/MODULAR_ARCHITECTURE_GUIDE.md +0 -0
  84. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/PHASE2_IMPLEMENTATION_CHECKLIST.md +0 -0
  85. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/PHASE2_IMPLEMENTATION_DETAILED_CHECKLIST.md +0 -0
  86. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/PHASE2_IMPLEMENTATION_IN_PROGRESS.md +0 -0
  87. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/PHASE2_NEXT_STEPS.md +0 -0
  88. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/PHASE2_READY_TO_IMPLEMENT.md +0 -0
  89. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/PHASE2_START_HERE.md +0 -0
  90. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/QT_MIGRATION_PLAN.md +0 -0
  91. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/QT_SESSION_SUMMARY.md +0 -0
  92. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/QUICK_SESSION_SUMMARY.md +0 -0
  93. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/RELEASE_Qt_v1.0.0_Phase5.md +0 -0
  94. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/RELEASE_v1.9.38.md +0 -0
  95. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/RELEASE_v3.7.1.md +0 -0
  96. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/RELEASE_v3.7.6.md +0 -0
  97. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/RELEASE_v3.7.7.md +0 -0
  98. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/RESTRUCTURE_COMPLETE.md +0 -0
  99. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/SESSION_DOCUMENTATION_INDEX.md +0 -0
  100. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/SESSION_IMPLEMENTATION_SUMMARY.md +0 -0
  101. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/SESSION_LONG_SEGMENTS_COMPLETE.md +0 -0
  102. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/SESSION_MATCH_FEATURES_COMPLETE.md +0 -0
  103. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/SESSION_STATUS.md +0 -0
  104. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/SESSION_SUMMARY_Phase5.md +0 -0
  105. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/START_HERE.md +0 -0
  106. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/START_IMPLEMENTATION_HERE.md +0 -0
  107. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/STYLE_GUIDES_DELIVERABLES.md +0 -0
  108. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/STYLE_GUIDES_DOCUMENTATION_INDEX.md +0 -0
  109. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/STYLE_GUIDES_FEATURE_SUMMARY.md +0 -0
  110. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/STYLE_GUIDES_IMPLEMENTATION.md +0 -0
  111. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/STYLE_GUIDES_PROJECT_COMPLETION.md +0 -0
  112. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/STYLE_GUIDES_QUICK_REFERENCE.md +0 -0
  113. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/STYLE_GUIDES_VISUAL_ARCHITECTURE.md +0 -0
  114. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TERMBASE_FIXES.md +0 -0
  115. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TERMBASE_IMPLEMENTATION.md +0 -0
  116. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TERMBASE_QUICK_START.md +0 -0
  117. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TMX_CONCORDANCE_STYLE_HIGHLIGHTING.md +0 -0
  118. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TMX_DUAL_HIGHLIGHTING.md +0 -0
  119. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TMX_EDITOR_HIGHLIGHTING_UPDATE.md +0 -0
  120. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TMX_EDITOR_IMPLEMENTATION.md +0 -0
  121. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TMX_EDITOR_WORD_HIGHLIGHTING.md +0 -0
  122. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TMX_TABLE_LAYOUT_INTEGRATED_EDIT.md +0 -0
  123. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TMX_TREEVIEW_GRID_RESIZABLE.md +0 -0
  124. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TMX_WORD_HIGHLIGHTING_IMPLEMENTATION_COMPLETE.md +0 -0
  125. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TMX_WORD_HIGHLIGHTING_SUMMARY.md +0 -0
  126. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TM_MATCH_PANE_CHECKLIST.md +0 -0
  127. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TM_MATCH_PANE_IMPLEMENTATION.md +0 -0
  128. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TM_MATCH_PANE_VISUAL_GUIDE.md +0 -0
  129. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/VISUAL_COLOR_REFERENCE.md +0 -0
  130. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/VISUAL_IMPLEMENTATION_SUMMARY.md +0 -0
  131. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/sessions/COLOR_FIX_EXPLANATION.md +0 -0
  132. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/sessions/DATABASE_CONSOLIDATION_REPORT.md +0 -0
  133. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/sessions/DUAL_EDITOR_WORKFLOW.md +0 -0
  134. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/sessions/DUAL_SELECTION_SYSTEM.md +0 -0
  135. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/sessions/IMPROVEMENTS_SUMMARY.md +0 -0
  136. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/sessions/ISSUES_FIXES_PROGRESS.md +0 -0
  137. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/sessions/MATCH_DISPLAY_COMPACT_FIXES.md +0 -0
  138. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/sessions/README_SESSION_TERMBASE.md +0 -0
  139. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/sessions/SAFE_DELETION_REMINDER.txt +0 -0
  140. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/sessions/SESSION_SUMMARY.md +0 -0
  141. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/sessions/TERMBASE_FIXES_APPLIED.md +0 -0
  142. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/sessions/TESTING_CHECKLIST.md +0 -0
  143. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/sessions/TMX_EDITOR_ANNOUNCEMENT.md +0 -0
  144. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/sessions/TRANSLATION_RESULTS_IMPROVEMENTS.md +0 -0
  145. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/assets/Figure1.png +0 -0
  146. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/assets/patent-drawing-1951.jpg +0 -0
  147. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/changelog.html +0 -0
  148. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/dev-notes/QA.md +0 -0
  149. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/dev-notes/STYLE_GUIDES_UI_TEMPLATE.py +0 -0
  150. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/dev-notes/_Notes_2025-11-21.md +0 -0
  151. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/dev-notes/_things_to_remind_AIs_of_when_translating.md +0 -0
  152. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/dev-notes/issue_28.md +0 -0
  153. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/dev-notes/openai_debug.txt +0 -0
  154. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/dev-notes/pre-translation-dialog-enhancement.md +0 -0
  155. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/emoji_mockup.html +0 -0
  156. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/favicon.ico +0 -0
  157. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/guides/AI_PROMPT_ASSISTANT_USER_GUIDE.md +0 -0
  158. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/guides/ENCODING_REPAIR_TOOL.md +0 -0
  159. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/guides/FAQ.md +0 -0
  160. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/guides/GLOSSARY_OF_SUPERVERTALER_TERMINOLOGY.md +0 -0
  161. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/guides/JSON_EDITORS_AND_HUMAN_READABLE_FORMAT.md +0 -0
  162. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/guides/KEYBOARD_SHORTCUTS.md +0 -0
  163. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/guides/PDF_RESCUE.md +0 -0
  164. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/guides/PROMPT_ASSISTANT_USER_GUIDE.md +0 -0
  165. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/guides/QT_SETTINGS_DIALOG_GUIDE.md +0 -0
  166. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/guides/TERM_EXTRACTION_GUIDE.md +0 -0
  167. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/guides/USER_DATA_FOLDER_SETUP.md +0 -0
  168. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/idea_beijer.bot_integration_idea/BEIJERBOT_FEATURE_ANALYSIS.md +0 -0
  169. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/idea_beijer.bot_integration_idea/CLI_BRIDGE_SPECIFICATION.md +0 -0
  170. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/idea_beijer.bot_integration_idea/IMPLEMENTATION_ROADMAP.md +0 -0
  171. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/idea_beijer.bot_integration_idea/QUICKMENU_INTEGRATION_PLAN.md +0 -0
  172. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/idea_beijer.bot_integration_idea/README.md +0 -0
  173. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/idea_tag-cleaner/tag_cleaner.md +0 -0
  174. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/idea_use_vscode_as_cat_tool/ai-agent-translation-workflow.md +0 -0
  175. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/logo.png +0 -0
  176. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/2025-10-13_00-46-16.jpg +0 -0
  177. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/QuickTrans.png +0 -0
  178. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/Superlookup_Web_resources.jpg +0 -0
  179. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_AI-Assistant.jpg +0 -0
  180. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_CLASSIC_v2.4.1_(tkinter).jpg +0 -0
  181. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_Prompt_Manager_2026-01-14.png +0 -0
  182. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_Qt_LLM_LeaderboardResults_2025-11-12.jpg +0 -0
  183. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_Qt_LLM_Leaderboard_2025-11-12.jpg +0 -0
  184. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_Superbrowser.jpg +0 -0
  185. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_dark_mode_2025-12-16.jpg +0 -0
  186. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_dark_mode_2025-12-17.jpg +0 -0
  187. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_grid.jpg +0 -0
  188. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_tkinter (v3.7.7).jpg +0 -0
  189. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_v1.9.102_compare_panel_2026-01-14.png +0 -0
  190. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_v1.9.102_grid_2026-01-14.png +0 -0
  191. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/Supervertalerv1.9.195_2026-02-02.png +0 -0
  192. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/new/Supervertaler-grid.jpg +0 -0
  193. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/new/Supervertaler_AI-Assistant.jpg +0 -0
  194. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/new/Supervertaler_Prompt-Library.jpg +0 -0
  195. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/new/Supervertaler_Qt_LLM_LeaderboardResults_2025-11-12.jpg +0 -0
  196. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/new/Supervertaler_Qt_LLM_Leaderboard_2025-11-12.jpg +0 -0
  197. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/new/Supervertaler_Superbrowser.jpg +0 -0
  198. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/old/2025-10-13_00-50-24.jpg +0 -0
  199. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/old/Supervertaler_Qt_2025-11-12.jpg +0 -0
  200. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/script.js +0 -0
  201. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/site.webmanifest +0 -0
  202. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/specifications/AI_ASSISTANT_PHASE2_IMPLEMENTATION.md +0 -0
  203. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/specifications/AI_PROMPT_ASSISTANT.md +0 -0
  204. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/specifications/AI_PROMPT_ASSISTANT_IMPLEMENTATION.md +0 -0
  205. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/specifications/EXPORT_MENU_UPDATE.md +0 -0
  206. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/specifications/IMPLEMENTATION_SUMMARY.md +0 -0
  207. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/specifications/QT_PHASE2_COMPLETE.md +0 -0
  208. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/specifications/QT_PHASE3_COMPLETE.md +0 -0
  209. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/specifications/SUPERVERTALER_DATA_FORMAT.md +0 -0
  210. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/specifications/TASK_TYPE_SYSTEM.md +0 -0
  211. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/specifications/TERMINOLOGY_UPDATE_SUMMARY.md +0 -0
  212. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/specifications/opus-api-integration.md +0 -0
  213. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/styles.css +0 -0
  214. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/.gitbook/assets/supervertaler-logo.png +0 -0
  215. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/.gitbook/assets/sv-icon.svg +0 -0
  216. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/GITBOOK_LANDING_DRAFT.md +0 -0
  217. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/README.md +0 -0
  218. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/SUMMARY.md +0 -0
  219. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/ai-translation/batch-translation.md +0 -0
  220. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/ai-translation/ollama.md +0 -0
  221. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/ai-translation/overview.md +0 -0
  222. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/ai-translation/prompt-library.md +0 -0
  223. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/ai-translation/prompts.md +0 -0
  224. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/ai-translation/providers.md +0 -0
  225. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/ai-translation/single-segment.md +0 -0
  226. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/cat-tools/cafetran.md +0 -0
  227. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/cat-tools/memoq.md +0 -0
  228. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/cat-tools/overview.md +0 -0
  229. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/cat-tools/phrase.md +0 -0
  230. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/cat-tools/trados.md +0 -0
  231. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/editor/editing-confirming.md +0 -0
  232. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/editor/filtering.md +0 -0
  233. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/editor/find-replace.md +0 -0
  234. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/editor/keyboard-shortcuts.md +0 -0
  235. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/editor/navigation.md +0 -0
  236. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/editor/pagination.md +0 -0
  237. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/editor/translation-grid.md +0 -0
  238. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/get-started/api-keys.md +0 -0
  239. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/get-started/first-project.md +0 -0
  240. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/get-started/installation.md +0 -0
  241. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/get-started/quick-start.md +0 -0
  242. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/glossaries/basics.md +0 -0
  243. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/glossaries/creating.md +0 -0
  244. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/glossaries/extraction.md +0 -0
  245. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/glossaries/highlighting.md +0 -0
  246. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/glossaries/importing.md +0 -0
  247. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/import-export/bilingual-tables.md +0 -0
  248. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/import-export/docx-import.md +0 -0
  249. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/import-export/exporting.md +0 -0
  250. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/import-export/formats.md +0 -0
  251. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/import-export/multi-file.md +0 -0
  252. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/import-export/txt-import.md +0 -0
  253. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/qa/non-translatables.md +0 -0
  254. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/qa/spellcheck.md +0 -0
  255. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/qa/tag-validation.md +0 -0
  256. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/reference/changelog.md +0 -0
  257. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/reference/contributing.md +0 -0
  258. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/reference/faq.md +0 -0
  259. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/reference/file-formats.md +0 -0
  260. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/settings/fonts.md +0 -0
  261. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/settings/general.md +0 -0
  262. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/settings/shortcuts.md +0 -0
  263. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/settings/theme.md +0 -0
  264. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/settings/view.md +0 -0
  265. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/superlookup/glossary-search.md +0 -0
  266. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/superlookup/mt.md +0 -0
  267. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/superlookup/overview.md +0 -0
  268. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/superlookup/tm-search.md +0 -0
  269. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/superlookup/web-resources.md +0 -0
  270. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/tools/autofingers.md +0 -0
  271. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/tools/image-extractor.md +0 -0
  272. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/tools/pdf-rescue.md +0 -0
  273. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/tools/tmx-editor.md +0 -0
  274. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/tools/voice-commands.md +0 -0
  275. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/translation-memory/basics.md +0 -0
  276. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/translation-memory/fuzzy-matching.md +0 -0
  277. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/translation-memory/importing-tmx.md +0 -0
  278. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/translation-memory/managing-tms.md +0 -0
  279. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/translation-memory/supermemory.md +0 -0
  280. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/troubleshooting/api-issues.md +0 -0
  281. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/troubleshooting/common-issues.md +0 -0
  282. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/troubleshooting/import-export-errors.md +0 -0
  283. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/troubleshooting/linux.md +0 -0
  284. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/troubleshooting/performance.md +0 -0
  285. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/sv-icon.svg +0 -0
  286. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/technical/AI_ASSISTANT_GUIDE.md +0 -0
  287. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/technical/AI_ASSISTANT_IMPLEMENTATION.md +0 -0
  288. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/technical/AI_ASSISTANT_INTEGRATION.md +0 -0
  289. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/technical/AI_ASSISTANT_QUICK_REFERENCE.md +0 -0
  290. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/technical/DATABASE_LOCATIONS.md +0 -0
  291. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/technical/FILTER_HIGHLIGHTING_FIX.md +0 -0
  292. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/technical/MODULE_HEADER_PATTERN.md +0 -0
  293. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/technical/README.md +0 -0
  294. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/technical/SUPERBROWSER_GUIDE.md +0 -0
  295. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/technical/SUPERVOICE_TROUBLESHOOTING.md +0 -0
  296. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/technical/UNIFIED_PROMPT_LIBRARY_GUIDE.md +0 -0
  297. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/technical/VOICE_DICTATION_GUIDE.md +0 -0
  298. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/tests/test_encoding_corruption.txt +0 -0
  299. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/web-app-manifest-192x192.png +0 -0
  300. {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/web-app-manifest-512x512.png +0 -0
  301. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/__init__.py +0 -0
  302. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/ai_actions.py +0 -0
  303. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/ai_attachment_manager.py +0 -0
  304. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/ai_file_viewer_dialog.py +0 -0
  305. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/autofingers_engine.py +0 -0
  306. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/cafetran_docx_handler.py +0 -0
  307. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/config_manager.py +0 -0
  308. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/database_manager.py +0 -0
  309. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/database_migrations.py +0 -0
  310. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/dejavurtf_handler.py +0 -0
  311. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/document_analyzer.py +0 -0
  312. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/docx_handler.py +0 -0
  313. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/encoding_repair.py +0 -0
  314. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/encoding_repair_Qt.py +0 -0
  315. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/encoding_repair_ui.py +0 -0
  316. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/extract_tm.py +0 -0
  317. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/feature_manager.py +0 -0
  318. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/figure_context_manager.py +0 -0
  319. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/file_dialog_helper.py +0 -0
  320. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/find_replace.py +0 -0
  321. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/find_replace_qt.py +0 -0
  322. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/glossary_manager.py +0 -0
  323. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/image_extractor.py +0 -0
  324. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/keyboard_shortcuts_widget.py +0 -0
  325. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/llm_clients.py +0 -0
  326. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/llm_leaderboard.py +0 -0
  327. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/llm_superbench_ui.py +0 -0
  328. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/local_llm_setup.py +0 -0
  329. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/model_update_dialog.py +0 -0
  330. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/model_version_checker.py +0 -0
  331. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/mqxliff_handler.py +0 -0
  332. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/non_translatables_manager.py +0 -0
  333. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/pdf_rescue_Qt.py +0 -0
  334. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/pdf_rescue_tkinter.py +0 -0
  335. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/phrase_docx_handler.py +0 -0
  336. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/project_home_panel.py +0 -0
  337. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/project_tm.py +0 -0
  338. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/prompt_assistant.py +0 -0
  339. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/prompt_library.py +0 -0
  340. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/prompt_library_migration.py +0 -0
  341. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/quick_access_sidebar.py +0 -0
  342. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/quicktrans.py +0 -0
  343. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/ribbon_widget.py +0 -0
  344. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/sdlppx_handler.py +0 -0
  345. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/setup_wizard.py +0 -0
  346. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/shortcut_manager.py +0 -0
  347. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/simple_segmenter.py +0 -0
  348. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/spellcheck_manager.py +0 -0
  349. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/statuses.py +0 -0
  350. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/style_guide_manager.py +0 -0
  351. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/superbench_ui.py +0 -0
  352. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/superbrowser.py +0 -0
  353. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/supercleaner.py +0 -0
  354. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/supercleaner_ui.py +0 -0
  355. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/superdocs.py +0 -0
  356. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/superdocs_viewer_qt.py +0 -0
  357. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/superlookup.py +0 -0
  358. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/tag_cleaner.py +0 -0
  359. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/tag_manager.py +0 -0
  360. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/term_extractor.py +0 -0
  361. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/termbase_entry_editor.py +0 -0
  362. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/termbase_import_export.py +0 -0
  363. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/termbase_manager.py +0 -0
  364. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/termview_widget.py +0 -0
  365. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/theme_manager.py +0 -0
  366. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/tm_editor_dialog.py +0 -0
  367. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/tm_manager_qt.py +0 -0
  368. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/tm_metadata_manager.py +0 -0
  369. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/tmx_editor.py +0 -0
  370. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/tmx_editor_qt.py +0 -0
  371. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/tmx_generator.py +0 -0
  372. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/tracked_changes.py +0 -0
  373. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/trados_docx_handler.py +0 -0
  374. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/translation_memory.py +0 -0
  375. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/translation_results_panel.py +0 -0
  376. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/translation_services.py +0 -0
  377. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/unified_prompt_library.py +0 -0
  378. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/unified_prompt_manager_qt.py +0 -0
  379. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/voice_commands.py +0 -0
  380. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/voice_dictation.py +0 -0
  381. {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/voice_dictation_lite.py +0 -0
  382. {supervertaler-1.9.198 → supervertaler-1.9.202}/setup.cfg +0 -0
  383. {supervertaler-1.9.198 → supervertaler-1.9.202}/setup.py +0 -0
  384. {supervertaler-1.9.198 → supervertaler-1.9.202}/supervertaler.egg-info/SOURCES.txt +0 -0
  385. {supervertaler-1.9.198 → supervertaler-1.9.202}/supervertaler.egg-info/dependency_links.txt +0 -0
  386. {supervertaler-1.9.198 → supervertaler-1.9.202}/supervertaler.egg-info/entry_points.txt +0 -0
  387. {supervertaler-1.9.198 → supervertaler-1.9.202}/supervertaler.egg-info/not-zip-safe +0 -0
  388. {supervertaler-1.9.198 → supervertaler-1.9.202}/supervertaler.egg-info/requires.txt +0 -0
  389. {supervertaler-1.9.198 → supervertaler-1.9.202}/supervertaler.egg-info/top_level.txt +0 -0
@@ -2,10 +2,28 @@
2
2
 
3
3
  All notable changes to Supervertaler are documented in this file.
4
4
 
5
- **Current Version:** v1.9.198 (February 2, 2026)
5
+ **Current Version:** v1.9.202 (February 2, 2026)
6
6
 
7
7
 
8
8
 
9
+ ## v1.9.202 - February 2, 2026
10
+
11
+ ### ✨ New Features
12
+
13
+ - **Clean TM Storage**: When "Hide outer wrapping tags" is enabled, structural tags like `<li-o>`, `<p>`, etc. are now stripped when saving to TM and when searching TM. This ensures better matching leverage - a segment `<li-o>Hello world</li-o>` will match a TM entry `Hello world` at 100%.
14
+
15
+ ### 🐛 Bug Fixes
16
+
17
+ - **Find-and-Replace Tag Display**: Fixed an issue where outer wrapping tags would reappear in the grid after find-and-replace operations. All cell update operations now respect the "Hide outer wrapping tags" setting.
18
+
19
+ - **Preview Panel List Numbering**: Fixed claims/numbered lists starting at wrong number (e.g., claim #1 showing as "2." instead of "1."). The list counter now properly resets when starting a new list.
20
+
21
+ - **Preview Panel Line Breaks**: Ordered list items (like patent claims) now have proper paragraph-like spacing instead of running together.
22
+
23
+ - **Preview Section Headings**: Bold-wrapped section headings (like "CLAIMS", "TECHNICAL FIELD", "PRIOR ART") are now properly detected as headings with double line breaks before/after and bold formatting.
24
+
25
+ ---
26
+
9
27
  ## v1.9.198 - February 2, 2026
10
28
 
11
29
  ### ✨ New Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: supervertaler
3
- Version: 1.9.198
3
+ Version: 1.9.202
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
@@ -474,33 +474,6 @@ def strip_outer_wrapping_tags(text: str) -> tuple:
474
474
  return (inner_content, tag_name)
475
475
 
476
476
 
477
- def get_list_prefix_for_tag(tag_name: str, list_position: int = 1) -> str:
478
- """
479
- Get visual prefix for list items in WYSIWYG mode.
480
-
481
- Args:
482
- tag_name: The outer wrapping tag name (e.g., 'li-o', 'li-b', 'li')
483
- list_position: Position within the list (1-indexed) for ordered lists
484
-
485
- Returns:
486
- Visual prefix string: "1. ", "2. ", "• ", etc., or "" if not a list tag
487
- """
488
- if not tag_name:
489
- return ""
490
-
491
- tag_lower = tag_name.lower()
492
-
493
- # Ordered list items
494
- if tag_lower == 'li-o':
495
- return f"{list_position}. "
496
-
497
- # Unordered/bullet list items
498
- if tag_lower in ('li-b', 'li'):
499
- return "• "
500
-
501
- return ""
502
-
503
-
504
477
  def has_formatting_tags(text: str) -> bool:
505
478
  """
506
479
  Check if text contains any formatting tags.
@@ -17808,10 +17781,10 @@ class SupervertalerQt(QMainWindow):
17808
17781
  hide_wrapping_tags_check = CheckmarkCheckBox("Hide outer wrapping tags in grid (e.g. <li-o>...</li-o>)")
17809
17782
  hide_wrapping_tags_check.setChecked(font_settings.get('hide_outer_wrapping_tags', False))
17810
17783
  hide_wrapping_tags_check.setToolTip(
17811
- "When enabled, structural tags that wrap the entire segment (like <li-o>, <p>, <td>) are hidden in the grid.\n"
17812
- "The segment type is already shown in the Type column, so this reduces visual clutter.\n"
17813
- "Inner formatting tags like <b>bold</b> are still shown.\n"
17814
- "This affects the Source column display only - the Target column keeps tags for editing."
17784
+ "When enabled, structural tags that wrap the entire segment (like <li-o>, <p>, <td>) are hidden.\n"
17785
+ "Tags are automatically restored when saving. List items show visual prefixes (1. 2. or •).\n"
17786
+ "The segment type is shown in the Type column, so outer tags are redundant.\n"
17787
+ "Inner formatting tags like <b>bold</b> are still shown."
17815
17788
  )
17816
17789
  hide_wrapping_tags_layout.addWidget(hide_wrapping_tags_check)
17817
17790
  hide_wrapping_tags_layout.addStretch()
@@ -20432,8 +20405,9 @@ class SupervertalerQt(QMainWindow):
20432
20405
 
20433
20406
  # Add hide outer wrapping tags setting if provided
20434
20407
  if hide_wrapping_tags_check is not None:
20435
- general_settings['hide_outer_wrapping_tags'] = hide_wrapping_tags_check.isChecked()
20436
- self.hide_outer_wrapping_tags = hide_wrapping_tags_check.isChecked()
20408
+ hide_tags_value = hide_wrapping_tags_check.isChecked()
20409
+ general_settings['hide_outer_wrapping_tags'] = hide_tags_value
20410
+ self.hide_outer_wrapping_tags = hide_tags_value
20437
20411
 
20438
20412
  # Add focus border settings if provided
20439
20413
  if border_color_btn is not None:
@@ -23797,6 +23771,9 @@ class SupervertalerQt(QMainWindow):
23797
23771
  - 'latest': Overwrites existing entries with same source (keeps only newest translation)
23798
23772
  - 'all': Keeps all translations with different targets (default SQLite behavior)
23799
23773
 
23774
+ If hide_outer_wrapping_tags is enabled, strips structural tags (like <li-o>, <p>)
23775
+ before saving to TM for better matching leverage.
23776
+
23800
23777
  Args:
23801
23778
  source: Source text
23802
23779
  target: Target text
@@ -23804,6 +23781,11 @@ class SupervertalerQt(QMainWindow):
23804
23781
  if not self.current_project:
23805
23782
  return
23806
23783
 
23784
+ # Strip outer structural tags if setting is enabled (for cleaner TM matching)
23785
+ if self.hide_outer_wrapping_tags:
23786
+ source, _ = strip_outer_wrapping_tags(source)
23787
+ target, _ = strip_outer_wrapping_tags(target)
23788
+
23807
23789
  if not hasattr(self.current_project, 'source_lang') or not hasattr(self.current_project, 'target_lang'):
23808
23790
  return
23809
23791
 
@@ -29946,16 +29928,9 @@ class SupervertalerQt(QMainWindow):
29946
29928
  # Strip outer wrapping tags if setting is enabled (display only, data unchanged)
29947
29929
  source_for_display = segment.source
29948
29930
  stripped_source_tag = None
29949
- list_prefix = ""
29950
29931
  if self.hide_outer_wrapping_tags:
29951
29932
  stripped, stripped_source_tag = strip_outer_wrapping_tags(segment.source)
29952
29933
  source_for_display = stripped
29953
- # Add WYSIWYG list prefix (e.g., "1. " or "• ") for list items
29954
- if stripped_source_tag:
29955
- list_pos = list_numbers.get(row, 1)
29956
- list_prefix = get_list_prefix_for_tag(stripped_source_tag, list_pos)
29957
- if list_prefix:
29958
- source_for_display = list_prefix + source_for_display
29959
29934
  # Apply invisible character replacements for display only
29960
29935
  source_display_text = self.apply_invisible_replacements(source_for_display)
29961
29936
  source_editor = ReadOnlyGridTextEditor(source_display_text, self.table, row)
@@ -29979,26 +29954,19 @@ class SupervertalerQt(QMainWindow):
29979
29954
  # Strip outer wrapping tags if enabled (will be auto-restored when saving)
29980
29955
  target_for_display = segment.target
29981
29956
  stripped_target_tag = None
29982
- target_list_prefix = ""
29983
29957
  if self.hide_outer_wrapping_tags:
29984
29958
  stripped, stripped_target_tag = strip_outer_wrapping_tags(segment.target)
29985
29959
  target_for_display = stripped
29986
29960
  # Store stripped tag on segment for restore during save
29987
29961
  # Use source tag as reference (target should match source structure)
29988
29962
  segment._stripped_outer_tag = stripped_source_tag or stripped_target_tag
29989
- # Add WYSIWYG list prefix for display (same as source)
29990
- target_list_prefix = list_prefix # Reuse the prefix calculated for source
29991
29963
 
29992
29964
  # Apply invisible character replacements for display (will be reversed when saving)
29993
29965
  target_display_text = self.apply_invisible_replacements(target_for_display)
29994
- # Add list prefix for display (stored separately so we can strip it on save)
29995
- if target_list_prefix:
29996
- target_display_text = target_list_prefix + target_display_text
29997
29966
  target_editor = EditableGridTextEditor(target_display_text, self.table, row, self.table)
29998
29967
  target_editor.setFont(font)
29999
- # Store stripped tag and list prefix on editor for auto-restore
29968
+ # Store stripped tag on editor for auto-restore
30000
29969
  target_editor._stripped_outer_tag = stripped_source_tag or stripped_target_tag
30001
- target_editor._list_prefix = target_list_prefix
30002
29970
 
30003
29971
  # Connect text changes to update segment
30004
29972
  # Use a factory function to create a proper closure that captures the segment ID
@@ -30010,11 +29978,6 @@ class SupervertalerQt(QMainWindow):
30010
29978
  nonlocal debounce_timer
30011
29979
  new_text = editor_widget.toPlainText()
30012
29980
 
30013
- # Strip WYSIWYG list prefix if present (display-only, not saved)
30014
- list_prefix = getattr(editor_widget, '_list_prefix', '')
30015
- if list_prefix and new_text.startswith(list_prefix):
30016
- new_text = new_text[len(list_prefix):]
30017
-
30018
29981
  # Reverse invisible character replacements before saving
30019
29982
  new_text = self.reverse_invisible_replacements(new_text)
30020
29983
 
@@ -31111,14 +31074,15 @@ class SupervertalerQt(QMainWindow):
31111
31074
  import re
31112
31075
  list_numbers = {} # {segment_id: list_number}
31113
31076
  list_counter = 0
31114
-
31077
+ prev_was_ordered_list = False
31078
+
31115
31079
  for seg in self.current_project.segments:
31116
31080
  source_text = seg.source.strip() if seg.source else ""
31117
-
31081
+
31118
31082
  # Check for list tags (new <li-o>, <li-b> and legacy <li>)
31119
31083
  has_li_ordered = '<li-o>' in source_text or ('<li>' in source_text and '<li-b>' not in source_text)
31120
31084
  has_li_bullet = '<li-b>' in source_text
31121
-
31085
+
31122
31086
  if has_li_ordered:
31123
31087
  # Check for explicit number in text
31124
31088
  num_match = re.match(r'^<li(?:-o)?>\s*(\d+)[.)\s]', source_text)
@@ -31126,8 +31090,15 @@ class SupervertalerQt(QMainWindow):
31126
31090
  list_numbers[seg.id] = int(num_match.group(1))
31127
31091
  list_counter = int(num_match.group(1))
31128
31092
  else:
31093
+ # Reset counter if starting a new list (gap since last ordered item)
31094
+ if not prev_was_ordered_list:
31095
+ list_counter = 0
31129
31096
  list_counter += 1
31130
31097
  list_numbers[seg.id] = list_counter
31098
+ prev_was_ordered_list = True
31099
+ else:
31100
+ # Not an ordered list item - mark gap for potential new list
31101
+ prev_was_ordered_list = False
31131
31102
 
31132
31103
  # Render all segments
31133
31104
  current_segment_id = self._get_current_segment_id()
@@ -31142,12 +31113,20 @@ class SupervertalerQt(QMainWindow):
31142
31113
  # Type field values: "para", "heading", "list_item", "table_cell", "Sub", "¶", etc.
31143
31114
  seg_type_lower = seg_type.lower() if seg_type else 'para'
31144
31115
 
31116
+ # Check if this is a list item (need source_text first)
31117
+ source_text = seg.source.strip() if seg.source else ""
31118
+
31145
31119
  # Check if this is a heading/subtitle
31146
- is_heading = ('Heading' in style or 'Title' in style or 'Subtitle' in style
31120
+ # Also detect bold-wrapped short text as section headings (e.g., <b>TECHNICAL FIELD</b>)
31121
+ is_heading = ('Heading' in style or 'Title' in style or 'Subtitle' in style
31147
31122
  or seg_type_lower in ('heading', 'sub', 'subtitle', 'title'))
31148
-
31149
- # Check if this is a list item
31150
- source_text = seg.source.strip() if seg.source else ""
31123
+
31124
+ # Detect bold section headings: <b>TEXT</b> where text is short and likely a heading
31125
+ if not is_heading and source_text.startswith('<b>') and source_text.endswith('</b>'):
31126
+ inner_text = source_text[3:-4].strip() # Remove <b> and </b>
31127
+ # Short text (under 80 chars) that's bold is likely a section heading
31128
+ if len(inner_text) < 80 and '<' not in inner_text:
31129
+ is_heading = True
31151
31130
  is_list_item = ('<li-o>' in source_text or '<li-b>' in source_text or
31152
31131
  '<li>' in source_text or seg_type_lower == 'list_item')
31153
31132
 
@@ -31166,9 +31145,15 @@ class SupervertalerQt(QMainWindow):
31166
31145
  prev_type = getattr(prev_seg, 'type', 'para') or 'para'
31167
31146
  prev_type_lower = prev_type.lower() if prev_type else 'para'
31168
31147
 
31169
- prev_is_heading = ('Heading' in prev_style or 'Title' in prev_style or
31170
- 'Subtitle' in prev_style or
31148
+ prev_is_heading = ('Heading' in prev_style or 'Title' in prev_style or
31149
+ 'Subtitle' in prev_style or
31171
31150
  prev_type_lower in ('heading', 'sub', 'subtitle', 'title'))
31151
+ # Also detect bold section headings in previous segment
31152
+ prev_source = prev_seg.source.strip() if prev_seg.source else ""
31153
+ if not prev_is_heading and prev_source.startswith('<b>') and prev_source.endswith('</b>'):
31154
+ prev_inner = prev_source[3:-4].strip()
31155
+ if len(prev_inner) < 80 and '<' not in prev_inner:
31156
+ prev_is_heading = True
31172
31157
  prev_is_paragraph = prev_type == '¶' or prev_type_lower == 'para'
31173
31158
  prev_is_list = prev_type_lower == 'list_item' or '<li' in (prev_seg.source or '')
31174
31159
 
@@ -31190,9 +31175,15 @@ class SupervertalerQt(QMainWindow):
31190
31175
  else:
31191
31176
  # Same paragraph, running text
31192
31177
  need_space = True
31193
- # 4. List items: single break (each on own line)
31178
+ # 4. List items: ordered list items (like claims) get paragraph spacing
31194
31179
  elif is_list_item or prev_is_list:
31195
- need_single_break = True
31180
+ # Ordered list items (<li-o>) get double breaks for visual separation
31181
+ is_ordered_list = '<li-o>' in source_text or ('<li>' in source_text and '<li-b>' not in source_text)
31182
+ prev_is_ordered = '<li-o>' in (prev_seg.source or '') or ('<li>' in (prev_seg.source or '') and '<li-b>' not in (prev_seg.source or ''))
31183
+ if is_ordered_list or prev_is_ordered:
31184
+ need_double_break = True # Paragraph-like spacing for numbered items
31185
+ else:
31186
+ need_single_break = True # Bullet lists stay compact
31196
31187
  # 5. Default: space (running text)
31197
31188
  else:
31198
31189
  need_space = True
@@ -31227,6 +31218,11 @@ class SupervertalerQt(QMainWindow):
31227
31218
  char_format.setFontPointSize(13)
31228
31219
  char_format.setFontWeight(QFont.Weight.Bold)
31229
31220
  char_format.setForeground(QColor('#1f4068'))
31221
+ elif is_heading:
31222
+ # Bold section headings detected from <b>TEXT</b> pattern
31223
+ char_format.setFontPointSize(12)
31224
+ char_format.setFontWeight(QFont.Weight.Bold)
31225
+ char_format.setForeground(QColor('#1a365d'))
31230
31226
  else:
31231
31227
  char_format.setFontPointSize(11)
31232
31228
  char_format.setForeground(QColor('#2d2d2d'))
@@ -34885,12 +34881,20 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
34885
34881
  self.log("💡 Tip: Go to Resources tab to activate TMs and glossaries for this project")
34886
34882
 
34887
34883
  def search_and_display_tm_matches(self, source_text: str):
34888
- """Search TM and Termbases and display matches with visual diff for fuzzy matches"""
34884
+ """Search TM and Termbases and display matches with visual diff for fuzzy matches.
34885
+
34886
+ If hide_outer_wrapping_tags is enabled, strips structural tags (like <li-o>, <p>)
34887
+ from the query before searching for better TM matching.
34888
+ """
34889
34889
  self.log(f"🚨 search_and_display_tm_matches called with source_text: '{source_text[:50]}...'")
34890
34890
  if not source_text or not source_text.strip():
34891
34891
  if hasattr(self, 'tm_display'):
34892
34892
  self.tm_display.clear()
34893
34893
  return
34894
+
34895
+ # Strip outer structural tags if setting is enabled (for cleaner TM matching)
34896
+ if self.hide_outer_wrapping_tags:
34897
+ source_text, _ = strip_outer_wrapping_tags(source_text)
34894
34898
 
34895
34899
  # Initialize TM if not already done
34896
34900
  if not self.tm_database and self.current_project:
@@ -34967,14 +34971,18 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
34967
34971
  # Update grid (using cell widget)
34968
34972
  target_widget = self.table.cellWidget(current_row, 3)
34969
34973
  if target_widget and isinstance(target_widget, EditableGridTextEditor):
34970
- target_widget.setPlainText(segment.target)
34971
-
34974
+ # Strip outer wrapping tags if setting is enabled
34975
+ display_text = segment.target
34976
+ if self.hide_outer_wrapping_tags:
34977
+ display_text, _ = strip_outer_wrapping_tags(display_text)
34978
+ target_widget.setPlainText(display_text)
34979
+
34972
34980
  # Update status column
34973
34981
  status_item = self.table.item(current_row, 1)
34974
34982
  if status_item:
34975
34983
  status_item.setText("Translated")
34976
34984
  status_item.setBackground(QColor("#d1fae5")) # Light green for translated
34977
-
34985
+
34978
34986
  # Update project modified status (progress is handled by status bar)
34979
34987
  self.log(f"✨ Auto-propagated 100% TM match for segment #{current_row + 1}")
34980
34988
 
@@ -36032,7 +36040,11 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
36032
36040
  target_widget = self.table.cellWidget(row, 3)
36033
36041
  if target_widget and hasattr(target_widget, 'setPlainText'):
36034
36042
  target_widget.blockSignals(True)
36035
- target_widget.setPlainText(segment.target)
36043
+ # Strip outer wrapping tags if setting is enabled
36044
+ display_text = segment.target
36045
+ if self.hide_outer_wrapping_tags:
36046
+ display_text, _ = strip_outer_wrapping_tags(display_text)
36047
+ target_widget.setPlainText(display_text)
36036
36048
  target_widget.blockSignals(False)
36037
36049
  self.table.viewport().update()
36038
36050
 
@@ -36481,7 +36493,11 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
36481
36493
  cell_widget = self.table.cellWidget(row, col)
36482
36494
  if cell_widget and hasattr(cell_widget, 'setPlainText'):
36483
36495
  cell_widget.blockSignals(True)
36484
- cell_widget.setPlainText(new_text)
36496
+ # Strip outer wrapping tags if setting is enabled
36497
+ display_text = new_text
36498
+ if self.hide_outer_wrapping_tags:
36499
+ display_text, _ = strip_outer_wrapping_tags(display_text)
36500
+ cell_widget.setPlainText(display_text)
36485
36501
  cell_widget.blockSignals(False)
36486
36502
 
36487
36503
  self.project_modified = True
@@ -39571,13 +39587,19 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
39571
39587
  if target_widget and isinstance(target_widget, QTextEdit):
39572
39588
  from PyQt6.QtGui import QTextCursor
39573
39589
 
39590
+ # Strip outer wrapping tags for display if setting is enabled
39591
+ display_text = new_text
39592
+ if self.hide_outer_wrapping_tags:
39593
+ display_text, _ = strip_outer_wrapping_tags(display_text)
39594
+
39574
39595
  cursor = target_widget.textCursor()
39575
39596
  cursor.beginEditBlock()
39576
39597
  cursor.select(QTextCursor.SelectionType.Document)
39577
- cursor.insertText(new_text)
39598
+ cursor.insertText(display_text)
39578
39599
  cursor.endEditBlock()
39579
39600
 
39580
- segment.target = target_widget.toPlainText()
39601
+ # Store full text (with tags) in segment, but use displayed text if tags are hidden
39602
+ segment.target = new_text # Keep full text with tags
39581
39603
  target_widget.setFocus()
39582
39604
  target_widget.moveCursor(QTextCursor.MoveOperation.End)
39583
39605
 
@@ -39589,7 +39611,11 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
39589
39611
  # Fallback: no editor widget, update data and (if possible) update cell
39590
39612
  segment.target = new_text
39591
39613
  if target_widget and hasattr(target_widget, 'setPlainText'):
39592
- target_widget.setPlainText(new_text)
39614
+ # Strip outer wrapping tags if setting is enabled
39615
+ display_text = new_text
39616
+ if self.hide_outer_wrapping_tags:
39617
+ display_text, _ = strip_outer_wrapping_tags(display_text)
39618
+ target_widget.setPlainText(display_text)
39593
39619
  label = f" ({source_label})" if source_label else ""
39594
39620
  self.log(f"✓ Replaced target text in segment {segment_id}{label}")
39595
39621
  self._play_sound_effect('match_inserted')
@@ -40552,24 +40578,37 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
40552
40578
  """Refresh all visible cells to reflect current tag view mode"""
40553
40579
  if not hasattr(self, 'table') or not self.current_project:
40554
40580
  return
40555
-
40581
+
40556
40582
  # Get current visible rows
40557
40583
  for row in range(self.table.rowCount()):
40558
40584
  # Get segment for this row
40559
40585
  if row >= len(self.current_project.segments):
40560
40586
  continue
40561
-
40587
+
40562
40588
  segment = self.current_project.segments[row]
40563
-
40589
+
40590
+ # Apply tag stripping if enabled
40591
+ source_for_display = segment.source
40592
+ target_for_display = segment.target
40593
+
40594
+ if self.hide_outer_wrapping_tags:
40595
+ # Strip outer wrapping tags from source
40596
+ stripped_source, _ = strip_outer_wrapping_tags(segment.source)
40597
+ source_for_display = stripped_source
40598
+
40599
+ # Strip outer wrapping tags from target
40600
+ stripped_target, _ = strip_outer_wrapping_tags(segment.target)
40601
+ target_for_display = stripped_target
40602
+
40564
40603
  # Update source cell (column 2)
40565
40604
  source_widget = self.table.cellWidget(row, 2)
40566
40605
  if source_widget and hasattr(source_widget, 'update_display_mode'):
40567
- source_widget.update_display_mode(segment.source, self.show_tags)
40568
-
40606
+ source_widget.update_display_mode(source_for_display, self.show_tags)
40607
+
40569
40608
  # Update target cell (column 3)
40570
40609
  target_widget = self.table.cellWidget(row, 3)
40571
40610
  if target_widget and hasattr(target_widget, 'update_display_mode'):
40572
- target_widget.update_display_mode(segment.target, self.show_tags)
40611
+ target_widget.update_display_mode(target_for_display, self.show_tags)
40573
40612
 
40574
40613
  def update_tab_segment_editor(self, segment_id: int, source_text: str, target_text: str,
40575
40614
  status: str = "untranslated", notes: str = ""):
@@ -42091,15 +42130,20 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
42091
42130
  tm_ids = self.tm_metadata_mgr.get_active_tm_ids(project_id)
42092
42131
 
42093
42132
  try:
42133
+ # Strip outer structural tags if setting is enabled (for cleaner TM matching)
42134
+ search_source = segment.source
42135
+ if self.hide_outer_wrapping_tags:
42136
+ search_source, _ = strip_outer_wrapping_tags(search_source)
42137
+
42094
42138
  if check_tm_exact_only:
42095
42139
  # Use exact match only (faster - O(1) hash lookup)
42096
- exact_match = self.tm_database.get_exact_match(segment.source, tm_ids=tm_ids)
42140
+ exact_match = self.tm_database.get_exact_match(search_source, tm_ids=tm_ids)
42097
42141
  if exact_match:
42098
42142
  tm_match = exact_match.get('target_text', '')
42099
42143
  self.log(f"✓ Found 100% TM match (exact) for segment #{segment.id}")
42100
42144
  else:
42101
42145
  # Use fuzzy search (includes 100% matches)
42102
- matches = self.tm_database.search_all(segment.source, tm_ids=tm_ids, enabled_only=False, max_matches=1)
42146
+ matches = self.tm_database.search_all(search_source, tm_ids=tm_ids, enabled_only=False, max_matches=1)
42103
42147
  if matches and matches[0].get('match_pct', 0) == 100:
42104
42148
  tm_match = matches[0].get('target', '')
42105
42149
  self.log(f"✓ Found 100% TM match for segment #{segment.id}")
@@ -43199,10 +43243,15 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
43199
43243
 
43200
43244
  try:
43201
43245
  match = None
43202
-
43246
+
43247
+ # Strip outer structural tags if setting is enabled (for cleaner TM matching)
43248
+ search_source = segment.source
43249
+ if self.hide_outer_wrapping_tags:
43250
+ search_source, _ = strip_outer_wrapping_tags(search_source)
43251
+
43203
43252
  if tm_exact_only:
43204
43253
  # Exact match only - use hash lookup (fast)
43205
- match = self.tm_database.get_exact_match(segment.source, tm_ids=tm_ids)
43254
+ match = self.tm_database.get_exact_match(search_source, tm_ids=tm_ids)
43206
43255
  print(f"DEBUG get_exact_match returned: type={type(match)}, value={match}")
43207
43256
  if match and isinstance(match, dict):
43208
43257
  segment.target = match.get('target_text', '')
@@ -43214,7 +43263,7 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
43214
43263
  else:
43215
43264
  # Fuzzy matching enabled - get best match ≥75%
43216
43265
  matches = self.tm_database.search_all(
43217
- segment.source,
43266
+ search_source,
43218
43267
  tm_ids=tm_ids,
43219
43268
  enabled_only=False,
43220
43269
  max_matches=1
@@ -43236,7 +43285,11 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
43236
43285
  if segment.target:
43237
43286
  target_widget = self.table.cellWidget(row_index, 3)
43238
43287
  if target_widget and isinstance(target_widget, EditableGridTextEditor):
43239
- target_widget.setPlainText(segment.target)
43288
+ # Strip outer wrapping tags if setting is enabled
43289
+ display_text = segment.target
43290
+ if self.hide_outer_wrapping_tags:
43291
+ display_text, _ = strip_outer_wrapping_tags(display_text)
43292
+ target_widget.setPlainText(display_text)
43240
43293
  self.update_status_icon(row_index, segment.status)
43241
43294
  QApplication.processEvents()
43242
43295
 
@@ -43305,11 +43358,15 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
43305
43358
  if success and current <= len(segments_needing_translation):
43306
43359
  row_index, segment = segments_needing_translation[current - 1]
43307
43360
  if row_index < self.table.rowCount():
43361
+ # Strip outer wrapping tags if setting is enabled
43362
+ display_text = segment.target
43363
+ if self.hide_outer_wrapping_tags:
43364
+ display_text, _ = strip_outer_wrapping_tags(display_text)
43308
43365
  target_widget = self.table.cellWidget(row_index, 3)
43309
43366
  if target_widget and isinstance(target_widget, EditableGridTextEditor):
43310
- target_widget.setPlainText(segment.target)
43367
+ target_widget.setPlainText(display_text)
43311
43368
  else:
43312
- self.table.setItem(row_index, 3, QTableWidgetItem(segment.target))
43369
+ self.table.setItem(row_index, 3, QTableWidgetItem(display_text))
43313
43370
  self.update_status_icon(row_index, segment.status)
43314
43371
 
43315
43372
  def handle_translation_complete(final_success_count, final_error_count):
@@ -43477,9 +43534,14 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
43477
43534
  # Check each segment against TM
43478
43535
  for row_index, segment in segments_to_translate:
43479
43536
  try:
43537
+ # Strip outer structural tags if setting is enabled (for cleaner TM matching)
43538
+ search_source = segment.source
43539
+ if self.hide_outer_wrapping_tags:
43540
+ search_source, _ = strip_outer_wrapping_tags(search_source)
43541
+
43480
43542
  if check_tm_exact_only:
43481
43543
  # Use exact match only (faster - O(1) hash lookup)
43482
- exact_match = self.tm_database.get_exact_match(segment.source, tm_ids=tm_ids)
43544
+ exact_match = self.tm_database.get_exact_match(search_source, tm_ids=tm_ids)
43483
43545
  if exact_match:
43484
43546
  # Found 100% exact match - auto-insert it
43485
43547
  tm_match = exact_match.get('target_text', '')
@@ -43503,7 +43565,7 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
43503
43565
  segments_needing_translation.append((row_index, segment))
43504
43566
  else:
43505
43567
  # Use fuzzy search (includes 100% matches)
43506
- matches = self.tm_database.search_all(segment.source, tm_ids=tm_ids, enabled_only=False, max_matches=1)
43568
+ matches = self.tm_database.search_all(search_source, tm_ids=tm_ids, enabled_only=False, max_matches=1)
43507
43569
  if matches and matches[0].get('match_pct', 0) == 100:
43508
43570
  # Found 100% match - auto-insert it
43509
43571
  tm_match = matches[0].get('target', '')
@@ -43582,8 +43644,13 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
43582
43644
  # Translate each segment from TM
43583
43645
  for row_index, segment in segments_needing_translation:
43584
43646
  try:
43647
+ # Strip outer structural tags if setting is enabled (for cleaner TM matching)
43648
+ search_source = segment.source
43649
+ if self.hide_outer_wrapping_tags:
43650
+ search_source, _ = strip_outer_wrapping_tags(search_source)
43651
+
43585
43652
  # Search TM for best match
43586
- matches = self.tm_database.search_all(segment.source, tm_ids=tm_ids, enabled_only=False, max_matches=1)
43653
+ matches = self.tm_database.search_all(search_source, tm_ids=tm_ids, enabled_only=False, max_matches=1)
43587
43654
 
43588
43655
  if matches and len(matches) > 0:
43589
43656
  match = matches[0]
@@ -45389,8 +45456,12 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
45389
45456
  if tm_ids is not None and isinstance(tm_ids, list) and len(tm_ids) == 0:
45390
45457
  all_tm_matches = []
45391
45458
  else:
45459
+ # Strip outer structural tags if setting is enabled (for cleaner TM matching)
45460
+ search_source = segment.source
45461
+ if self.hide_outer_wrapping_tags:
45462
+ search_source, _ = strip_outer_wrapping_tags(search_source)
45392
45463
  # Search using TMDatabase (includes bidirectional + base language matching)
45393
- all_tm_matches = self.tm_database.search_all(segment.source, tm_ids=tm_ids, enabled_only=False, max_matches=10)
45464
+ all_tm_matches = self.tm_database.search_all(search_source, tm_ids=tm_ids, enabled_only=False, max_matches=10)
45394
45465
 
45395
45466
  # Single consolidated log message for TM search results
45396
45467
  if all_tm_matches:
@@ -17,7 +17,7 @@
17
17
  <link rel="apple-touch-icon" href="apple-touch-icon.png">
18
18
  <link rel="manifest" href="site.webmanifest">
19
19
 
20
- <link rel="stylesheet" href="styles.css?v=1.9.198">
20
+ <link rel="stylesheet" href="styles.css?v=1.9.202">
21
21
  <link rel="preconnect" href="https://fonts.googleapis.com">
22
22
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
23
23
  <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap"
@@ -50,7 +50,7 @@
50
50
  class="nav-discussions">💬 Discussions</a></li>
51
51
  <li class="nav-action">
52
52
  <a href="https://github.com/michaelbeijer/Supervertaler/blob/main/CHANGELOG.md" target="_blank"
53
- class="nav-version" title="Current version">v1.9.198</a>
53
+ class="nav-version" title="Current version">v1.9.202</a>
54
54
  </li>
55
55
  <li class="nav-action">
56
56
  <a href="https://github.com/michaelbeijer/Supervertaler" target="_blank" class="nav-icon-link"
@@ -74,7 +74,7 @@
74
74
  Supervertaler
75
75
  <span class="gradient-text">The Ultimate Translation Workbench</span>
76
76
  </h1>
77
- <p class="version-badge">v1.9.198</p>
77
+ <p class="version-badge">v1.9.202</p>
78
78
  <p class="hero-subtitle">
79
79
  AI-enhanced translation workbench. Work with ChatGPT, Claude, and Gemini simultaneously.
80
80
  Built by translators, for translators and writers.
@@ -711,7 +711,7 @@
711
711
  <div style="text-align: center; margin: 40px 0;">
712
712
  <div class="download-card featured"
713
713
  style="border: 3px solid #6366F1; max-width: 700px; margin: 0 auto;">
714
- <div class="download-badge" style="background: #6366F1;">v1.9.198</div>
714
+ <div class="download-badge" style="background: #6366F1;">v1.9.202</div>
715
715
  <h3>🎨 Supervertaler</h3>
716
716
  <p class="download-description" style="font-weight: 600; color: #6366F1; margin-bottom: 10px;">
717
717
  Modern Professional Interface
@@ -824,16 +824,16 @@
824
824
 
825
825
  <div class="screenshots-grid">
826
826
  <div class="screenshot-card" style="border: 3px solid #6366F1;">
827
- <a href="screenshots/Supervertalerv1.9.198_2026-02-02.png" class="screenshot-link" target="_blank">
828
- <img src="screenshots/Supervertalerv1.9.198_2026-02-02.png"
829
- alt="Supervertaler v1.9.198 with QuickTrans" loading="lazy">
827
+ <a href="screenshots/Supervertalerv1.9.202_2026-02-02.png" class="screenshot-link" target="_blank">
828
+ <img src="screenshots/Supervertalerv1.9.202_2026-02-02.png"
829
+ alt="Supervertaler v1.9.202 with QuickTrans" loading="lazy">
830
830
  <div class="screenshot-overlay">
831
831
  <span class="zoom-icon">🔍 Click to enlarge</span>
832
832
  </div>
833
833
  </a>
834
834
  <div class="screenshot-caption">
835
835
  <h3>⚡ QuickTrans & Modern UI <span class="badge"
836
- style="background: #6366F1; color: white; padding: 3px 8px; border-radius: 12px; font-size: 11px; margin-left: 5px;">v1.9.198</span>
836
+ style="background: #6366F1; color: white; padding: 3px 8px; border-radius: 12px; font-size: 11px; margin-left: 5px;">v1.9.202</span>
837
837
  </h3>
838
838
  <p>QuickTrans instant translation popup with MT engines and LLMs. Global hotkey (Ctrl+Alt+M) works from any application.</p>
839
839
  </div>
@@ -1223,7 +1223,7 @@
1223
1223
  </svg>
1224
1224
  </button>
1225
1225
 
1226
- <script src="script.js?v=1.9.198"></script>
1226
+ <script src="script.js?v=1.9.202"></script>
1227
1227
  </body>
1228
1228
 
1229
1229
  </html>
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "supervertaler"
7
- version = "1.9.198"
7
+ version = "1.9.202"
8
8
  description = "Professional AI-enhanced translation workbench with multi-LLM support, glossary system, TM, spellcheck, voice commands, and PyQt6 interface. Batteries included (core)."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"