diff --git a/HTML_GENERATION.md b/HTML_GENERATION.md new file mode 100644 index 0000000..a5d538e --- /dev/null +++ b/HTML_GENERATION.md @@ -0,0 +1,210 @@ +# HTML Generation for dreader + +This document describes how to use the HTML generation features in dreader to create UI for e-reader applications. + +## Overview + +The dreader library now includes HTML generation capabilities that allow you to create complete user interfaces programmatically. This is designed to work with a Hardware Abstraction Layer (HAL) that handles the actual display rendering and input processing. + +## Architecture + +``` +┌─────────────────────────────────────┐ +│ dreader Library │ +│ ├─ EbookReader (book rendering) │ +│ ├─ html_generator (UI generation) │ +│ └─ book_utils (scanning/metadata) │ +└─────────────────────────────────────┘ + ↓ HTML strings +┌─────────────────────────────────────┐ +│ HAL (Hardware Abstraction Layer) │ +│ - Receives HTML strings │ +│ - Renders to display │ +│ - Captures touch/button input │ +│ - Calls back to dreader │ +└─────────────────────────────────────┘ +``` + +## Page and Overlay Concept + +The UI uses a **page/overlay** architecture: + +- **Page (background)**: The main book content rendered as an image +- **Overlay (foreground)**: UI elements like settings, table of contents, bookmarks, etc. + +## Available Modules + +### 1. html_generator + +Functions for generating HTML strings: + +- `generate_library_html(books)` - Grid view of all books with covers +- `generate_reader_html(title, author, page_data)` - Book reading view +- `generate_settings_overlay()` - Settings panel +- `generate_toc_overlay(chapters)` - Table of contents +- `generate_bookmarks_overlay(bookmarks)` - Bookmarks list + +### 2. book_utils + +Utilities for managing books: + +- `scan_book_directory(path)` - Scan directory for EPUB files +- `extract_book_metadata(epub_path)` - Get title, author, cover +- `get_chapter_list(reader)` - Format chapters for TOC +- `get_bookmark_list(reader)` - Format bookmarks +- `page_image_to_base64(image)` - Convert page image to base64 + +## Usage Example + +```python +from pathlib import Path +from dreader import create_ebook_reader +from dreader.html_generator import ( + generate_library_html, + generate_reader_html, + generate_toc_overlay +) +from dreader.book_utils import ( + scan_book_directory, + get_chapter_list, + page_image_to_base64 +) + +# 1. Show library view +books_dir = Path('books') +books = scan_book_directory(books_dir) +library_html = generate_library_html(books) +# Pass library_html to HAL for rendering + +# 2. User selects a book +selected_book = books[0] +reader = create_ebook_reader(page_size=(800, 1000)) +reader.load_epub(selected_book['path']) + +# 3. Show reader view +page_image = reader.get_current_page() +page_base64 = page_image_to_base64(page_image) +reader_html = generate_reader_html( + book_title=reader.book_title, + book_author=reader.book_author, + page_image_data=page_base64 +) +# Pass reader_html to HAL for rendering + +# 4. User presses "Contents" button - show TOC overlay +chapters = get_chapter_list(reader) +toc_html = generate_toc_overlay(chapters) +# Pass toc_html to HAL for rendering on top of page +``` + +## HTML Structure + +### Library View + +The library uses an HTML table for grid layout: + +```html +
+
|
+
+
{len(books)} books
+