FONT-LAYOUT-TABLE ::= '(' CATEGORY-TABLE GENERATOR ( CATEGORY-TABLE ? GENERATOR ) * ')' CATEGORY-TABLE ::= '(' 'category' CATEGORY-SPEC + ')' CATEGORY-SPEC ::= '(' ( CODE | CODE-FROM CODE-TO ) CATEGORY-CODE ')' CATEGORY-CODE ::= [ '?A' | ... | '?Z' | '?a' | ... | '?z' ] GENERATOR ::= '(' 'generator' RULE RULE-DEF * ')' RULE-DEF ::= '(' RULE-NAME RULE ')' RULE ::= REGEXP-RULE | MATCH-RULE | MAP-RULE | PREDEFINED-RULE | OTF-RULE REGEXP-RULE ::= '(' REGEXP RULE * ')' | RULE-NAME MATCH-RULE ::= '(' MATCH-IDX RULE * ')' | RULE-NAME PREDEFINED-RULE ::= '=' | '*' | '<' | '>' | '|' OTF-URLE ::= 'otf:SCRIPT-TAG[:LANGSYS-TAG]' where SCRIPT-TAG is OTF's ScriptTag name (four letters) listed at: LANGSYS-TAG is OTF's Language System name (four letters) listed at: Example: 'otf:deva' MAP-RULE ::= '(' ( SEQ-TO-SEQ | RANGE-TO-CODE ) + ')' | RULE-NAME SEQ-TO-SEQ ::= '(' CODE + '-1' ( COMBINING-SPEC ? CODE ) * ')' RANGE-TO-CODE ::= '(' '(' CODE-FROM CODE-TO ')' COMBINING-SPEC ? CODE ')' COMBINING-SPEC ::= 'VHOVH' where V ::= ( 't' | 'c' | 'b' | 'B' ) H ::= ( 'l' | 'c' | 'r' ) O ::= ( '.' | XOFF | YOFF XOFF ? ) XOFF ::= ('<' | '>') DIGITS YOFF ::= ('+' | '-') DIGITS Example: 'tc+bc', 'Bl-10<20Br' Semantics of PREDEFINED-RULE: '*': repeat the previous command if the command was successful. '<': start grapheme cluster '>': end grapheme cluster '|': produce a special glyph whose code has category-code ' '. '=': use the first glyph of the current run as is.