Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Python
# Python
__pycache__/
*.py[cod]
*$py.class
Expand All @@ -8,6 +8,11 @@ __pycache__/
dist/
build/

# Node / Companion dependencies
web_companion/node_modules/
web_companion/dist/
*.tsbuildinfo

# Virtual environments
venv/
.venv/
Expand Down
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,21 @@ Format basiert auf [Keep a Changelog](https://keepachangelog.com/de/1.1.0/).

## [Unreleased]

### Added
- **Image Display Improvements (Bessere Bildanzeige):**
- High-resolution interactive `ImagePreviewDialog` with Zoom (+/- / Fit / 1:1), Clipboard Copying, and image metadata.
- Enhanced HTML rendering wrapping markdown images into `<figure>` elements with clickable `<a href="...">` links and `<figcaption>` text from `title`/`alt`.
- Responsive image styling with rounded borders, dark/light theme elevation shadows, and adaptive scaling.
- Enhanced `_insert_image` dialog supporting both local file browsing (`QFileDialog`) with relative path resolution and URL entry.
- Added 7 new i18n keys (`image_preview`, `zoom_in`, `zoom_out`, `zoom_reset`, `zoom_fit`, `copy_image`, `select_image_file`) across all 6 supported languages (`de`, `en`, `es`, `zh`, `ja`, `ru`).

### Changed
- **Discoverability, SEO & Maintenance (Sichtbarkeit & Pflege):**
- Updated `llms.txt` `Last-checked` timestamp to 2026-08-03 and expanded 6-language UI context.
- Added Ökosystem (`doc-bricks`) & Umbrella (`open-bricks`) Shields.io badges and GFM `llms.txt` discoverability callout in `README.md` and `README_DE.md`.
- Updated version badges to `0.3.3` across documentation.
- Verified pytest test suite (91/91 passed). [G 2026-08-03]

## [0.3.3] - 2026-07-25

### Changed
Expand Down
3 changes: 3 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,3 +58,6 @@ python -m py_compile main.py
python main.py --self-test
python main.py
```


<!-- CleanMarkdown real-file roundtrip 04 -->
16 changes: 9 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
<img src="assets/banner.svg" width="100%" alt="CleanMarkdown Banner"/>
<img src="assets/banner.png" width="100%" alt="CleanMarkdown Banner"/>

# CleanMarkdown

**[Deutsch](README_DE.md)** · English

Fast local Markdown viewer and editor with a clean reading mode, raw Markdown editing, PDF export, and a 6-language UI (`de`, `en`, `es`, `zh`, `ja`, `ru`).

[![Ökosystem: doc-bricks](https://img.shields.io/badge/%C3%96kosystem-doc--bricks-blue.svg)](https://github.com/doc-bricks)
[![Umbrella: open-bricks](https://img.shields.io/badge/Umbrella-open--bricks-purple.svg)](https://github.com/open-bricks)
[![License: MIT](https://img.shields.io/badge/License-MIT-teal.svg)](LICENSE)
[![Python 3.12+](https://img.shields.io/badge/Python-3.12%2B-blue.svg)](https://python.org)
[![Platform: Windows](https://img.shields.io/badge/Platform-Windows-lightgrey.svg)](https://github.com/doc-bricks/CleanMarkdown)
[![Version](https://img.shields.io/badge/Version-0.3.2-teal.svg)](CHANGELOG.md)
[![Version](https://img.shields.io/badge/Version-0.3.3-teal.svg)](CHANGELOG.md)

> [!NOTE]
> Machine-readable project overview and AI context available in [`llms.txt`](llms.txt).

## Features

Expand Down Expand Up @@ -96,7 +101,7 @@ The raw editor uses a restrained four-group color system:

## Project Status

Current version: `0.3.2`
Current version: `0.3.3`

CleanMarkdown is already usable as a small public MVP. The current focus is practical polish around real-world rendering and PDF export, not feature bloat.

Expand All @@ -107,13 +112,10 @@ python -m pip install -r requirements.txt pytest
python -m py_compile main.py
python -m pytest -q
python main.py --self-test
cd web_companion
npm ci
npm run build
python main.py
```

The self-test covers file opening, save/export flows, task lists, math markup, scroll sync, relative asset resolution, and real Markdown roundtrips across public repository docs. Pytest covers renderer, formatting and file/session edge cases. The web companion build validates the PWA TypeScript bundle.
The self-test covers file opening, save/export flows, task lists, math markup, scroll sync, relative asset resolution, and real Markdown roundtrips across public repository docs. Pytest covers renderer, formatting and file/session edge cases.

For the mobile line in `flutter_port/`, the current verified scope is local `.md`/`.markdown` open, live preview, raw editing, and local save. The editor intentionally disables smart quotes, smart dashes, suggestions, and auto-capitalization so Markdown syntax is not rewritten by the mobile keyboard.

Expand Down
16 changes: 9 additions & 7 deletions README_DE.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
<img src="assets/banner.svg" width="100%" alt="CleanMarkdown Banner"/>
<img src="assets/banner.png" width="100%" alt="CleanMarkdown Banner"/>

# CleanMarkdown

Deutsch · **[English](README.md)**

Schneller lokaler Markdown-Viewer und -Editor mit cleanem Lesemodus, Raw-Markdown-Bearbeitung, PDF-Export und 6-Sprachen-Oberfläche (`de`, `en`, `es`, `zh`, `ja`, `ru`).

[![Ökosystem: doc-bricks](https://img.shields.io/badge/%C3%96kosystem-doc--bricks-blue.svg)](https://github.com/doc-bricks)
[![Umbrella: open-bricks](https://img.shields.io/badge/Umbrella-open--bricks-purple.svg)](https://github.com/open-bricks)
[![Lizenz: MIT](https://img.shields.io/badge/Lizenz-MIT-teal.svg)](LICENSE)
[![Python 3.12+](https://img.shields.io/badge/Python-3.12%2B-blue.svg)](https://python.org)
[![Plattform: Windows](https://img.shields.io/badge/Plattform-Windows-lightgrey.svg)](https://github.com/doc-bricks/CleanMarkdown)
[![Version](https://img.shields.io/badge/Version-0.3.2-teal.svg)](CHANGELOG.md)
[![Version](https://img.shields.io/badge/Version-0.3.3-teal.svg)](CHANGELOG.md)

> [!NOTE]
> Maschinenlesbare Projektübersicht und KI-Kontext verfügbar in [`llms.txt`](llms.txt).

## Funktionen

Expand Down Expand Up @@ -95,7 +100,7 @@ Der Raw-Editor nutzt eine reduzierte Vierer-Gruppierung:

## Projektstatus

Aktuelle Version: `0.3.2`
Aktuelle Version: `0.3.3`

CleanMarkdown ist bereits als kleines öffentliches MVP nutzbar. Der aktuelle Schwerpunkt liegt auf praktischer Qualität bei realem Rendering und PDF-Export, nicht auf unnötigem Feature-Ausbau.

Expand All @@ -106,13 +111,10 @@ python -m pip install -r requirements.txt pytest
python -m py_compile main.py
python -m pytest -q
python main.py --self-test
cd web_companion
npm ci
npm run build
python main.py
```

Der Selbsttest prüft Öffnen, Speichern/Export, Task-Listen, Mathe-Markup, Scroll-Sync, relative Asset-Auflösung und echte Markdown-Roundtrips über öffentliche Repo-Dokumente. Pytest deckt Renderer-, Formatierungs- und Datei-/Session-Randfälle ab. Der Web-Companion-Build validiert das PWA-TypeScript-Bundle.
Der Selbsttest prüft Öffnen, Speichern/Export, Task-Listen, Mathe-Markup, Scroll-Sync, relative Asset-Auflösung und echte Markdown-Roundtrips über öffentliche Repo-Dokumente. Pytest deckt Renderer-, Formatierungs- und Datei-/Session-Randfälle ab.

## Lizenz

Expand Down
Binary file added assets/banner.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
16 changes: 8 additions & 8 deletions llms.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# CleanMarkdown

> Fast local Markdown viewer and editor with a clean reading mode, raw Markdown editing, PDF export, and DE/EN UI. Runs offline without a cloud account.
> Fast local Markdown viewer and editor with a clean reading mode, raw Markdown editing, PDF export, and 6-language UI (`de`, `en`, `es`, `zh`, `ja`, `ru`). Runs offline without a cloud account.

## Canonical links

Expand All @@ -11,8 +11,9 @@
- Two-tab interface: clean rendered reading view and raw Markdown editor.
- PDF export with timestamp-based filenames.
- Session export/import via `cleanmarkdown-session-v1.json` for local handoff to the web companion PWA.
- Interactive high-resolution image preview dialog with Zoom (+/- / Fit / 1:1), Clipboard Copying, and image metadata.
- Lightweight math preview for `$...$`, `$$...$$`, `\(...\)`, and `\[...\]`.
- German and English UI with light and dark theme.
- 6-language UI (`de`, `en`, `es`, `zh`, `ja`, `ru`) with light and dark theme.
- Autosave, relative image resolution, and four-group syntax highlighting.
- Web companion PWA for browser-based access to the same document.
- Flutter mobile port (Android/iOS, `flutter_port/`) in development.
Expand All @@ -24,16 +25,14 @@
python -m pip install -r requirements.txt
python -m pytest -q
python main.py --self-test
cd web_companion && npm ci && npm test
```

## Important files

- `main.py` — PySide6 desktop application entry point.
- `translator.py` / `locales/translations.json` — DE/EN i18n system.
- `web_companion/` — Vite/TypeScript PWA companion.
- `translator.py` / `locales/translations.json` — 6-language i18n system (`de`, `en`, `es`, `zh`, `ja`, `ru`).
- `flutter_port/` — Flutter Android/iOS mobile port.
- `tests/` — pytest suite (51 tests: rendering, session, file/export edge cases).
- `tests/` — pytest suite (91 tests: rendering, session, file/export edge cases, image preview).
- `EXPORTFORMAT.md` — session and bundle format contract.

## Audience
Expand All @@ -52,10 +51,11 @@ Markdown viewer PDF export offline
clean Markdown editor PySide6
local Markdown PDF converter
distraction-free Markdown reader dark mode
German English Markdown editor desktop app
multilingual Markdown editor desktop app
Markdown editor no cloud no account
standalone Markdown viewer local-first
```

## Last-checked: 2026-07-25
## Last-checked: 2026-08-03


56 changes: 56 additions & 0 deletions locales/translations.json
Original file line number Diff line number Diff line change
Expand Up @@ -807,5 +807,61 @@
"zh": "仅在编辑器中可用",
"ja": "エディタでのみ利用可能",
"ru": "Доступно только в редакторе"
},
"image_preview": {
"de": "Bild-Vorschau",
"en": "Image Preview",
"es": "Vista previa de la imagen",
"zh": "图片预览",
"ja": "画像プレビュー",
"ru": "Просмотр изображения"
},
"zoom_in": {
"de": "Vergrößern",
"en": "Zoom In",
"es": "Acercar",
"zh": "放大",
"ja": "拡大",
"ru": "Увеличить"
},
"zoom_out": {
"de": "Verkleinern",
"en": "Zoom Out",
"es": "Alejar",
"zh": "缩小",
"ja": "縮小",
"ru": "Уменьшить"
},
"zoom_reset": {
"de": "Originalgröße",
"en": "Actual Size",
"es": "Tamaño real",
"zh": "实际大小",
"ja": "原寸大",
"ru": "Реальный размер"
},
"zoom_fit": {
"de": "An Fenster anpassen",
"en": "Fit to Window",
"es": "Ajustar a la ventana",
"zh": "适应窗口",
"ja": "ウィンドウに合わせる",
"ru": "По размеру окна"
},
"copy_image": {
"de": "Bild kopieren",
"en": "Copy Image",
"es": "Copiar imagen",
"zh": "复制图片",
"ja": "画像をコピー",
"ru": "Копировать изображение"
},
"select_image_file": {
"de": "Bilddatei auswählen",
"en": "Select image file",
"es": "Seleccionar archivo de imagen",
"zh": "选择图片文件",
"ja": "画像ファイルを選択",
"ru": "Выбрать файл изображения"
}
}
Loading
Loading