7.4.Name resolution (Since 1.1.0)
A gloss token's name (after removing a trailing ! and any (args)) resolves against
the lexicon, case-insensitively:
- Exact match. If exactly one entry has that name, it is used. A draft entry
resolves when it is the only match. If more than one entry has that name (a concrete
entry and a draft included), the script is in error (
ambiguous gloss name). - Explicit variation
NAME#var. If no entry is namedNAME#varexactly, the token falls back to the entry namedNAME(the same exact-match rule applies), never to a sibling variation. If neither exists, the name is unknown. - Bare variation family. A name without
#that matches no entry exactly, but heads entries namedNAME#…, picks one member uniformly at random, choosing among concrete (non-draft) members when any exist, otherwise among all members. The pick is re-rolled on every compose, and a producer serializing the script MUST keep the bareNAME. - Otherwise the name is unknown (
unknown gloss), which is an error.
Expression names (@name) resolve the same way, without variations: one match is used;
none is unknown expression; more than one is ambiguous expression name.
Aliases and composed glosses are lexicon-level entries, defined here only for resolution:
- An alias name resolves to its main gloss (one hop) and uses that gloss's keyframes. A source dependency is recorded against the main gloss.
- A composed gloss stores a script and the keyframes composed from it. In a sequence
it is placed like any gloss. The script of a composed gloss MUST NOT reference another
composed gloss (no chains, so no cycles) and MUST NOT use a bare variation family
(it must be stable); each is an error. When a composed gloss is composed, its keys are
re-based so the first keyframe is frame 0 (no lead-in or tail-out), expression markers
are baked into the pose keyframes of the affect groups
h b f mas instead of being kept as references, andNAME!fills from the registry defaults. A script that places nothing is an error.