fix(script): keep pending TextDocument baseline reads in sync (#549)

This commit is contained in:
Nigel Ihza Firdausy
2026-10-10 15:49:32 +07:00
parent 813c7c4650
commit 4f6256c486
2 changed files with 49 additions and 2 deletions
+9 -2
View File
@@ -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); },
+40
View File
@@ -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]
])
);
}