17 Commits

Author SHA1 Message Date
wangdl
c09caab0e6 feat: #37 Batch1 — detect_material_type/read_image_meta/read_text_stats/parse_text out-pointer FFI
新增 4 个 _separate 函数绕过 RustBuffer struct-passing:
- ffi_zx_document_ffi_detect_material_type_separate
- ffi_zx_document_ffi_read_image_meta_separate
- ffi_zx_document_ffi_read_text_stats_separate
- ffi_zx_document_ffi_parse_text_separate

提取 write_result_to_out! 宏和 read_str_input helper 减少样板代码。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 12:45:56 +08:00
wangdl
65c9ab8a50 fix: #47 移除所有调试 eprintln! 日志
清理 FFI 调试期间在 lib.rs 和 markdown.rs 中添加的 16 行 eprintln!
调试日志,spam iOS 控制台。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 12:40:48 +08:00
wangdl
bae6ef5726 feat: M3 completion — event buffer, FFI search/anchor, PDF strategy, quality fixes
Rust Core:
- events: global Mutex-buffered event queue (push/export/clear/update_position)
- image_meta: use ImageReader::format() for real decoded format instead of extension
- search: change match_start/match_end usize→u64 for FFI compatibility
- epub/pdf: module-level placeholder comments

FFI (UDL exposed, 12 total functions):
- Added: search_markdown_blocks, search_text_content, create_note_anchor
- Added: push_reading_event, update_reading_position, export_pending_events,
  clear_exported_events

Docs:
- README: synced DocumentBlock model (Table.headers + HorizontalRule),
  simplified dependency recommendations, removed nonexistent doc references
- docs/pdf-strategy.md: PDFKit vs PDFium vs MuPDF evaluation, 5 decisions,
  platform strategy matrix, roadmap

Build:
- .cargo/config.toml: cargo xtask alias
- xtask: CLI implementation (test/build-ios/fixtures commands)
- fixtures: markdown/sample.md (9 block types), text/sample.txt
- XCFramework rebuilt, Swift bindings regenerated (1977 lines)

58 tests pass, zero warnings.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-02 21:23:26 +08:00
wangdl
25ad7490a3 feat: expose parse_text via FFI - returns paragraph blocks from TXT 2026-06-02 19:55:03 +08:00
wangdl
f8c0864b61 feat: expose parse_markdown via FFI - returns [DocumentBlock] with all 8 block types 2026-06-02 19:53:42 +08:00
wangdl
cfbee9ea53 feat: expose 3 FFI functions via UDL - detect_material_type, read_image_meta, read_text_stats 2026-06-02 19:45:54 +08:00
wangdl
9481cc20e9 feat: UniFFI setup - UDL interface, build.rs scaffolding, cargo check passes 2026-05-30 22:11:27 +08:00
wangdl
65bc52bfd7 feat: case-insensitive search for Markdown blocks and TXT text 2026-05-30 21:58:59 +08:00
wangdl
b5f8e273a9 feat: ReadingEvent serde tests + NoteAnchor with from_position constructor and tests 2026-05-30 21:18:30 +08:00
wangdl
b3a7fe0414 test: ReadingPosition serde round-trip tests for all 6 variants 2026-05-30 21:05:34 +08:00
wangdl
8166878bf8 feat: image metadata reading - width, height, format, file_size with fixture test 2026-05-30 20:59:50 +08:00
wangdl
af58a35b0a feat: TXT text reading - paragraph parsing, line/word stats 2026-05-30 20:55:30 +08:00
wangdl
c390718c15 feat: Markdown parsing with comrak - GFM tables, strikethrough, tasklist, all 11 block types 2026-05-30 20:50:54 +08:00
wangdl
43010221ff feat: detect_material_type - file type identification via magic bytes + MIME + extension 2026-05-30 20:34:30 +08:00
wangdl
8042a9d92e feat: core data models - MaterialType, DocumentBlock, ReadingPosition, ReadingEvent, NoteAnchor, SearchResult, DocumentError 2026-05-30 20:22:16 +08:00
wangdl
c8f9d64fd8 fix: add minimal lib.rs declarations to pass cargo check 2026-05-30 18:35:20 +08:00
wangdl
e76f253260 chore: init Rust workspace skeleton with crate structure 2026-05-30 18:33:50 +08:00