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.
- {supervertaler-1.9.198 → supervertaler-1.9.202}/CHANGELOG.md +19 -1
- {supervertaler-1.9.198 → supervertaler-1.9.202}/PKG-INFO +1 -1
- {supervertaler-1.9.198 → supervertaler-1.9.202}/Supervertaler.py +162 -91
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/index.html +9 -9
- {supervertaler-1.9.198 → supervertaler-1.9.202}/pyproject.toml +1 -1
- {supervertaler-1.9.198 → supervertaler-1.9.202}/supervertaler.egg-info/PKG-INFO +1 -1
- {supervertaler-1.9.198 → supervertaler-1.9.202}/FAQ.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/LICENSE +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/MANIFEST.in +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/README.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/ICON_CONVERSION_GUIDE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/MB.ico +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/README.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/README_ICONS.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/arrow_left_dark.png +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/arrow_left_light.png +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/arrow_right_dark.png +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/arrow_right_light.png +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/generate_icons.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon.ico +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_128.png +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_16x16.png +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_24.png +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_256.png +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_256x256.png +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_32.png +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_32x32.png +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_48.png +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_48x48.png +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_64.png +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_preview.html +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_sv_modern.svg +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_sv_modern_paths.svg +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_sv_simple.svg +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/icon_sv_website.svg +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/patent-drawing-1951.jpg +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/scrollbar_down.png +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/scrollbar_up.png +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/assets/supervertaler_icon_colours.png +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/.nojekyll +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/CNAME +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/SIMILAR_APPS.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/apple-touch-icon.png +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/BUGFIX_README.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/CHANGELIST.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/CHANGELOG_Old.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/FAQ.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/INSTALLATION_v1.7.8.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/PROJECT_ORGANIZATION.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/TERMBASE_REFACTORING_SUMMARY.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/USER_GUIDE_v1.7.8.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/VERIFICATION_CHECKLIST.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/BEFORE_AFTER_COMPARISON.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/BUGFIX_SESSION_SUMMARY.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/COLOR_SCHEME_REFERENCE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/COMPACT_LAYOUT_CHANGELOG.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/COMPACT_LAYOUT_DOCUMENTATION_INDEX.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/COMPACT_LAYOUT_IMPLEMENTATION_SUMMARY.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/COMPACT_LAYOUT_UPDATE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/COMPLETE_IMPLEMENTATION_SUMMARY.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/COMPLETE_PROJECT_SUMMARY.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/DATABASE_FINAL_SUMMARY.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/DATABASE_IMPLEMENTATION.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/DATABASE_PRODUCTION_READY.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/DATABASE_QUICK_REFERENCE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/DUAL_VERSION_STRATEGY.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/FINAL_SESSION_SUMMARY.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/FOLDER_STRUCTURE_UPDATE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/GITHUB_PAGES_SETUP.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/IMPLEMENTATION_CHECKLIST.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/IMPLEMENTATION_COMPLETE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/IMPLEMENTATION_COMPLETE_COMPACT_LAYOUT.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/IMPLEMENTATION_READY.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/IMPLEMENTATION_STATUS_PHASE2_READY.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/KEYBOARD_SHORTCUTS_MATCHES.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/LAYOUT_BEFORE_AFTER.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/MASTER_INDEX.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/MATCH_DISPLAY_IMPROVEMENTS.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/MATCH_DISPLAY_LONG_SEGMENTS_UPDATE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/MATCH_DISPLAY_QUICK_REFERENCE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/MATCH_INSERTION_FEATURES.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/MATCH_SHORTCUTS_QUICK_REF.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/MODULAR_ARCHITECTURE_GUIDE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/PHASE2_IMPLEMENTATION_CHECKLIST.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/PHASE2_IMPLEMENTATION_DETAILED_CHECKLIST.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/PHASE2_IMPLEMENTATION_IN_PROGRESS.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/PHASE2_NEXT_STEPS.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/PHASE2_READY_TO_IMPLEMENT.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/PHASE2_START_HERE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/QT_MIGRATION_PLAN.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/QT_SESSION_SUMMARY.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/QUICK_SESSION_SUMMARY.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/RELEASE_Qt_v1.0.0_Phase5.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/RELEASE_v1.9.38.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/RELEASE_v3.7.1.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/RELEASE_v3.7.6.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/RELEASE_v3.7.7.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/RESTRUCTURE_COMPLETE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/SESSION_DOCUMENTATION_INDEX.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/SESSION_IMPLEMENTATION_SUMMARY.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/SESSION_LONG_SEGMENTS_COMPLETE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/SESSION_MATCH_FEATURES_COMPLETE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/SESSION_STATUS.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/SESSION_SUMMARY_Phase5.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/START_HERE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/START_IMPLEMENTATION_HERE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/STYLE_GUIDES_DELIVERABLES.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/STYLE_GUIDES_DOCUMENTATION_INDEX.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/STYLE_GUIDES_FEATURE_SUMMARY.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/STYLE_GUIDES_IMPLEMENTATION.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/STYLE_GUIDES_PROJECT_COMPLETION.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/STYLE_GUIDES_QUICK_REFERENCE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/STYLE_GUIDES_VISUAL_ARCHITECTURE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TERMBASE_FIXES.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TERMBASE_IMPLEMENTATION.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TERMBASE_QUICK_START.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TMX_CONCORDANCE_STYLE_HIGHLIGHTING.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TMX_DUAL_HIGHLIGHTING.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TMX_EDITOR_HIGHLIGHTING_UPDATE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TMX_EDITOR_IMPLEMENTATION.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TMX_EDITOR_WORD_HIGHLIGHTING.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TMX_TABLE_LAYOUT_INTEGRATED_EDIT.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TMX_TREEVIEW_GRID_RESIZABLE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TMX_WORD_HIGHLIGHTING_IMPLEMENTATION_COMPLETE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TMX_WORD_HIGHLIGHTING_SUMMARY.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TM_MATCH_PANE_CHECKLIST.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TM_MATCH_PANE_IMPLEMENTATION.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/TM_MATCH_PANE_VISUAL_GUIDE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/VISUAL_COLOR_REFERENCE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/development/VISUAL_IMPLEMENTATION_SUMMARY.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/sessions/COLOR_FIX_EXPLANATION.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/sessions/DATABASE_CONSOLIDATION_REPORT.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/sessions/DUAL_EDITOR_WORKFLOW.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/sessions/DUAL_SELECTION_SYSTEM.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/sessions/IMPROVEMENTS_SUMMARY.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/sessions/ISSUES_FIXES_PROGRESS.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/sessions/MATCH_DISPLAY_COMPACT_FIXES.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/sessions/README_SESSION_TERMBASE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/sessions/SAFE_DELETION_REMINDER.txt +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/sessions/SESSION_SUMMARY.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/sessions/TERMBASE_FIXES_APPLIED.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/sessions/TESTING_CHECKLIST.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/sessions/TMX_EDITOR_ANNOUNCEMENT.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/archive/sessions/TRANSLATION_RESULTS_IMPROVEMENTS.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/assets/Figure1.png +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/assets/patent-drawing-1951.jpg +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/changelog.html +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/dev-notes/QA.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/dev-notes/STYLE_GUIDES_UI_TEMPLATE.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/dev-notes/_Notes_2025-11-21.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/dev-notes/_things_to_remind_AIs_of_when_translating.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/dev-notes/issue_28.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/dev-notes/openai_debug.txt +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/dev-notes/pre-translation-dialog-enhancement.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/emoji_mockup.html +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/favicon.ico +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/guides/AI_PROMPT_ASSISTANT_USER_GUIDE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/guides/ENCODING_REPAIR_TOOL.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/guides/FAQ.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/guides/GLOSSARY_OF_SUPERVERTALER_TERMINOLOGY.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/guides/JSON_EDITORS_AND_HUMAN_READABLE_FORMAT.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/guides/KEYBOARD_SHORTCUTS.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/guides/PDF_RESCUE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/guides/PROMPT_ASSISTANT_USER_GUIDE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/guides/QT_SETTINGS_DIALOG_GUIDE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/guides/TERM_EXTRACTION_GUIDE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/guides/USER_DATA_FOLDER_SETUP.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/idea_beijer.bot_integration_idea/BEIJERBOT_FEATURE_ANALYSIS.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/idea_beijer.bot_integration_idea/CLI_BRIDGE_SPECIFICATION.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/idea_beijer.bot_integration_idea/IMPLEMENTATION_ROADMAP.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/idea_beijer.bot_integration_idea/QUICKMENU_INTEGRATION_PLAN.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/idea_beijer.bot_integration_idea/README.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/idea_tag-cleaner/tag_cleaner.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/idea_use_vscode_as_cat_tool/ai-agent-translation-workflow.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/logo.png +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/2025-10-13_00-46-16.jpg +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/QuickTrans.png +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/Superlookup_Web_resources.jpg +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_AI-Assistant.jpg +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_CLASSIC_v2.4.1_(tkinter).jpg +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_Prompt_Manager_2026-01-14.png +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_Qt_LLM_LeaderboardResults_2025-11-12.jpg +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_Qt_LLM_Leaderboard_2025-11-12.jpg +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_Superbrowser.jpg +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_dark_mode_2025-12-16.jpg +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_dark_mode_2025-12-17.jpg +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_grid.jpg +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_tkinter (v3.7.7).jpg +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_v1.9.102_compare_panel_2026-01-14.png +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/Supervertaler_v1.9.102_grid_2026-01-14.png +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/Supervertalerv1.9.195_2026-02-02.png +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/new/Supervertaler-grid.jpg +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/new/Supervertaler_AI-Assistant.jpg +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/new/Supervertaler_Prompt-Library.jpg +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/new/Supervertaler_Qt_LLM_LeaderboardResults_2025-11-12.jpg +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/new/Supervertaler_Qt_LLM_Leaderboard_2025-11-12.jpg +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/new/Supervertaler_Superbrowser.jpg +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/old/2025-10-13_00-50-24.jpg +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/screenshots/old/Supervertaler_Qt_2025-11-12.jpg +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/script.js +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/site.webmanifest +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/specifications/AI_ASSISTANT_PHASE2_IMPLEMENTATION.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/specifications/AI_PROMPT_ASSISTANT.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/specifications/AI_PROMPT_ASSISTANT_IMPLEMENTATION.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/specifications/EXPORT_MENU_UPDATE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/specifications/IMPLEMENTATION_SUMMARY.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/specifications/QT_PHASE2_COMPLETE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/specifications/QT_PHASE3_COMPLETE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/specifications/SUPERVERTALER_DATA_FORMAT.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/specifications/TASK_TYPE_SYSTEM.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/specifications/TERMINOLOGY_UPDATE_SUMMARY.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/specifications/opus-api-integration.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/styles.css +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/.gitbook/assets/supervertaler-logo.png +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/.gitbook/assets/sv-icon.svg +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/GITBOOK_LANDING_DRAFT.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/README.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/SUMMARY.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/ai-translation/batch-translation.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/ai-translation/ollama.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/ai-translation/overview.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/ai-translation/prompt-library.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/ai-translation/prompts.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/ai-translation/providers.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/ai-translation/single-segment.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/cat-tools/cafetran.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/cat-tools/memoq.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/cat-tools/overview.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/cat-tools/phrase.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/cat-tools/trados.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/editor/editing-confirming.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/editor/filtering.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/editor/find-replace.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/editor/keyboard-shortcuts.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/editor/navigation.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/editor/pagination.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/editor/translation-grid.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/get-started/api-keys.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/get-started/first-project.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/get-started/installation.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/get-started/quick-start.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/glossaries/basics.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/glossaries/creating.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/glossaries/extraction.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/glossaries/highlighting.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/glossaries/importing.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/import-export/bilingual-tables.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/import-export/docx-import.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/import-export/exporting.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/import-export/formats.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/import-export/multi-file.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/import-export/txt-import.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/qa/non-translatables.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/qa/spellcheck.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/qa/tag-validation.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/reference/changelog.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/reference/contributing.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/reference/faq.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/reference/file-formats.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/settings/fonts.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/settings/general.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/settings/shortcuts.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/settings/theme.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/settings/view.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/superlookup/glossary-search.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/superlookup/mt.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/superlookup/overview.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/superlookup/tm-search.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/superlookup/web-resources.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/tools/autofingers.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/tools/image-extractor.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/tools/pdf-rescue.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/tools/tmx-editor.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/tools/voice-commands.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/translation-memory/basics.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/translation-memory/fuzzy-matching.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/translation-memory/importing-tmx.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/translation-memory/managing-tms.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/translation-memory/supermemory.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/troubleshooting/api-issues.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/troubleshooting/common-issues.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/troubleshooting/import-export-errors.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/troubleshooting/linux.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/superdocs/troubleshooting/performance.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/sv-icon.svg +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/technical/AI_ASSISTANT_GUIDE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/technical/AI_ASSISTANT_IMPLEMENTATION.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/technical/AI_ASSISTANT_INTEGRATION.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/technical/AI_ASSISTANT_QUICK_REFERENCE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/technical/DATABASE_LOCATIONS.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/technical/FILTER_HIGHLIGHTING_FIX.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/technical/MODULE_HEADER_PATTERN.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/technical/README.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/technical/SUPERBROWSER_GUIDE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/technical/SUPERVOICE_TROUBLESHOOTING.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/technical/UNIFIED_PROMPT_LIBRARY_GUIDE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/technical/VOICE_DICTATION_GUIDE.md +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/tests/test_encoding_corruption.txt +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/web-app-manifest-192x192.png +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/docs/web-app-manifest-512x512.png +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/__init__.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/ai_actions.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/ai_attachment_manager.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/ai_file_viewer_dialog.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/autofingers_engine.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/cafetran_docx_handler.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/config_manager.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/database_manager.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/database_migrations.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/dejavurtf_handler.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/document_analyzer.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/docx_handler.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/encoding_repair.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/encoding_repair_Qt.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/encoding_repair_ui.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/extract_tm.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/feature_manager.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/figure_context_manager.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/file_dialog_helper.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/find_replace.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/find_replace_qt.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/glossary_manager.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/image_extractor.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/keyboard_shortcuts_widget.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/llm_clients.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/llm_leaderboard.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/llm_superbench_ui.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/local_llm_setup.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/model_update_dialog.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/model_version_checker.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/mqxliff_handler.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/non_translatables_manager.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/pdf_rescue_Qt.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/pdf_rescue_tkinter.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/phrase_docx_handler.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/project_home_panel.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/project_tm.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/prompt_assistant.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/prompt_library.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/prompt_library_migration.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/quick_access_sidebar.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/quicktrans.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/ribbon_widget.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/sdlppx_handler.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/setup_wizard.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/shortcut_manager.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/simple_segmenter.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/spellcheck_manager.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/statuses.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/style_guide_manager.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/superbench_ui.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/superbrowser.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/supercleaner.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/supercleaner_ui.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/superdocs.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/superdocs_viewer_qt.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/superlookup.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/tag_cleaner.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/tag_manager.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/term_extractor.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/termbase_entry_editor.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/termbase_import_export.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/termbase_manager.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/termview_widget.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/theme_manager.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/tm_editor_dialog.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/tm_manager_qt.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/tm_metadata_manager.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/tmx_editor.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/tmx_editor_qt.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/tmx_generator.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/tracked_changes.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/trados_docx_handler.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/translation_memory.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/translation_results_panel.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/translation_services.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/unified_prompt_library.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/unified_prompt_manager_qt.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/voice_commands.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/voice_dictation.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/modules/voice_dictation_lite.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/setup.cfg +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/setup.py +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/supervertaler.egg-info/SOURCES.txt +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/supervertaler.egg-info/dependency_links.txt +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/supervertaler.egg-info/entry_points.txt +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/supervertaler.egg-info/not-zip-safe +0 -0
- {supervertaler-1.9.198 → supervertaler-1.9.202}/supervertaler.egg-info/requires.txt +0 -0
- {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.
|
|
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.
|
|
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
|
|
17812
|
-
"
|
|
17813
|
-
"
|
|
17814
|
-
"
|
|
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
|
-
|
|
20436
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
#
|
|
31150
|
-
|
|
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:
|
|
31178
|
+
# 4. List items: ordered list items (like claims) get paragraph spacing
|
|
31194
31179
|
elif is_list_item or prev_is_list:
|
|
31195
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
39598
|
+
cursor.insertText(display_text)
|
|
39578
39599
|
cursor.endEditBlock()
|
|
39579
39600
|
|
|
39580
|
-
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
43367
|
+
target_widget.setPlainText(display_text)
|
|
43311
43368
|
else:
|
|
43312
|
-
self.table.setItem(row_index, 3, QTableWidgetItem(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
828
|
-
<img src="screenshots/Supervertalerv1.9.
|
|
829
|
-
alt="Supervertaler v1.9.
|
|
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.
|
|
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.
|
|
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.
|
|
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"
|