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