# EPUB 3.3 Compliance Feature Prioritization
**Date:** 2026-01-23 19:46:02
**Based on:** EPUB 3.3 Compliance Audit
---
## Overview
This document reviews the audit findings from the CrossPoint Reader EPUB 3.3 compliance audit and prioritizes features for implementation based on:
1. **User Impact** - How much the feature improves the reading experience
2. **Implementation Complexity** - Level of effort required
3. **Existing Infrastructure** - Available code that can be leveraged
4. **Hardware Feasibility** - Whether the e-ink display can support it
---
## Priority 1: High Impact, Infrastructure Ready
These features have existing code that can be leveraged and provide significant user value.
### 1.1 Inline Image Rendering
**Current State:** Images show placeholder text `[Image: alt_text]`
**Infrastructure Available:**
- `Bitmap` class (`lib/GfxRenderer/Bitmap.h`) - BMP parsing with grayscale conversion and dithering
- `JpegToBmpConverter` (`lib/JpegToBmpConverter/`) - JPEG to BMP conversion with prescaling
- `GfxRenderer::drawBitmap()` - Already renders bitmaps to e-ink display
- `ZipFile` - Can extract images from EPUB archive
**Implementation Approach:**
1. Extend `ChapterHtmlSlimParser` to extract image `src` attributes
2. Create `PageImage` element (alongside existing `PageLine`)
3. Extract and cache images from EPUB ZIP to SD card as BMP
4. Integrate image blocks into page layout calculations
5. Render images inline with text during page display
**Complexity:** Medium
**User Impact:** High - Many EPUBs have important diagrams, illustrations, and decorative images
**Supported Formats:**
- JPEG (via `picojpeg`) - Most common in EPUBs
- BMP (native support)
- PNG - **Not currently supported** (would need `pngle` or similar library)
---
### 1.2 List Markers (Bullets and Numbers)
**Current State:** List items render without visual markers; `
` tags (line 248 adds bullet)
- Font system supports Unicode characters
**Implementation Approach:**
1. Track list type (`` vs `
`) in parser state
2. For ``: maintain counter, render as "1.", "2.", etc.
3. For `
`: use bullet character (already implemented: `\xe2\x80\xa2`)
4. Apply text indentation for list item content
**Current Code (already adds bullet):**
```cpp
if (strcmp(name, "li") == 0) {
self->currentTextBlock->addWord("\xe2\x80\xa2", EpdFontFamily::REGULAR);
}
```
**Complexity:** Low
**User Impact:** Medium - Improves readability of enumerated content
---
### 1.3 Nested List Indentation
**Current State:** Nested lists are flattened to same indentation level
**Implementation Approach:**
1. Track nesting depth in parser (`listDepth` counter)
2. Apply progressive `text-indent` based on depth (e.g., 20px per level)
3. Store depth in `BlockStyle` for rendering
**Complexity:** Low
**User Impact:** Medium - Important for technical documentation and outlines
---
## Priority 2: Medium Impact, Moderate Complexity
### 2.1 Basic Table Rendering
**Current State:** Tables show `[Table omitted]` placeholder
**Implementation Approach:**
1. Parse table structure (`
`, `
`, `
`, `
`)
2. Calculate column widths based on content or proportional division
3. Render as text rows with column separators (e.g., `|` character)
4. Apply header styling (bold) for `