supervertaler 1.9.197__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.197 → supervertaler-1.9.202}/CHANGELOG.md +33 -2
  2. {supervertaler-1.9.197 → supervertaler-1.9.202}/PKG-INFO +1 -1
  3. {supervertaler-1.9.197 → supervertaler-1.9.202}/Supervertaler.py +198 -74
  4. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/index.html +9 -9
  5. {supervertaler-1.9.197 → supervertaler-1.9.202}/pyproject.toml +1 -1
  6. {supervertaler-1.9.197 → supervertaler-1.9.202}/supervertaler.egg-info/PKG-INFO +1 -1
  7. {supervertaler-1.9.197 → supervertaler-1.9.202}/FAQ.md +0 -0
  8. {supervertaler-1.9.197 → supervertaler-1.9.202}/LICENSE +0 -0
  9. {supervertaler-1.9.197 → supervertaler-1.9.202}/MANIFEST.in +0 -0
  10. {supervertaler-1.9.197 → supervertaler-1.9.202}/README.md +0 -0
  11. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/ICON_CONVERSION_GUIDE.md +0 -0
  12. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/MB.ico +0 -0
  13. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/README.md +0 -0
  14. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/README_ICONS.md +0 -0
  15. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/arrow_left_dark.png +0 -0
  16. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/arrow_left_light.png +0 -0
  17. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/arrow_right_dark.png +0 -0
  18. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/arrow_right_light.png +0 -0
  19. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/generate_icons.py +0 -0
  20. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/icon.ico +0 -0
  21. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/icon_128.png +0 -0
  22. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/icon_16x16.png +0 -0
  23. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/icon_24.png +0 -0
  24. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/icon_256.png +0 -0
  25. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/icon_256x256.png +0 -0
  26. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/icon_32.png +0 -0
  27. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/icon_32x32.png +0 -0
  28. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/icon_48.png +0 -0
  29. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/icon_48x48.png +0 -0
  30. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/icon_64.png +0 -0
  31. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/icon_preview.html +0 -0
  32. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/icon_sv_modern.svg +0 -0
  33. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/icon_sv_modern_paths.svg +0 -0
  34. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/icon_sv_simple.svg +0 -0
  35. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/icon_sv_website.svg +0 -0
  36. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/patent-drawing-1951.jpg +0 -0
  37. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/scrollbar_down.png +0 -0
  38. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/scrollbar_up.png +0 -0
  39. {supervertaler-1.9.197 → supervertaler-1.9.202}/assets/supervertaler_icon_colours.png +0 -0
  40. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/.nojekyll +0 -0
  41. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/CNAME +0 -0
  42. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/SIMILAR_APPS.md +0 -0
  43. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/apple-touch-icon.png +0 -0
  44. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/BUGFIX_README.md +0 -0
  45. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/CHANGELIST.md +0 -0
  46. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/CHANGELOG_Old.md +0 -0
  47. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/FAQ.md +0 -0
  48. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/INSTALLATION_v1.7.8.md +0 -0
  49. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/PROJECT_ORGANIZATION.md +0 -0
  50. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/TERMBASE_REFACTORING_SUMMARY.md +0 -0
  51. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/USER_GUIDE_v1.7.8.md +0 -0
  52. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/VERIFICATION_CHECKLIST.md +0 -0
  53. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/BEFORE_AFTER_COMPARISON.md +0 -0
  54. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/BUGFIX_SESSION_SUMMARY.md +0 -0
  55. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/COLOR_SCHEME_REFERENCE.md +0 -0
  56. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/COMPACT_LAYOUT_CHANGELOG.md +0 -0
  57. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/COMPACT_LAYOUT_DOCUMENTATION_INDEX.md +0 -0
  58. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/COMPACT_LAYOUT_IMPLEMENTATION_SUMMARY.md +0 -0
  59. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/COMPACT_LAYOUT_UPDATE.md +0 -0
  60. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/COMPLETE_IMPLEMENTATION_SUMMARY.md +0 -0
  61. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/COMPLETE_PROJECT_SUMMARY.md +0 -0
  62. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/DATABASE_FINAL_SUMMARY.md +0 -0
  63. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/DATABASE_IMPLEMENTATION.md +0 -0
  64. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/DATABASE_PRODUCTION_READY.md +0 -0
  65. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/DATABASE_QUICK_REFERENCE.md +0 -0
  66. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/DUAL_VERSION_STRATEGY.md +0 -0
  67. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/FINAL_SESSION_SUMMARY.md +0 -0
  68. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/FOLDER_STRUCTURE_UPDATE.md +0 -0
  69. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/GITHUB_PAGES_SETUP.md +0 -0
  70. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/IMPLEMENTATION_CHECKLIST.md +0 -0
  71. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/IMPLEMENTATION_COMPLETE.md +0 -0
  72. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/IMPLEMENTATION_COMPLETE_COMPACT_LAYOUT.md +0 -0
  73. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/IMPLEMENTATION_READY.md +0 -0
  74. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/IMPLEMENTATION_STATUS_PHASE2_READY.md +0 -0
  75. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/KEYBOARD_SHORTCUTS_MATCHES.md +0 -0
  76. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/LAYOUT_BEFORE_AFTER.md +0 -0
  77. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/MASTER_INDEX.md +0 -0
  78. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/MATCH_DISPLAY_IMPROVEMENTS.md +0 -0
  79. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/MATCH_DISPLAY_LONG_SEGMENTS_UPDATE.md +0 -0
  80. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/MATCH_DISPLAY_QUICK_REFERENCE.md +0 -0
  81. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/MATCH_INSERTION_FEATURES.md +0 -0
  82. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/MATCH_SHORTCUTS_QUICK_REF.md +0 -0
  83. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/MODULAR_ARCHITECTURE_GUIDE.md +0 -0
  84. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/PHASE2_IMPLEMENTATION_CHECKLIST.md +0 -0
  85. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/PHASE2_IMPLEMENTATION_DETAILED_CHECKLIST.md +0 -0
  86. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/PHASE2_IMPLEMENTATION_IN_PROGRESS.md +0 -0
  87. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/PHASE2_NEXT_STEPS.md +0 -0
  88. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/PHASE2_READY_TO_IMPLEMENT.md +0 -0
  89. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/PHASE2_START_HERE.md +0 -0
  90. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/QT_MIGRATION_PLAN.md +0 -0
  91. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/QT_SESSION_SUMMARY.md +0 -0
  92. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/QUICK_SESSION_SUMMARY.md +0 -0
  93. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/RELEASE_Qt_v1.0.0_Phase5.md +0 -0
  94. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/RELEASE_v1.9.38.md +0 -0
  95. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/RELEASE_v3.7.1.md +0 -0
  96. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/RELEASE_v3.7.6.md +0 -0
  97. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/RELEASE_v3.7.7.md +0 -0
  98. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/RESTRUCTURE_COMPLETE.md +0 -0
  99. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/SESSION_DOCUMENTATION_INDEX.md +0 -0
  100. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/SESSION_IMPLEMENTATION_SUMMARY.md +0 -0
  101. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/SESSION_LONG_SEGMENTS_COMPLETE.md +0 -0
  102. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/SESSION_MATCH_FEATURES_COMPLETE.md +0 -0
  103. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/SESSION_STATUS.md +0 -0
  104. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/SESSION_SUMMARY_Phase5.md +0 -0
  105. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/START_HERE.md +0 -0
  106. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/START_IMPLEMENTATION_HERE.md +0 -0
  107. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/STYLE_GUIDES_DELIVERABLES.md +0 -0
  108. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/STYLE_GUIDES_DOCUMENTATION_INDEX.md +0 -0
  109. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/STYLE_GUIDES_FEATURE_SUMMARY.md +0 -0
  110. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/STYLE_GUIDES_IMPLEMENTATION.md +0 -0
  111. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/STYLE_GUIDES_PROJECT_COMPLETION.md +0 -0
  112. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/STYLE_GUIDES_QUICK_REFERENCE.md +0 -0
  113. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/STYLE_GUIDES_VISUAL_ARCHITECTURE.md +0 -0
  114. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/TERMBASE_FIXES.md +0 -0
  115. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/TERMBASE_IMPLEMENTATION.md +0 -0
  116. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/TERMBASE_QUICK_START.md +0 -0
  117. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/TMX_CONCORDANCE_STYLE_HIGHLIGHTING.md +0 -0
  118. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/TMX_DUAL_HIGHLIGHTING.md +0 -0
  119. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/TMX_EDITOR_HIGHLIGHTING_UPDATE.md +0 -0
  120. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/TMX_EDITOR_IMPLEMENTATION.md +0 -0
  121. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/TMX_EDITOR_WORD_HIGHLIGHTING.md +0 -0
  122. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/TMX_TABLE_LAYOUT_INTEGRATED_EDIT.md +0 -0
  123. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/TMX_TREEVIEW_GRID_RESIZABLE.md +0 -0
  124. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/TMX_WORD_HIGHLIGHTING_IMPLEMENTATION_COMPLETE.md +0 -0
  125. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/TMX_WORD_HIGHLIGHTING_SUMMARY.md +0 -0
  126. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/TM_MATCH_PANE_CHECKLIST.md +0 -0
  127. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/TM_MATCH_PANE_IMPLEMENTATION.md +0 -0
  128. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/TM_MATCH_PANE_VISUAL_GUIDE.md +0 -0
  129. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/VISUAL_COLOR_REFERENCE.md +0 -0
  130. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/development/VISUAL_IMPLEMENTATION_SUMMARY.md +0 -0
  131. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/sessions/COLOR_FIX_EXPLANATION.md +0 -0
  132. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/sessions/DATABASE_CONSOLIDATION_REPORT.md +0 -0
  133. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/sessions/DUAL_EDITOR_WORKFLOW.md +0 -0
  134. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/sessions/DUAL_SELECTION_SYSTEM.md +0 -0
  135. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/sessions/IMPROVEMENTS_SUMMARY.md +0 -0
  136. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/sessions/ISSUES_FIXES_PROGRESS.md +0 -0
  137. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/sessions/MATCH_DISPLAY_COMPACT_FIXES.md +0 -0
  138. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/sessions/README_SESSION_TERMBASE.md +0 -0
  139. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/sessions/SAFE_DELETION_REMINDER.txt +0 -0
  140. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/sessions/SESSION_SUMMARY.md +0 -0
  141. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/sessions/TERMBASE_FIXES_APPLIED.md +0 -0
  142. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/sessions/TESTING_CHECKLIST.md +0 -0
  143. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/sessions/TMX_EDITOR_ANNOUNCEMENT.md +0 -0
  144. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/archive/sessions/TRANSLATION_RESULTS_IMPROVEMENTS.md +0 -0
  145. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/assets/Figure1.png +0 -0
  146. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/assets/patent-drawing-1951.jpg +0 -0
  147. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/changelog.html +0 -0
  148. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/dev-notes/QA.md +0 -0
  149. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/dev-notes/STYLE_GUIDES_UI_TEMPLATE.py +0 -0
  150. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/dev-notes/_Notes_2025-11-21.md +0 -0
  151. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/dev-notes/_things_to_remind_AIs_of_when_translating.md +0 -0
  152. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/dev-notes/issue_28.md +0 -0
  153. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/dev-notes/openai_debug.txt +0 -0
  154. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/dev-notes/pre-translation-dialog-enhancement.md +0 -0
  155. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/emoji_mockup.html +0 -0
  156. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/favicon.ico +0 -0
  157. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/guides/AI_PROMPT_ASSISTANT_USER_GUIDE.md +0 -0
  158. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/guides/ENCODING_REPAIR_TOOL.md +0 -0
  159. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/guides/FAQ.md +0 -0
  160. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/guides/GLOSSARY_OF_SUPERVERTALER_TERMINOLOGY.md +0 -0
  161. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/guides/JSON_EDITORS_AND_HUMAN_READABLE_FORMAT.md +0 -0
  162. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/guides/KEYBOARD_SHORTCUTS.md +0 -0
  163. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/guides/PDF_RESCUE.md +0 -0
  164. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/guides/PROMPT_ASSISTANT_USER_GUIDE.md +0 -0
  165. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/guides/QT_SETTINGS_DIALOG_GUIDE.md +0 -0
  166. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/guides/TERM_EXTRACTION_GUIDE.md +0 -0
  167. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/guides/USER_DATA_FOLDER_SETUP.md +0 -0
  168. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/idea_beijer.bot_integration_idea/BEIJERBOT_FEATURE_ANALYSIS.md +0 -0
  169. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/idea_beijer.bot_integration_idea/CLI_BRIDGE_SPECIFICATION.md +0 -0
  170. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/idea_beijer.bot_integration_idea/IMPLEMENTATION_ROADMAP.md +0 -0
  171. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/idea_beijer.bot_integration_idea/QUICKMENU_INTEGRATION_PLAN.md +0 -0
  172. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/idea_beijer.bot_integration_idea/README.md +0 -0
  173. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/idea_tag-cleaner/tag_cleaner.md +0 -0
  174. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/idea_use_vscode_as_cat_tool/ai-agent-translation-workflow.md +0 -0
  175. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/logo.png +0 -0
  176. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/screenshots/2025-10-13_00-46-16.jpg +0 -0
  177. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/screenshots/QuickTrans.png +0 -0
  178. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/screenshots/Superlookup_Web_resources.jpg +0 -0
  179. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_AI-Assistant.jpg +0 -0
  180. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_CLASSIC_v2.4.1_(tkinter).jpg +0 -0
  181. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_Prompt_Manager_2026-01-14.png +0 -0
  182. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_Qt_LLM_LeaderboardResults_2025-11-12.jpg +0 -0
  183. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_Qt_LLM_Leaderboard_2025-11-12.jpg +0 -0
  184. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_Superbrowser.jpg +0 -0
  185. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_dark_mode_2025-12-16.jpg +0 -0
  186. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_dark_mode_2025-12-17.jpg +0 -0
  187. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_grid.jpg +0 -0
  188. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_tkinter (v3.7.7).jpg +0 -0
  189. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_v1.9.102_compare_panel_2026-01-14.png +0 -0
  190. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_v1.9.102_grid_2026-01-14.png +0 -0
  191. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/screenshots/Supervertalerv1.9.195_2026-02-02.png +0 -0
  192. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/screenshots/new/Supervertaler-grid.jpg +0 -0
  193. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/screenshots/new/Supervertaler_AI-Assistant.jpg +0 -0
  194. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/screenshots/new/Supervertaler_Prompt-Library.jpg +0 -0
  195. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/screenshots/new/Supervertaler_Qt_LLM_LeaderboardResults_2025-11-12.jpg +0 -0
  196. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/screenshots/new/Supervertaler_Qt_LLM_Leaderboard_2025-11-12.jpg +0 -0
  197. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/screenshots/new/Supervertaler_Superbrowser.jpg +0 -0
  198. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/screenshots/old/2025-10-13_00-50-24.jpg +0 -0
  199. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/screenshots/old/Supervertaler_Qt_2025-11-12.jpg +0 -0
  200. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/script.js +0 -0
  201. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/site.webmanifest +0 -0
  202. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/specifications/AI_ASSISTANT_PHASE2_IMPLEMENTATION.md +0 -0
  203. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/specifications/AI_PROMPT_ASSISTANT.md +0 -0
  204. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/specifications/AI_PROMPT_ASSISTANT_IMPLEMENTATION.md +0 -0
  205. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/specifications/EXPORT_MENU_UPDATE.md +0 -0
  206. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/specifications/IMPLEMENTATION_SUMMARY.md +0 -0
  207. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/specifications/QT_PHASE2_COMPLETE.md +0 -0
  208. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/specifications/QT_PHASE3_COMPLETE.md +0 -0
  209. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/specifications/SUPERVERTALER_DATA_FORMAT.md +0 -0
  210. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/specifications/TASK_TYPE_SYSTEM.md +0 -0
  211. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/specifications/TERMINOLOGY_UPDATE_SUMMARY.md +0 -0
  212. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/specifications/opus-api-integration.md +0 -0
  213. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/styles.css +0 -0
  214. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/.gitbook/assets/supervertaler-logo.png +0 -0
  215. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/.gitbook/assets/sv-icon.svg +0 -0
  216. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/GITBOOK_LANDING_DRAFT.md +0 -0
  217. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/README.md +0 -0
  218. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/SUMMARY.md +0 -0
  219. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/ai-translation/batch-translation.md +0 -0
  220. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/ai-translation/ollama.md +0 -0
  221. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/ai-translation/overview.md +0 -0
  222. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/ai-translation/prompt-library.md +0 -0
  223. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/ai-translation/prompts.md +0 -0
  224. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/ai-translation/providers.md +0 -0
  225. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/ai-translation/single-segment.md +0 -0
  226. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/cat-tools/cafetran.md +0 -0
  227. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/cat-tools/memoq.md +0 -0
  228. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/cat-tools/overview.md +0 -0
  229. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/cat-tools/phrase.md +0 -0
  230. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/cat-tools/trados.md +0 -0
  231. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/editor/editing-confirming.md +0 -0
  232. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/editor/filtering.md +0 -0
  233. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/editor/find-replace.md +0 -0
  234. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/editor/keyboard-shortcuts.md +0 -0
  235. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/editor/navigation.md +0 -0
  236. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/editor/pagination.md +0 -0
  237. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/editor/translation-grid.md +0 -0
  238. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/get-started/api-keys.md +0 -0
  239. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/get-started/first-project.md +0 -0
  240. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/get-started/installation.md +0 -0
  241. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/get-started/quick-start.md +0 -0
  242. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/glossaries/basics.md +0 -0
  243. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/glossaries/creating.md +0 -0
  244. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/glossaries/extraction.md +0 -0
  245. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/glossaries/highlighting.md +0 -0
  246. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/glossaries/importing.md +0 -0
  247. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/import-export/bilingual-tables.md +0 -0
  248. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/import-export/docx-import.md +0 -0
  249. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/import-export/exporting.md +0 -0
  250. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/import-export/formats.md +0 -0
  251. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/import-export/multi-file.md +0 -0
  252. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/import-export/txt-import.md +0 -0
  253. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/qa/non-translatables.md +0 -0
  254. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/qa/spellcheck.md +0 -0
  255. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/qa/tag-validation.md +0 -0
  256. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/reference/changelog.md +0 -0
  257. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/reference/contributing.md +0 -0
  258. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/reference/faq.md +0 -0
  259. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/reference/file-formats.md +0 -0
  260. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/settings/fonts.md +0 -0
  261. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/settings/general.md +0 -0
  262. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/settings/shortcuts.md +0 -0
  263. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/settings/theme.md +0 -0
  264. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/settings/view.md +0 -0
  265. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/superlookup/glossary-search.md +0 -0
  266. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/superlookup/mt.md +0 -0
  267. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/superlookup/overview.md +0 -0
  268. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/superlookup/tm-search.md +0 -0
  269. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/superlookup/web-resources.md +0 -0
  270. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/tools/autofingers.md +0 -0
  271. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/tools/image-extractor.md +0 -0
  272. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/tools/pdf-rescue.md +0 -0
  273. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/tools/tmx-editor.md +0 -0
  274. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/tools/voice-commands.md +0 -0
  275. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/translation-memory/basics.md +0 -0
  276. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/translation-memory/fuzzy-matching.md +0 -0
  277. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/translation-memory/importing-tmx.md +0 -0
  278. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/translation-memory/managing-tms.md +0 -0
  279. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/translation-memory/supermemory.md +0 -0
  280. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/troubleshooting/api-issues.md +0 -0
  281. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/troubleshooting/common-issues.md +0 -0
  282. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/troubleshooting/import-export-errors.md +0 -0
  283. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/troubleshooting/linux.md +0 -0
  284. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/superdocs/troubleshooting/performance.md +0 -0
  285. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/sv-icon.svg +0 -0
  286. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/technical/AI_ASSISTANT_GUIDE.md +0 -0
  287. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/technical/AI_ASSISTANT_IMPLEMENTATION.md +0 -0
  288. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/technical/AI_ASSISTANT_INTEGRATION.md +0 -0
  289. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/technical/AI_ASSISTANT_QUICK_REFERENCE.md +0 -0
  290. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/technical/DATABASE_LOCATIONS.md +0 -0
  291. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/technical/FILTER_HIGHLIGHTING_FIX.md +0 -0
  292. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/technical/MODULE_HEADER_PATTERN.md +0 -0
  293. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/technical/README.md +0 -0
  294. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/technical/SUPERBROWSER_GUIDE.md +0 -0
  295. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/technical/SUPERVOICE_TROUBLESHOOTING.md +0 -0
  296. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/technical/UNIFIED_PROMPT_LIBRARY_GUIDE.md +0 -0
  297. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/technical/VOICE_DICTATION_GUIDE.md +0 -0
  298. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/tests/test_encoding_corruption.txt +0 -0
  299. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/web-app-manifest-192x192.png +0 -0
  300. {supervertaler-1.9.197 → supervertaler-1.9.202}/docs/web-app-manifest-512x512.png +0 -0
  301. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/__init__.py +0 -0
  302. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/ai_actions.py +0 -0
  303. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/ai_attachment_manager.py +0 -0
  304. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/ai_file_viewer_dialog.py +0 -0
  305. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/autofingers_engine.py +0 -0
  306. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/cafetran_docx_handler.py +0 -0
  307. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/config_manager.py +0 -0
  308. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/database_manager.py +0 -0
  309. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/database_migrations.py +0 -0
  310. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/dejavurtf_handler.py +0 -0
  311. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/document_analyzer.py +0 -0
  312. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/docx_handler.py +0 -0
  313. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/encoding_repair.py +0 -0
  314. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/encoding_repair_Qt.py +0 -0
  315. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/encoding_repair_ui.py +0 -0
  316. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/extract_tm.py +0 -0
  317. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/feature_manager.py +0 -0
  318. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/figure_context_manager.py +0 -0
  319. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/file_dialog_helper.py +0 -0
  320. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/find_replace.py +0 -0
  321. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/find_replace_qt.py +0 -0
  322. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/glossary_manager.py +0 -0
  323. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/image_extractor.py +0 -0
  324. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/keyboard_shortcuts_widget.py +0 -0
  325. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/llm_clients.py +0 -0
  326. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/llm_leaderboard.py +0 -0
  327. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/llm_superbench_ui.py +0 -0
  328. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/local_llm_setup.py +0 -0
  329. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/model_update_dialog.py +0 -0
  330. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/model_version_checker.py +0 -0
  331. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/mqxliff_handler.py +0 -0
  332. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/non_translatables_manager.py +0 -0
  333. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/pdf_rescue_Qt.py +0 -0
  334. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/pdf_rescue_tkinter.py +0 -0
  335. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/phrase_docx_handler.py +0 -0
  336. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/project_home_panel.py +0 -0
  337. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/project_tm.py +0 -0
  338. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/prompt_assistant.py +0 -0
  339. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/prompt_library.py +0 -0
  340. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/prompt_library_migration.py +0 -0
  341. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/quick_access_sidebar.py +0 -0
  342. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/quicktrans.py +0 -0
  343. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/ribbon_widget.py +0 -0
  344. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/sdlppx_handler.py +0 -0
  345. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/setup_wizard.py +0 -0
  346. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/shortcut_manager.py +0 -0
  347. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/simple_segmenter.py +0 -0
  348. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/spellcheck_manager.py +0 -0
  349. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/statuses.py +0 -0
  350. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/style_guide_manager.py +0 -0
  351. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/superbench_ui.py +0 -0
  352. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/superbrowser.py +0 -0
  353. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/supercleaner.py +0 -0
  354. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/supercleaner_ui.py +0 -0
  355. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/superdocs.py +0 -0
  356. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/superdocs_viewer_qt.py +0 -0
  357. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/superlookup.py +0 -0
  358. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/tag_cleaner.py +0 -0
  359. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/tag_manager.py +0 -0
  360. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/term_extractor.py +0 -0
  361. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/termbase_entry_editor.py +0 -0
  362. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/termbase_import_export.py +0 -0
  363. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/termbase_manager.py +0 -0
  364. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/termview_widget.py +0 -0
  365. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/theme_manager.py +0 -0
  366. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/tm_editor_dialog.py +0 -0
  367. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/tm_manager_qt.py +0 -0
  368. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/tm_metadata_manager.py +0 -0
  369. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/tmx_editor.py +0 -0
  370. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/tmx_editor_qt.py +0 -0
  371. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/tmx_generator.py +0 -0
  372. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/tracked_changes.py +0 -0
  373. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/trados_docx_handler.py +0 -0
  374. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/translation_memory.py +0 -0
  375. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/translation_results_panel.py +0 -0
  376. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/translation_services.py +0 -0
  377. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/unified_prompt_library.py +0 -0
  378. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/unified_prompt_manager_qt.py +0 -0
  379. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/voice_commands.py +0 -0
  380. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/voice_dictation.py +0 -0
  381. {supervertaler-1.9.197 → supervertaler-1.9.202}/modules/voice_dictation_lite.py +0 -0
  382. {supervertaler-1.9.197 → supervertaler-1.9.202}/setup.cfg +0 -0
  383. {supervertaler-1.9.197 → supervertaler-1.9.202}/setup.py +0 -0
  384. {supervertaler-1.9.197 → supervertaler-1.9.202}/supervertaler.egg-info/SOURCES.txt +0 -0
  385. {supervertaler-1.9.197 → supervertaler-1.9.202}/supervertaler.egg-info/dependency_links.txt +0 -0
  386. {supervertaler-1.9.197 → supervertaler-1.9.202}/supervertaler.egg-info/entry_points.txt +0 -0
  387. {supervertaler-1.9.197 → supervertaler-1.9.202}/supervertaler.egg-info/not-zip-safe +0 -0
  388. {supervertaler-1.9.197 → supervertaler-1.9.202}/supervertaler.egg-info/requires.txt +0 -0
  389. {supervertaler-1.9.197 → supervertaler-1.9.202}/supervertaler.egg-info/top_level.txt +0 -0
