核心设计
父级:architecture
Lucerna 的承重子系统,每一个都经过对代码的核实(深入阅读,而非泛览)。按其服务对象分组。
阅读本体
- raw-display-cursor——双坐标骨架:每个位置都以相对全书的 raw 偏移量存储,display 偏移量由其重建而来 → 与排版无关的书签/笔记/词汇/卡拉OK。
- dynamic-pagination——基于 DOM 测量的分页,随字体/视口变化重新排版;仅重新分页的快速路径;
LayoutKey+PAGINATION_VERSION。 - all-forms-underline——标记一个变形,点亮该词元的所有形式;省音分词器必须在下划线/词性标注/LLM 三者之间保持一致。
- vocabulary-loop——点按 → 三级查词 → 动词信息增强 → 保存 → 全部形式 → 服务端持有的 SM-2。
- full-text-search——每本书一个句子粒度的 FlexSearch 索引,持久化到磁盘(恢复还是重建 + 版本管理)。
- tts-audiobook——桌面端本地 Piper/sherpa-onnx 有声书 + 由 PCM 能量计时的逐词卡拉OK,以 raw 偏移量为锚点。
语言学核心
- linguistic-two-engines——两套并行引擎:TS/LLM 优先(适用任意语言)对比 Python/spaCy 依存句法分析(确定性,德语+英语)。
- upload-ingestion——客户端解析 EPUB/PDF/文本(扫描件走服务端 OCR)→
contentHash,一切数据锚定其上的连接键。
架构支柱
- cross-platform-seams——一个与框架无关的核心,通过三个 registry 接缝 + 一个惰性绑定代理同时驱动 web 与桌面端;HTTP-delegate 与 Hybrid-wrapper 两类仓库。
- offline-first-outbox——桌面端离线优先:事务性 Outbox(同事务原子性)、以云端为权威的清空重填、IPC tx-id 桥接、临时 id 对账。
- backends-three-services——auth / mainbackend / nlp-api 三方拆分(为什么是三个、各自归属什么;SRS 与 i18n 都在这里)。