3 ;; CATEGORY-TABLE GENERATOR
4 ;; ( CATEGORY-TABLE ? GENERATOR ) *
8 ;; '(' 'category' CATEGORY-SPEC + ')'
11 ;; '(' CODE CATEGORY-CODE ')'
13 ;; '(' CODE CHAR-CODE CATEGORY-CODE ')'
16 ;; [ '?A' .. '?Z' '?a' .. '?z' ]
19 ;; '(' 'generator' REGEX-RULE RULE-DEF * ')'
22 ;; '(' RULE-NAME ( REGEXP-RULE | MATCH-RULE | MAP-RULE ) ')'
25 ;; '(' REGEXP RULE-SEQ ')' | RULE-NAME
27 ;; '(' MATCH-IDX RULE-SEQ ')' | RULE-NAME
30 ;; '(' ( REGEXP-RULE | MATCH-RULE | MAP-RULE | PREDEFINED ) ')'
32 ;; PREDEFIND ::= PREDEFIND-SIMLE | PREDEFIND-OTF
34 ;; PREDEFIND-SIMLE ::= '=' | '*' | '<' | '>' | '|'
36 ;; PREDEFIND-OTF ::= 'otf:SCRIPT-TAG[:LANGSYS-TAG]'
38 ;; SCRIPT-TAG is OTF's ScriptTag name (four letters) listed at:
39 ;; <http://www.microsoft.om/typograph/otspec/scripttags.htm>
40 ;; LANGSYS-TAG is OTF's Language System name (four letters) listed at:
41 ;; <http://www.microsoft.om/typograph/otspec/languagetags.htm>
45 ;; '(' ( SEQ-TO-SEQ | RANGE-TO-CODE ) + ')' | RULE-NAME
48 ;; '(' CODE + '-1' ( COMPOSITION-RULE ? CODE ) * ')'
50 ;; '(' '(' CODE CODE ')' COMPOSITION-RULE ? CODE ')'
52 ;; COMPOSITION-RULE ::= 'VHOVH'
53 ;; where V ::= ( 't' | 'c' | 'b' | 'B' )
54 ;; H ::= ( 'l' | 'c' | 'r' )
55 ;; O ::= ( '.' | XOFF | XOFF ? YOFF )
56 ;; XOFF ::= ('+' | '-') DIGITS
57 ;; YOFF ::= ('<' | '>') DIGITS
58 ;; Ex: 'tc+bc', 'Bl-10<20Br'
60 ;; Semantics of predefiend commands:
62 ;; '*': repeat the previous command if the command was successful.
63 ;; '<': start grapheme cluster
64 ;; '>': end grapheme cluster
65 ;; '|': produce a special glyph whose code has category-code ' '.
66 ;; '=': use the first glyph of the current run as is.