feat: ATL durations in brackets, offset and GPU hints; screen for-index, glued strings and onlayer
ATL: `ease(1.0) zoom 1.3`, `ease (0.1)xpos 0.5`, `ease(0.1)rotate 5` and `pause(1.5)` take the duration
in brackets; `offset (x, y)` becomes xoffset/yoffset; lines starting with shader, mesh, u_*, blend or
transform_anchor are skipped as GPU hints. thelewdesthouse drops from about 1400 to 111 rejections.
Screens: `for x index k in seq`, `add"x"` without a space, and `onlayer name` after show/call screen
(the layer is ignored, every screen lives in one layer). Transforms named with a capital letter and
declared in another file are resolved by the prescan, and `__("Name") "text"` is a translatable speaker.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
25bd39dd43
commit
5c1e1aee01
4 files changed
+84
-5
No files matched your search
@@ -194,3 +194,44 @@ def test_at_picks_a_transform_by_condition_and_atl_commas_split_statements():
|
||||
handler = steps[1]["block"]["steps"]
|
||||
assert [s["op"] for s in handler] == ["set", "pause"] and handler[1]["t"] == 0.2
|
||||
assert steps[1]["events"] == ["selected"] and steps[2]["events"] == ["deselected"]
|
||||
|
||||
|
||||
def test_atl_warper_with_duration_in_brackets():
|
||||
data = parse('transform t:\n easein(1.0) zoom 1.3 ypos 1.0\n linear(0.5) xpos 0.2\n')
|
||||
steps = data.atl["t"]["steps"] if "t" in data.atl else data.transforms["t"]
|
||||
assert not data.blockers
|
||||
assert [(s["warp"], s["t"]) for s in steps if s["op"] == "move"] == [("easein", 1.0), ("linear", 0.5)]
|
||||
|
||||
|
||||
def test_atl_warper_brackets_glued_to_the_property():
|
||||
data = parse('transform t:\n ease(0.1)rotate 5\n easein(0.4)xpos 0.3\n')
|
||||
steps = data.atl["t"]["steps"] if "t" in data.atl else data.transforms["t"]
|
||||
assert not data.blockers
|
||||
assert [(s["t"], sorted(s["props"])) for s in steps if s["op"] == "move"] == [(0.1, ["rotate"]), (0.4, ["xpos"])]
|
||||
|
||||
|
||||
def test_atl_bracketed_durations_offset_and_gpu_hints():
|
||||
data = parse('transform t:\n ease (0.1)xpos 0.503\n linear 0.2 offset (3, 4)\n pause (0.8)\n'
|
||||
' shader "x"\n u_width 3.0\n transform_anchor True\n xpos 1.0\n')
|
||||
steps = data.atl["t"]["steps"] if "t" in data.atl else data.transforms["t"]
|
||||
assert not data.blockers
|
||||
moves = [s for s in steps if s["op"] == "move"]
|
||||
assert [m["t"] for m in moves] == [0.1, 0.2]
|
||||
assert moves[0]["props"] == {"xpos": 0.503} and moves[1]["props"] == {"xoffset": 3, "yoffset": 4}
|
||||
assert any(s["op"] == "pause" and s["t"] == 0.8 for s in steps)
|
||||
|
||||
|
||||
def test_screen_for_index_glued_strings_and_onlayer():
|
||||
data = parse('screen s(items):\n for item index item.id in items:\n text"[item]"\n add"cover_0"\n'
|
||||
'label start:\n show screen s(items=[1]) onlayer hud\n call screen s([2]) onlayer overlay\n')
|
||||
audit_ir(data)
|
||||
require_supported_scripts(data)
|
||||
body = data.screens["s"]["body"]
|
||||
assert body[0]["c"] == "for" and body[0]["body"][0]["w"] == "text" and body[1]["w"] == "add"
|
||||
|
||||
|
||||
def test_atl_pause_with_brackets():
|
||||
data = parse('transform t:\n ease(1.0) alpha 0.1\n pause(1.5)\n ease(1.0) alpha 0.8\n')
|
||||
steps = data.atl["t"]["steps"] if "t" in data.atl else data.transforms["t"]
|
||||
assert not data.blockers
|
||||
assert [(s["op"], s["t"]) for s in steps] == [("move", 1.0), ("pause", 1.5), ("move", 1.0)]
|
||||
Reference in new issue
Block a user