ElyPDF: the edit tool checks a page's text blocks in one pass (P-04)
This commit is contained in:
5 files changed
+171
-13
No files matched your search
+1
-1
@@ -36,7 +36,7 @@
|
||||
- [x] P-01 文件系统的 `PermissionDenied` 被拼成不存在的文案键,应用崩溃 — worker 的拒绝改为自有错误类型 Refused;R1 测试不跨平台、不看提示;组件库 f834f55 加 Toaster::shown;R2 PASS
|
||||
- [x] P-02 每次编辑落地清掉全部图块与缩略图,页面空白、刚画的墨迹消失 — 图块随 R2.6;缩略图在编辑后留到重画;R1、R2 测试未证实际绘制;R3 PASS
|
||||
- [x] P-03 “编辑文字和图片”先命中图片对象再命中文字;一点抖动就移动了背景图 — 包住文字块的对象让位于文字,移动须过 3 个窗口像素;R1 漏掉同点的小图;R2 PASS
|
||||
- [ ] P-04 `TEXT_BLOCKS` 对每个文字块重跑一遍整页内容过滤,编辑工具长时间无反应
|
||||
- [x] P-04 `TEXT_BLOCKS` 对每个文字块重跑一遍整页内容过滤,编辑工具长时间无反应 — 整页一遍干跑判定全部文字块(1000 块 1.5 s→0.1 s);R1 转向文字后错位、共用原点只计一块;R2 PASS
|
||||
- [ ] P-05 连续快画或快点被拒:“文档在此间已改动,未执行”
|
||||
- [ ] P-06 默认字体“原字体”在 Type 1/Type 3 字体的文件上失败,只给引擎原话
|
||||
- [ ] P-07 含连字的文字块永远不可编辑
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
FAIL
|
||||
|
||||
crates/ely-pdf-engine/shim/ely_text.c:250 — `at++` 位于 `&&` 右侧,旋转文字让 `upright(block)` 返回 0 后,后续文字块的 `reached` 索引错位,违反 PDF-03 的编辑要求。实测单页依次绘制 18 pt `ROTATED`(矩阵 `0 1 -1 0 50 500`)、位于 `(300,400)` 的 Form XObject 文字 `STAMP`、位于 `(72,200)` 的页面自身横排文字 `OWN`,返回的 editable 为 `[false,true,false]`;界面因此允许选择 STAMP,应用时引擎报 `this text is not in the page's own content`,可正常预览修改的 OWN 则无法选择。改动前返回 `[false,false,true]`,同一探针通过;当前代码重复失败。修复方向:每处理一个文字块都递增索引,使递增独立于横排判定,并加入旋转文字后混排 Form 与页面文字的回归测试。
|
||||
|
||||
crates/ely-pdf-engine/shim/ely_text.c:74 — 页级匹配把一次字形命中只计入首个匹配目标的 owner,随后 `return 1`;不同文字块共享原点和字符时,较早块抢占较晚块的计数,使可编辑文字被标为不可编辑。实测先以 Form XObject 在 `(72,700)` 绘制 36 pt `AX`,再在页面 `(72,300)` 绘制 18 pt `BREAK`,最后在页面 `(72,700)` 绘制 18 pt `AB`;三块均横排,AB 的 A 被计入 AX,最终 AB 的 editable 为 false,界面无法选中编辑,违反 PDF-03。改动前同一文件的 AB 为 true,同一探针通过;当前代码重复失败。修复方向:在一次整页干跑中保留各块独立的匹配语义,对同一字形匹配到的每个块分别计数,每个块每个字形至多计一次,并加入共享原点的重叠块回归测试。
|
||||
@@ -0,0 +1 @@
|
||||
PASS
|
||||
Reference in new issue
Block a user