Merge pull request #852 from Ni-zav/fix/815-text-path-matchnames-20261011

fix(script): expose After Effects text Path Options matchNames

# Conflicts:
#	crates/script/src/tests.rs
This commit is contained in:
Brandon Thomas
2026-10-12 03:23:27 -04:00
2 changed files with 39 additions and 0 deletions
+12
View File
@@ -61,6 +61,17 @@ const TEXT: &[(&str, &str)] = &[
("animators", "ADBE Text Animators"),
];
// Match names of the six properties below Text ▸ Path Options, as named by
// After Effects' scripting API (rather than EffectCraft's internal ids).
const TEXT_PATH_OPTIONS: &[(&str, &str)] = &[
("path", "ADBE Text Path"),
("reversePath", "ADBE Text Reverse Path"),
("perpendicular", "ADBE Text Perpendicular To Path"),
("forceAlignment", "ADBE Text Force Align Path"),
("firstMargin", "ADBE Text First Margin"),
("lastMargin", "ADBE Text Last Margin"),
];
const TEXT_ANIMATOR: &[(&str, &str)] = &[("selectors", "ADBE Text Selectors"), ("properties", "ADBE Text Animator Properties")];
const CAMERA: &[(&str, &str)] = &[
@@ -411,6 +422,7 @@ pub fn node(chain: &[&Node]) -> String {
}
}
"text" if chain.len() == 2 => find(TEXT, id).map(str::to_string).unwrap_or_else(own),
"text" if pid == "pathOptions" => find(TEXT_PATH_OPTIONS, id).map(str::to_string).unwrap_or_else(own),
"text" if pid == "animators" => "ADBE Text Animator".into(),
"text" if grand.map(|g| g.match_id()) == Some("animators") => find(TEXT_ANIMATOR, id).map(str::to_string).unwrap_or_else(own),
"cameraOptions" => find(CAMERA, id).map(str::to_string).unwrap_or_else(own),
+27
View File
@@ -963,3 +963,30 @@ fn script_item_and_layer_identity_survives_repeated_access() {
);
assert_eq!(o.result, json!([true, true]));
}
#[test]
fn script_text_path_options_expose_after_effects_match_names() {
let mut s = session();
let r = ok(
&mut s,
r#"
var c = app.project.items.addComp("Text Path", 160, 90, 1, 2, 24);
var t = c.layers.addText("On a path");
var options = t.property("ADBE Text Properties").property("ADBE Text Path Options");
var names = [];
for (var i = 1; i <= options.numProperties; i++)
names.push(options.property(i).matchName);
[names, options.property("ADBE Text Path").matchName,
options.property("ADBE Text Perpendicular To Path").matchName]
"#,
);
assert_eq!(
r.result,
json!([
["ADBE Text Path", "ADBE Text Reverse Path", "ADBE Text Perpendicular To Path",
"ADBE Text Force Align Path", "ADBE Text First Margin", "ADBE Text Last Margin"],
"ADBE Text Path",
"ADBE Text Perpendicular To Path"
])
);
}