# Supported Formats ## PreviewMode 每种文件格式对应一个 PreviewMode: | Mode | 含义 | 由谁渲染 | |------|------|---------| | `NativeReader` | 知习内置阅读器 | App 原生渲染 + Rust 提供 blocks | | `PlatformPreview` | 平台系统预览 | iOS QuickLook / Android 系统能力 | | `ExternalOpen` | 外部 App 打开 | 用户选择外部应用 | | `Unsupported` | 暂不支持 | 显示提示 | ## 格式矩阵 ### 第一版(当前优先级) | 格式 | 扩展名 | PreviewMode | Rust 职责 | App 职责 | |------|--------|-------------|----------|---------| | Markdown | `.md` | NativeReader | 解析为 DocumentBlock | 原生渲染 block 列表 | | 纯文本 | `.txt` | NativeReader | 读取内容,分段落/行 | 原生文本渲染 | | PDF | `.pdf` | PlatformPreview | 定义阅读位置模型 | iOS PDFKit / Android 系统 | | PNG | `.png` | NativeReader | metadata(宽高/格式) | 原生图片查看 | | JPEG | `.jpg` `.jpeg` | NativeReader | metadata | 原生图片查看 | | WebP | `.webp` | NativeReader | metadata | 原生图片查看 | | GIF | `.gif` | NativeReader | metadata | 原生图片查看 | | Word | `.doc` `.docx` | PlatformPreview | 不解析 | QuickLook / 系统预览 | | Excel | `.xls` `.xlsx` | PlatformPreview | 不解析 | QuickLook / 系统预览 | | PPT | `.ppt` `.pptx` | ExternalOpen | 不解析 | 外部 App 打开 | ### 后续支持 | 格式 | 目标 PreviewMode | 备注 | |------|-----------------|------| | EPUB | NativeReader | Rust 解析 OPF/spine/nav,App WebView 渲染章节 | | PDF | NativeReader(增强) | 评估 PDFium,支持文本提取和搜索 | ### 明确不做 - OCR:不做图片文字识别 - PDF 标注:不做高亮/划线/批注 - Office 内置高保真预览:不解析 Word/Excel/PPT 排版 - 复杂富文本:不做格式保留 - DRM 电子书:不做 - Kindle 格式:不做 ## 识别策略 ```text 1. magic bytes(文件头,最可靠) 2. MIME type(根据扩展名推测) 3. 文件扩展名(兜底) ``` 使用 `infer` crate 做 magic bytes 检测,`mime_guess` 做 MIME 推测。 ## 未知格式 无法识别的文件返回 `MaterialType::Unknown` + `PreviewMode::Unsupported`。App 侧应显示友好提示,不崩溃。