@@ -2,15 +2,46 @@
2
2
 
3
3
  All notable changes to Supervertaler are documented in this file.
4
4
 
5
- **Current Version:** v1.9.197 (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
+
27
+ ## v1.9.198 - February 2, 2026
28
+
29
+ ### ✨ New Features
30
+
31
+ - **Hide Outer Wrapping Tags - Complete Implementation**: The "Hide outer wrapping tags" feature now works on **both Source and Target columns**. Tags are automatically restored when saving, making the process completely transparent to the translator.
32
+
33
+ - **WYSIWYG List Numbering & Bullets**: When "Hide outer wrapping tags" is enabled, list items now display with visual prefixes:
34
+ - Ordered lists (`<li-o>`) show: "1. ", "2. ", "3. ", etc.
35
+ - Unordered lists (`<li-b>`, `<li>`) show: "• "
36
+ - These prefixes are display-only and don't affect the saved data
37
+
38
+ ---
39
+
9
40
  ## v1.9.197 - February 2, 2026
10
41
 
11
42
  ### ✨ New Features
12
43
 
13
- - **Hide Outer Wrapping Tags in Grid**: Added new option in View Settings → Grid Display Options to hide structural tags that wrap entire segments (like `<li-o>`, `<p>`, `<td>`). Since the segment type is shown in the Type column, these outer tags are redundant and can now be hidden for a cleaner grid display. Inner formatting tags like `<b>bold</b>` are preserved. Affects Source column only - Target keeps tags for editing.
44
+ - **Hide Outer Wrapping Tags in Grid**: Added new option in View Settings → Grid Display Options to hide structural tags that wrap entire segments (like `<li-o>`, `<p>`, `<td>`). Since the segment type is shown in the Type column, these outer tags are redundant and can now be hidden for a cleaner grid display. Inner formatting tags like `<b>bold</b>` are preserved.
14
45
 
15
46
  ### 🐛 Bug Fixes
16
47
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: supervertaler
3
- Version: 1.9.197
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
@@ -32,7 +32,7 @@ License: MIT
32
32
  """
33
33
 
34
34
  # Version Information.
35
- __version__ = "1.9.197"
35
+ __version__ = "1.9.198"
36
36
  __phase__ = "0.9"
37
37
  __release_date__ = "2026-02-02"
38
38
  __edition__ = "Qt"
@@ -17781,10 +17781,10 @@ class SupervertalerQt(QMainWindow):
17781
17781
  hide_wrapping_tags_check = CheckmarkCheckBox("Hide outer wrapping tags in grid (e.g. <li-o>...</li-o>)")
17782
17782
  hide_wrapping_tags_check.setChecked(font_settings.get('hide_outer_wrapping_tags', False))
17783
17783
  hide_wrapping_tags_check.setToolTip(
17784
- "When enabled, structural tags that wrap the entire segment (like <li-o>, <p>, <td>) are hidden in the grid.\n"
17785
- "The segment type is already shown in the Type column, so this reduces visual clutter.\n"
17786
- "Inner formatting tags like <b>bold</b> are still shown.\n"
17787
- "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."
17788
17788
  )
17789
17789
  hide_wrapping_tags_layout.addWidget(hide_wrapping_tags_check)
17790
17790
  hide_wrapping_tags_layout.addStretch()
@@ -20405,8 +20405,9 @@ class SupervertalerQt(QMainWindow):
20405
20405
 
20406
20406
  # Add hide outer wrapping tags setting if provided
20407
20407
  if hide_wrapping_tags_check is not None:
20408
- general_settings['hide_outer_wrapping_tags'] = hide_wrapping_tags_check.isChecked()
20409
- 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
20410
20411
 
20411
20412
  # Add focus border settings if provided
20412
20413
  if border_color_btn is not None:
@@ -23770,6 +23771,9 @@ class SupervertalerQt(QMainWindow):
23770
23771
  - 'latest': Overwrites existing entries with same source (keeps only newest translation)
23771
23772
  - 'all': Keeps all translations with different targets (default SQLite behavior)
23772
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
+
23773
23777
  Args:
23774
23778
  source: Source text
23775
23779
  target: Target text
@@ -23777,6 +23781,11 @@ class SupervertalerQt(QMainWindow):
23777
23781
  if not self.current_project:
23778
23782
  return
23779
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
+
23780
23789
  if not hasattr(self.current_project, 'source_lang') or not hasattr(self.current_project, 'target_lang'):
23781
23790
  return
23782
23791
 
@@ -29918,34 +29927,46 @@ class SupervertalerQt(QMainWindow):
29918
29927
  # Source - Use read-only QTextEdit widget for easy text selection
29919
29928
  # Strip outer wrapping tags if setting is enabled (display only, data unchanged)
29920
29929
  source_for_display = segment.source
29930
+ stripped_source_tag = None
29921
29931
  if self.hide_outer_wrapping_tags:
29922
- stripped, _ = strip_outer_wrapping_tags(segment.source)
29932
+ stripped, stripped_source_tag = strip_outer_wrapping_tags(segment.source)
29923
29933
  source_for_display = stripped
29924
29934
  # Apply invisible character replacements for display only
29925
29935
  source_display_text = self.apply_invisible_replacements(source_for_display)
29926
29936
  source_editor = ReadOnlyGridTextEditor(source_display_text, self.table, row)
29927
-
29937
+
29928
29938
  # Initialize empty termbase matches (will be populated lazily on segment selection or by background worker)
29929
29939
  source_editor.termbase_matches = {}
29930
-
29940
+
29931
29941
  # Set font to match grid
29932
29942
  font = QFont(self.default_font_family, self.default_font_size)
29933
29943
  source_editor.setFont(font)
29934
-
29944
+
29935
29945
  # Set as cell widget (allows easy text selection)
29936
29946
  self.table.setCellWidget(row, 2, source_editor)
29937
-
29947
+
29938
29948
  # Also set a placeholder item for row height calculation
29939
29949
  source_item = QTableWidgetItem()
29940
29950
  source_item.setFlags(Qt.ItemFlag.NoItemFlags) # No interaction
29941
29951
  self.table.setItem(row, 2, source_item)
29942
-
29952
+
29943
29953
  # Target - Use editable QTextEdit widget for easy text selection and editing
29944
- # Note: We don't strip wrapping tags from target cells since users edit them directly
29954
+ # Strip outer wrapping tags if enabled (will be auto-restored when saving)
29955
+ target_for_display = segment.target
29956
+ stripped_target_tag = None
29957
+ if self.hide_outer_wrapping_tags:
29958
+ stripped, stripped_target_tag = strip_outer_wrapping_tags(segment.target)
29959
+ target_for_display = stripped
29960
+ # Store stripped tag on segment for restore during save
29961
+ # Use source tag as reference (target should match source structure)
29962
+ segment._stripped_outer_tag = stripped_source_tag or stripped_target_tag
29963
+
29945
29964
  # Apply invisible character replacements for display (will be reversed when saving)
29946
- target_display_text = self.apply_invisible_replacements(segment.target)
29965
+ target_display_text = self.apply_invisible_replacements(target_for_display)
29947
29966
  target_editor = EditableGridTextEditor(target_display_text, self.table, row, self.table)
29948
29967
  target_editor.setFont(font)
29968
+ # Store stripped tag on editor for auto-restore
29969
+ target_editor._stripped_outer_tag = stripped_source_tag or stripped_target_tag
29949
29970
 
29950
29971
  # Connect text changes to update segment
29951
29972
  # Use a factory function to create a proper closure that captures the segment ID
@@ -29960,6 +29981,13 @@ class SupervertalerQt(QMainWindow):
29960
29981
  # Reverse invisible character replacements before saving
29961
29982
  new_text = self.reverse_invisible_replacements(new_text)
29962
29983
 
29984
+ # Auto-restore stripped outer wrapping tags if they were hidden
29985
+ stripped_tag = getattr(editor_widget, '_stripped_outer_tag', None)
29986
+ if stripped_tag and self.hide_outer_wrapping_tags:
29987
+ # Only re-add if the text doesn't already have the tag
29988
+ if not new_text.strip().startswith(f'<{stripped_tag}'):
29989
+ new_text = f'<{stripped_tag}>{new_text}</{stripped_tag}>'
29990
+
29963
29991
  # DEBUG: Log EVERY call to catch the culprit (only in debug mode)
29964
29992
  if self.debug_mode_enabled:
29965
29993
  self.log(f"🔔 textChanged FIRED: segment_id={segment_id}, new_text='{new_text[:20] if new_text else 'EMPTY'}...'")
@@ -31046,14 +31074,15 @@ class SupervertalerQt(QMainWindow):
31046
31074
  import re
31047
31075
  list_numbers = {} # {segment_id: list_number}
31048
31076
  list_counter = 0
31049
-
31077
+ prev_was_ordered_list = False
31078
+
31050
31079
  for seg in self.current_project.segments:
31051
31080
  source_text = seg.source.strip() if seg.source else ""
31052
-
31081
+
31053
31082
  # Check for list tags (new <li-o>, <li-b> and legacy <li>)
31054
31083
  has_li_ordered = '<li-o>' in source_text or ('<li>' in source_text and '<li-b>' not in source_text)
31055
31084
  has_li_bullet = '<li-b>' in source_text
31056
-
31085
+
31057
31086
  if has_li_ordered:
31058
31087
  # Check for explicit number in text
31059
31088
  num_match = re.match(r'^<li(?:-o)?>\s*(\d+)[.)\s]', source_text)
@@ -31061,8 +31090,15 @@ class SupervertalerQt(QMainWindow):
31061
31090
  list_numbers[seg.id] = int(num_match.group(1))
31062
31091
  list_counter = int(num_match.group(1))
31063
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
31064
31096
  list_counter += 1
31065
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
31066
31102
 
31067
31103
  # Render all segments
31068
31104
  current_segment_id = self._get_current_segment_id()
@@ -31077,12 +31113,20 @@ class SupervertalerQt(QMainWindow):
31077
31113
  # Type field values: "para", "heading", "list_item", "table_cell", "Sub", "¶", etc.
31078
31114
  seg_type_lower = seg_type.lower() if seg_type else 'para'
31079
31115
 
31116
+ # Check if this is a list item (need source_text first)
31117
+ source_text = seg.source.strip() if seg.source else ""
31118
+
31080
31119
  # Check if this is a heading/subtitle
31081
- 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
31082
31122
  or seg_type_lower in ('heading', 'sub', 'subtitle', 'title'))
31083
-
31084
- # Check if this is a list item
31085
- 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
31086
31130
  is_list_item = ('<li-o>' in source_text or '<li-b>' in source_text or
31087
31131
  '<li>' in source_text or seg_type_lower == 'list_item')
31088
31132
 
@@ -31101,9 +31145,15 @@ class SupervertalerQt(QMainWindow):
31101
31145
  prev_type = getattr(prev_seg, 'type', 'para') or 'para'
31102
31146
  prev_type_lower = prev_type.lower() if prev_type else 'para'
31103
31147
 
31104
- prev_is_heading = ('Heading' in prev_style or 'Title' in prev_style or
31105
- '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
31106
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
31107
31157
  prev_is_paragraph = prev_type == '¶' or prev_type_lower == 'para'
31108
31158
  prev_is_list = prev_type_lower == 'list_item' or '<li' in (prev_seg.source or '')
31109
31159
 
@@ -31125,9 +31175,15 @@ class SupervertalerQt(QMainWindow):
31125
31175
  else:
31126
31176
  # Same paragraph, running text
31127
31177
  need_space = True
31128
- # 4. List items: single break (each on own line)
31178
+ # 4. List items: ordered list items (like claims) get paragraph spacing
31129
31179
  elif is_list_item or prev_is_list:
31130
- 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
31131
31187
  # 5. Default: space (running text)
31132
31188
  else:
31133
31189
  need_space = True
@@ -31162,6 +31218,11 @@ class SupervertalerQt(QMainWindow):
31162
31218
  char_format.setFontPointSize(13)
31163
31219
  char_format.setFontWeight(QFont.Weight.Bold)
31164
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'))
31165
31226
  else:
31166
31227
  char_format.setFontPointSize(11)
31167
31228
  char_format.setForeground(QColor('#2d2d2d'))
@@ -34820,12 +34881,20 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
34820
34881
  self.log("💡 Tip: Go to Resources tab to activate TMs and glossaries for this project")
34821
34882
 
34822
34883
  def search_and_display_tm_matches(self, source_text: str):
34823
- """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
+ """
34824
34889
  self.log(f"🚨 search_and_display_tm_matches called with source_text: '{source_text[:50]}...'")
34825
34890
  if not source_text or not source_text.strip():
34826
34891
  if hasattr(self, 'tm_display'):
34827
34892
  self.tm_display.clear()
34828
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)
34829
34898
 
34830
34899
  # Initialize TM if not already done
34831
34900
  if not self.tm_database and self.current_project:
@@ -34902,14 +34971,18 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
34902
34971
  # Update grid (using cell widget)
34903
34972
  target_widget = self.table.cellWidget(current_row, 3)
34904
34973
  if target_widget and isinstance(target_widget, EditableGridTextEditor):
34905
- target_widget.setPlainText(segment.target)
34906
-
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
+
34907
34980
  # Update status column
34908
34981
  status_item = self.table.item(current_row, 1)
34909
34982
  if status_item:
34910
34983
  status_item.setText("Translated")
34911
34984
  status_item.setBackground(QColor("#d1fae5")) # Light green for translated
34912
-
34985
+
34913
34986
  # Update project modified status (progress is handled by status bar)
34914
34987
  self.log(f"✨ Auto-propagated 100% TM match for segment #{current_row + 1}")
34915
34988
 
@@ -35967,7 +36040,11 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
35967
36040
  target_widget = self.table.cellWidget(row, 3)
35968
36041
  if target_widget and hasattr(target_widget, 'setPlainText'):
35969
36042
  target_widget.blockSignals(True)
35970
- 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)
35971
36048
  target_widget.blockSignals(False)
35972
36049
  self.table.viewport().update()
35973
36050
 
@@ -36416,7 +36493,11 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
36416
36493
  cell_widget = self.table.cellWidget(row, col)
36417
36494
  if cell_widget and hasattr(cell_widget, 'setPlainText'):
36418
36495
  cell_widget.blockSignals(True)
36419
- 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)
36420
36501
  cell_widget.blockSignals(False)
36421
36502
 
36422
36503
  self.project_modified = True
@@ -37530,32 +37611,20 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
37530
37611
  self.load_segments_to_grid()
37531
37612
 
37532
37613
  def _refresh_source_column_display(self):
37533
- """Refresh source column to reflect hide_outer_wrapping_tags setting"""
37614
+ """Refresh grid to reflect hide_outer_wrapping_tags setting.
37615
+
37616
+ Reloads the entire grid to properly handle:
37617
+ - Tag stripping on both Source and Target columns
37618
+ - WYSIWYG list numbering/bullet prefixes
37619
+ - Proper list position calculation
37620
+ """
37534
37621
  if not hasattr(self, 'table') or not self.table:
37535
37622
  return
37536
37623
  if not hasattr(self, 'current_project') or not self.current_project:
37537
37624
  return
37538
37625
 
37539
- # Update each source cell with potentially stripped tags
37540
- for row in range(self.table.rowCount()):
37541
- if row >= len(self.current_project.segments):
37542
- continue
37543
-
37544
- segment = self.current_project.segments[row]
37545
- source_widget = self.table.cellWidget(row, 2)
37546
-
37547
- if source_widget and hasattr(source_widget, 'setPlainText'):
37548
- # Calculate display text with or without outer wrapping tags
37549
- source_for_display = segment.source
37550
- if self.hide_outer_wrapping_tags:
37551
- stripped, _ = strip_outer_wrapping_tags(segment.source)
37552
- source_for_display = stripped
37553
- source_display_text = self.apply_invisible_replacements(source_for_display)
37554
- source_widget.setPlainText(source_display_text)
37555
-
37556
- # Re-apply highlighting
37557
- if hasattr(source_widget, 'highlighter'):
37558
- source_widget.highlighter.rehighlight()
37626
+ # Reload grid to apply changes with proper list numbering calculation
37627
+ self.load_segments_to_grid()
37559
37628
 
37560
37629
  def apply_invisible_replacements(self, text):
37561
37630
  """Apply invisible character replacements to text based on settings"""
@@ -39518,13 +39587,19 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
39518
39587
  if target_widget and isinstance(target_widget, QTextEdit):
39519
39588
  from PyQt6.QtGui import QTextCursor
39520
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
+
39521
39595
  cursor = target_widget.textCursor()
39522
39596
  cursor.beginEditBlock()
39523
39597
  cursor.select(QTextCursor.SelectionType.Document)
39524
- cursor.insertText(new_text)
39598
+ cursor.insertText(display_text)
39525
39599
  cursor.endEditBlock()
39526
39600
 
39527
- 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
39528
39603
  target_widget.setFocus()
39529
39604
  target_widget.moveCursor(QTextCursor.MoveOperation.End)
39530
39605
 
@@ -39536,7 +39611,11 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
39536
39611
  # Fallback: no editor widget, update data and (if possible) update cell
39537
39612
  segment.target = new_text
39538
39613
  if target_widget and hasattr(target_widget, 'setPlainText'):
39539
- 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)
39540
39619
  label = f" ({source_label})" if source_label else ""
39541
39620
  self.log(f"✓ Replaced target text in segment {segment_id}{label}")
39542
39621
  self._play_sound_effect('match_inserted')
@@ -40499,24 +40578,37 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
40499
40578
  """Refresh all visible cells to reflect current tag view mode"""
40500
40579
  if not hasattr(self, 'table') or not self.current_project:
40501
40580
  return
40502
-
40581
+
40503
40582
  # Get current visible rows
40504
40583
  for row in range(self.table.rowCount()):
40505
40584
  # Get segment for this row
40506
40585
  if row >= len(self.current_project.segments):
40507
40586
  continue
40508
-
40587
+
40509
40588
  segment = self.current_project.segments[row]
40510
-
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
+
40511
40603
  # Update source cell (column 2)
40512
40604
  source_widget = self.table.cellWidget(row, 2)
40513
40605
  if source_widget and hasattr(source_widget, 'update_display_mode'):
40514
- source_widget.update_display_mode(segment.source, self.show_tags)
40515
-
40606
+ source_widget.update_display_mode(source_for_display, self.show_tags)
40607
+
40516
40608
  # Update target cell (column 3)
40517
40609
  target_widget = self.table.cellWidget(row, 3)
40518
40610
  if target_widget and hasattr(target_widget, 'update_display_mode'):
40519
- target_widget.update_display_mode(segment.target, self.show_tags)
40611
+ target_widget.update_display_mode(target_for_display, self.show_tags)
40520
40612
 
40521
40613
  def update_tab_segment_editor(self, segment_id: int, source_text: str, target_text: str,
40522
40614
  status: str = "untranslated", notes: str = ""):
@@ -42038,15 +42130,20 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
42038
42130
  tm_ids = self.tm_metadata_mgr.get_active_tm_ids(project_id)
42039
42131
 
42040
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
+
42041
42138
  if check_tm_exact_only:
42042
42139
  # Use exact match only (faster - O(1) hash lookup)
42043
- 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)
42044
42141
  if exact_match:
42045
42142
  tm_match = exact_match.get('target_text', '')
42046
42143
  self.log(f"✓ Found 100% TM match (exact) for segment #{segment.id}")
42047
42144
  else:
42048
42145
  # Use fuzzy search (includes 100% matches)
42049
- 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)
42050
42147
  if matches and matches[0].get('match_pct', 0) == 100:
42051
42148
  tm_match = matches[0].get('target', '')
42052
42149
  self.log(f"✓ Found 100% TM match for segment #{segment.id}")
@@ -43146,10 +43243,15 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
43146
43243
 
43147
43244
  try:
43148
43245
  match = None
43149
-
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
+
43150
43252
  if tm_exact_only:
43151
43253
  # Exact match only - use hash lookup (fast)
43152
- 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)
43153
43255
  print(f"DEBUG get_exact_match returned: type={type(match)}, value={match}")
43154
43256
  if match and isinstance(match, dict):
43155
43257
  segment.target = match.get('target_text', '')
@@ -43161,7 +43263,7 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
43161
43263
  else:
43162
43264
  # Fuzzy matching enabled - get best match ≥75%
43163
43265
  matches = self.tm_database.search_all(
43164
- segment.source,
43266
+ search_source,
43165
43267
  tm_ids=tm_ids,
43166
43268
  enabled_only=False,
43167
43269
  max_matches=1
@@ -43183,7 +43285,11 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
43183
43285
  if segment.target:
43184
43286
  target_widget = self.table.cellWidget(row_index, 3)
43185
43287
  if target_widget and isinstance(target_widget, EditableGridTextEditor):
43186
- 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)
43187
43293
  self.update_status_icon(row_index, segment.status)
43188
43294
  QApplication.processEvents()
43189
43295
 
@@ -43252,11 +43358,15 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
43252
43358
  if success and current <= len(segments_needing_translation):
43253
43359
  row_index, segment = segments_needing_translation[current - 1]
43254
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)
43255
43365
  target_widget = self.table.cellWidget(row_index, 3)
43256
43366
  if target_widget and isinstance(target_widget, EditableGridTextEditor):
43257
- target_widget.setPlainText(segment.target)
43367
+ target_widget.setPlainText(display_text)
43258
43368
  else:
43259
- self.table.setItem(row_index, 3, QTableWidgetItem(segment.target))
43369
+ self.table.setItem(row_index, 3, QTableWidgetItem(display_text))
43260
43370
  self.update_status_icon(row_index, segment.status)
43261
43371
 
43262
43372
  def handle_translation_complete(final_success_count, final_error_count):
@@ -43424,9 +43534,14 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
43424
43534
  # Check each segment against TM
43425
43535
  for row_index, segment in segments_to_translate:
43426
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
+
43427
43542
  if check_tm_exact_only:
43428
43543
  # Use exact match only (faster - O(1) hash lookup)
43429
- 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)
43430
43545
  if exact_match:
43431
43546
  # Found 100% exact match - auto-insert it
43432
43547
  tm_match = exact_match.get('target_text', '')
@@ -43450,7 +43565,7 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
43450
43565
  segments_needing_translation.append((row_index, segment))
43451
43566
  else:
43452
43567
  # Use fuzzy search (includes 100% matches)
43453
- 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)
43454
43569
  if matches and matches[0].get('match_pct', 0) == 100:
43455
43570
  # Found 100% match - auto-insert it
43456
43571
  tm_match = matches[0].get('target', '')
@@ -43529,8 +43644,13 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
43529
43644
  # Translate each segment from TM
43530
43645
  for row_index, segment in segments_needing_translation:
43531
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
+
43532
43652
  # Search TM for best match
43533
- 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)
43534
43654
 
43535
43655
  if matches and len(matches) > 0:
43536
43656
  match = matches[0]
@@ -45336,8 +45456,12 @@ OUTPUT ONLY THE SEGMENT MARKERS. DO NOT ADD EXPLANATIONS BEFORE OR AFTER."""
45336
45456
  if tm_ids is not None and isinstance(tm_ids, list) and len(tm_ids) == 0:
45337
45457
  all_tm_matches = []
45338
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)
45339
45463
  # Search using TMDatabase (includes bidirectional + base language matching)
45340
- 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)
45341
45465
 
45342
45466
  # Single consolidated log message for TM search results
45343
45467
  if all_tm_matches: