7.6.Basic constructs (Since 1.1.0)
7.6.1.Sequence A | B
Items placed in order on one timeline, separated by automatic gaps (§7.5).
7.6.2.Gloss NAME, NAME(speed), NAME(speed,label)
Places the resolved gloss (§7.4). speed MUST be a number > 0 (default 1); speed 2
plays in half the native length. label is an optional display caption for the placed
item; it does not affect P and MUST NOT contain ; (an error) or any other reserved
separator.
7.6.3.Pause $pause, $pause(N)
Holds the neutral pose for N frames, rounded. N MUST be ≥ 1; a bare $pause holds
15. A pause is a timed item: it has automatic gaps on both sides and carries no
keyframes.
7.6.4.Shift $shift(x,y,z,twist), $reset
A stateful marker that offsets every following gloss until the next $shift or $reset
(or the end of a $spell block, §7.6.6). Every axis is optional and defaults to 0;
a bare $shift (all zero) is the same as $reset. For each keyframe the gloss itself
authored:
a_hand_x_l += x,a_hand_x_r −= x(x is mirrored, so a positive x moves both hands toward the same body side);a_hand_y_{l,r} += y,a_hand_z_{l,r} += z;b_twist += twist;
each result clamped to [−1, 1]. Dimensions a gloss does not author are not created. A
fixed_position gloss is not shifted. The offset is applied to the placed keyframes;
P's definitions are unchanged.
7.6.5.Group [A | B](speed,gap,label)
Members placed as one unit, connected at a fixed gap instead of the automatic gap.
speed MUST be > 0 (default 1) and applies to members whose own speed is 1; a
member's own speed wins. gap MUST be ≥ 0 (default 3) and is rounded; the next
member starts frames after the previous member's last frame. Members are
glosses or $spell runs; a $spell member is expanded into its letters with the shift
ladder of §7.6.6 baked into them, without changing the shift state outside the group. Groups MUST NOT nest. An empty group, or any other member kind,
is an error. The group is one unit for captions (label, or the member names).
7.6.6.Spelling run $spell(x,y,z,twist,label){A | B | …}
A fingerspelling run with its own shift ladder. The shift defaults to (0.1, 0, 0, 0).
Members are glosses or [ ] groups; a group counts as one letter. For letter i of
N (0-based), the active shift is the start shift scaled by : the
first letter is at the full shift and the last at zero. A single letter keeps the full
shift. After the block, the shift state is zero (an earlier $shift is not restored).
With a label, the run is one unit for captions. An empty block is an error.
7.6.7.Expressions @name(alpha,rampIn,rampOut), @none, @break
@name opens an expression range on the first free of 3 reference lanes, starting at
the start of the next timed item. alpha is the peak gain and MUST satisfy
(default 1). rampIn/rampOut are frames ≥ 0, rounded; when omitted,
the consumer's expression ramp applies (6 frames unless configured). A fourth
concurrent expression is an error. @break closes the most recently opened range and
@none closes all open ranges, at the start of the next timed item. A range left open
ends at the end of the last item it covers (not at the tail-out). A range that
covers no frames is dropped. A lane freed and reopened at the same frame starts one frame
later. In a sequence the ranges are references: the expression's deltas are applied
at decode as over h b f m (§3.3) and are never
written into the pose keyframes. (A composed gloss bakes them instead, §7.4.)