From 4f6256c486aa0484134e3e3ddf14b0a0281b060a Mon Sep 17 00:00:00 2001 From: Nigel Ihza Firdausy <106657905+Ni-zav@users.noreply.github.com> Date: Sat, 10 Oct 2026 15:49:32 +0700 Subject: [PATCH] fix(script): keep pending TextDocument baseline reads in sync (#549) --- crates/script/src/prelude.js | 11 ++++++++-- crates/script/src/tests.rs | 40 ++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/crates/script/src/prelude.js b/crates/script/src/prelude.js index f52765e7..76155b82 100644 --- a/crates/script/src/prelude.js +++ b/crates/script/src/prelude.js @@ -480,9 +480,16 @@ TextDocument.prototype = { get smallCaps() { return this.__style("smallCaps", false); }, set smallCaps(v) { this.__set("smallCaps", !!v); }, get superscript() { return this.__style("baseline", "normal") === "superscript"; }, - set superscript(v) { this.__set("superscript", !!v); }, + set superscript(v) { + // The pending document reads the same canonical baseline that setValue will apply. + if (v) this.__set("baseline", "superscript"); + else if (this.superscript) this.__set("baseline", "normal"); + }, get subscript() { return this.__style("baseline", "normal") === "subscript"; }, - set subscript(v) { this.__set("subscript", !!v); }, + set subscript(v) { + if (v) this.__set("baseline", "subscript"); + else if (this.subscript) this.__set("baseline", "normal"); + }, get tsume() { return this.__style("tsume", 0); }, set tsume(v) { this.__set("tsume", __num(v)); }, get boxText() { return !!(this.__base && this.__base.box_size); }, diff --git a/crates/script/src/tests.rs b/crates/script/src/tests.rs index 10deb79b..60f59ca3 100644 --- a/crates/script/src/tests.rs +++ b/crates/script/src/tests.rs @@ -524,3 +524,43 @@ fn comp_preserves_nested_frame_rate_and_resolution() { let (_, c) = comp_named(&s, "Nested"); assert!(c.preserve_frame_rate && c.preserve_resolution); } + +#[test] +fn text_document_baseline_flags_reflect_pending_edits_and_applied_value() { + let mut s = session(); + let o = ok( + &mut s, + r#" + var comp = app.project.items.addComp("Baseline", 64, 64, 1, 1, 24); + var src = comp.layers.addText("AB").text.sourceText; + var doc = src.value; + doc.superscript = true; + var pendingSuper = [doc.superscript, doc.subscript]; + doc.text = doc.superscript ? "super" : "normal"; + src.setValue(doc); + var appliedSuper = [src.value.text, src.value.superscript, src.value.subscript]; + doc = src.value; + doc.subscript = true; + var pendingSub = [doc.superscript, doc.subscript]; + src.setValue(doc); + var appliedSub = [src.value.superscript, src.value.subscript]; + doc = src.value; + doc.subscript = false; + var cleared = [doc.superscript, doc.subscript]; + src.setValue(doc); + var appliedClear = [src.value.superscript, src.value.subscript]; + doc = src.value; + doc.superscript = true; + doc.superscript = false; + var repeatClear = [doc.superscript, doc.subscript]; + [pendingSuper, appliedSuper, pendingSub, appliedSub, cleared, appliedClear, repeatClear]; + "#, + ); + assert_eq!( + o.result, + json!([ + [true, false], ["super", true, false], [false, true], [false, true], + [false, false], [false, false], [false, false] + ]) + ); +}