[NoBinding, gram_keyword s]
| `Number s -> [NoBinding, gram_number s]
and aux_layout = function
- | Ast.Sub (p1, p2) -> aux p1 @ [NoBinding, gram_symbol "\\sub"] @ aux p2
- | Ast.Sup (p1, p2) -> aux p1 @ [NoBinding, gram_symbol "\\sup"] @ aux p2
- | Ast.Below (p1, p2) -> aux p1 @ [NoBinding, gram_symbol "\\below"] @ aux p2
- | Ast.Above (p1, p2) -> aux p1 @ [NoBinding, gram_symbol "\\above"] @ aux p2
- | Ast.Frac (p1, p2) -> aux p1 @ [NoBinding, gram_symbol "\\frac"] @ aux p2
- | Ast.InfRule (p1, p2, p3) -> [NoBinding, gram_symbol "\\infrule"] @ aux p1 @ aux p2 @ aux p3
- | Ast.Atop (p1, p2) -> aux p1 @ [NoBinding, gram_symbol "\\atop"] @ aux p2
- | Ast.Over (p1, p2) -> aux p1 @ [NoBinding, gram_symbol "\\over"] @ aux p2
+ | Ast.Sub (p1, p2) -> aux p1 @ [NoBinding, gram_symbol "\\sub "] @ aux p2
+ | Ast.Sup (p1, p2) -> aux p1 @ [NoBinding, gram_symbol "\\sup "] @ aux p2
+ | Ast.Below (p1, p2) -> aux p1 @ [NoBinding, gram_symbol "\\below "] @ aux p2
+ | Ast.Above (p1, p2) -> aux p1 @ [NoBinding, gram_symbol "\\above "] @ aux p2
+ | Ast.Frac (p1, p2) -> aux p1 @ [NoBinding, gram_symbol "\\frac "] @ aux p2
+ | Ast.InfRule (p1, p2, p3) -> [NoBinding, gram_symbol "\\infrule "] @ aux p1 @ aux p2 @ aux p3
+ | Ast.Atop (p1, p2) -> aux p1 @ [NoBinding, gram_symbol "\\atop "] @ aux p2
+ | Ast.Over (p1, p2) -> aux p1 @ [NoBinding, gram_symbol "\\over "] @ aux p2
| Ast.Root (p1, p2) ->
- [NoBinding, gram_symbol "\\root"] @ aux p2
- @ [NoBinding, gram_symbol "\\of"] @ aux p1
- | Ast.Sqrt p -> [NoBinding, gram_symbol "\\sqrt"] @ aux p
+ [NoBinding, gram_symbol "\\root "] @ aux p2
+ @ [NoBinding, gram_symbol "\\of "] @ aux p1
+ | Ast.Sqrt p -> [NoBinding, gram_symbol "\\sqrt "] @ aux p
| Ast.Break -> []
| Ast.Box (_, pl) -> List.flatten (List.map aux pl)
| Ast.Group pl -> List.flatten (List.map aux pl)
v = [ PERCENTAGE ] -> id, v]];
l1_simple_pattern:
[ "layout" LEFTA
- [ p1 = SELF; SYMBOL "\\sub"; p2 = SELF ->
+ [ p1 = SELF; SYMBOL "\\sub "; p2 = SELF ->
return_term_of_level loc
(fun l -> Ast.Layout (Ast.Sub (p1 l, p2 l)))
- | p1 = SELF; SYMBOL "\\sup"; p2 = SELF ->
+ | p1 = SELF; SYMBOL "\\sup "; p2 = SELF ->
return_term_of_level loc
(fun l -> Ast.Layout (Ast.Sup (p1 l, p2 l)))
- | p1 = SELF; SYMBOL "\\below"; p2 = SELF ->
+ | p1 = SELF; SYMBOL "\\below "; p2 = SELF ->
return_term_of_level loc
(fun l -> Ast.Layout (Ast.Below (p1 l, p2 l)))
- | p1 = SELF; SYMBOL "\\above"; p2 = SELF ->
+ | p1 = SELF; SYMBOL "\\above "; p2 = SELF ->
return_term_of_level loc
(fun l -> Ast.Layout (Ast.Above (p1 l, p2 l)))
- | p1 = SELF; SYMBOL "\\over"; p2 = SELF ->
+ | p1 = SELF; SYMBOL "\\over "; p2 = SELF ->
return_term_of_level loc
(fun l -> Ast.Layout (Ast.Over (p1 l, p2 l)))
- | p1 = SELF; SYMBOL "\\atop"; p2 = SELF ->
+ | p1 = SELF; SYMBOL "\\atop "; p2 = SELF ->
return_term_of_level loc
(fun l -> Ast.Layout (Ast.Atop (p1 l, p2 l)))
- | p1 = SELF; SYMBOL "\\frac"; p2 = SELF ->
+ | p1 = SELF; SYMBOL "\\frac "; p2 = SELF ->
return_term_of_level loc
(fun l -> Ast.Layout (Ast.Frac (p1 l, p2 l)))
- | SYMBOL "\\infrule"; p1 = SELF; p2 = SELF; p3 = SELF ->
+ | SYMBOL "\\infrule "; p1 = SELF; p2 = SELF; p3 = SELF ->
return_term_of_level loc
(fun l -> Ast.Layout (Ast.InfRule (p1 l, p2 l, p3 l)))
- | SYMBOL "\\sqrt"; p = SELF ->
+ | SYMBOL "\\sqrt "; p = SELF ->
return_term_of_level loc (fun l -> Ast.Layout (Ast.Sqrt p l))
- | SYMBOL "\\root"; index = SELF; SYMBOL "\\of"; arg = SELF ->
+ | SYMBOL "\\root "; index = SELF; SYMBOL "\\of "; arg = SELF ->
return_term_of_level loc
(fun l -> Ast.Layout (Ast.Root (arg l, index l)))
| "hbox"; LPAREN; p = l1_pattern; RPAREN ->
]
];
explicit_subst: [
- [ SYMBOL "\\subst"; (* to avoid catching frequent "a [1]" cases *)
+ [ SYMBOL "\\subst "; (* to avoid catching frequent "a [1]" cases *)
SYMBOL "[";
substs = LIST1 [
i = IDENT; SYMBOL <:unicode<Assign>> (* ≔ *); t = term -> (i, t)