Skip to content

v1.0.1

Choose a tag to compare

@salmanasmat salmanasmat released this 07 Jul 09:44
· 13 commits to main since this release

Release Notes

All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.

[1.0.1] - 2026-07-07

⚡ Improvements

  • Optimized UI Performance: Simplified and optimized raw text and selection extraction in InPageInputTextEdit by utilizing native Qt methods (toRawText and selectedText), completely eliminating Python-level text traversal loops and GUI thread locking on large text documents.
  • Defensive Clipboard Checks: Added robust guards to verify the initialization of a QApplication instance before accessing the Windows clipboard. This prevents application crashes when utility modules are imported or run in non-GUI, test, or headless environments.

🐛 Bug Fixes

  • Heh-Hamza Round-Trip Conversion: Fixed a critical conversion gap where Heh-Hamza (ۂ) characters in Unicode Urdu were left unconverted when writing back to legacy InPage encoding. They now correctly map back to the legacy CP-1252 byte representation (\x04\xa6\x04\xbf).
  • ANSI File Save Integrity: Resolved an issue where saving legacy InPage converted outputs to a file utilized UTF-8 encoding. The exporter now dynamically writes legacy outputs using latin-1 (CP-1252), keeping the resulting files fully compatible with ANSI-based legacy import workflows.
  • Removed Dead Mapping Entry: Cleaned up the ITU_MAP glyph mappings by removing the duplicate and dead entry for the Kashida character (\x04\xa9), which is handled manually by custom rules.

🏗️ Infrastructure & Maintenance

  • Conversion Test Cases: Expanded the automated test suite in tests/test_pairs.py to assert correct Heh-Hamza round-trip conversions.

[1.0.0] - 2026-06-30

🚀 New Features

  • Bidirectional Conversion: Full support for converting between InPage legacy glyph encoding (CP-1252/custom) and standard Unicode Urdu text.
  • Direct Clipboard Integration: Implemented a custom clipboard handler using native Windows ctypes API. This directly grabs CP-1252 raw bytes from the CF_TEXT format, bypassing Windows lossy ANSI/Unicode normalizations that strip key character indicators (like the non-breaking space \xa0 representing Noon).
  • Nastaliq Rendering: Bundled Google's open-source Noto Nastaliq Urdu font and configured automatic Right-to-Left (RTL) reading layout for Unicode text, ensuring consistent rendering on any Windows machine.
  • Optional File Export: Added a direct toggle in the GUI to export converted outputs into a clean, UTF-8 encoded .txt file using native Windows save-file dialogs.

⚡ Improvements

  • Interactive UI Utilities: Added helper buttons for "Paste from Clipboard" and "Clear", along with live input character counts.
  • Intelligent Font Loading: Configured dynamic font loading via PyQt5's QFontDatabase to guarantee proper Nastaliq styling even if the system does not have Urdu fonts pre-installed.
  • Validation Dialogs: Added warning notifications for empty text inputs and direction checking (raising a warning if the conversion output does not appear to contain valid Urdu characters).

🐛 Bug Fixes

  • Non-breaking Space Preservation: Fixed a critical issue where standard text edit paste events would collapse the \xa0 character into a standard space, breaking ligature reconstruction.
  • Error Boundaries: Implemented try-catch safeguards around OS operations (like file system writes) to present formatted error dialogs to users instead of raw tracebacks.

📚 Documentation

  • Architecture & Code Docs: Created CODE_DOCUMENTATION.md detailing the MVC layout, ctypes clipboard calls, and mapping flow.
  • Design Philosophy: Created DESIGN_PHILOSOPHY.md outlining project architecture, decoupling decisions, and technical trade-offs.
  • Developer Guidelines: Created CONTRIBUTING.md to onboard contributors with repository standards and branch setup.

🏗️ Infrastructure & Maintenance

  • Packaging Pipeline: Created InPageConverter.spec for compiling the project into a standalone .exe using PyInstaller.
  • Standard Installer: Created inno_setup.iss to package the compiled executable into a professional Windows Installer with Desktop/Start Menu shortcuts.
  • Automated Tests: Structured automated unit and integration tests under the tests/ directory verifying mapping logic, digit reversal, Hamza correction, and custom clipboard mechanics.