Macro tex

Source
macro_rules! tex {
    ($p:ident => $name:ident$($args:tt)*) => { ... };
    ($p:ident => @begin{$name:ident}$( ($($args:tt)* ) )? {$($start:tt)*} $($end:tt)*) => { ... };
    (<{$($tks:tt)+} M{$($mtks:tt)+} P{$($ptks:tt)+} R{$($rtks:tt)+}> $p:ident => $name:ident $($args:tt)*) => { ... };
    (<{$($tks:tt)+} E{$($mtks:tt)+} P{$($ptks:tt)+} R{$($rtks:tt)+}> $p:ident => @begin{$name:ident}$( ($($args:tt)* ) )? {$($start:tt)*} $($end:tt)*) => { ... };
    (@end $name:ident $b:block !) => { ... };
    (@end $name:ident !) => { ... };
    (@end $name:ident $b:block) => { ... };
    (@envargs $p:ident:$name:ident{$arg:ident:name}$($args:tt)*) => { ... };
    (@envargs $p:ident:$name:ident{$arg:ident:!name}$($args:tt)*) => { ... };
    (@envargs $p:ident:$name:ident{$arg:ident:name+}$($args:tt)*) => { ... };
    (@envargs $p:ident:$name:ident{$arg:ident:!name+}$($args:tt)*) => { ... };
    (@envargs $p:ident:$name:ident{$arg:ident:T}$($args:tt)*) => { ... };
    (@envargs $p:ident:$name:ident{_:T}$($args:tt)*) => { ... };
    (@envargs $p:ident:$name:ident{$arg:ident:M}$($args:tt)*) => { ... };
    (@envargs $p:ident:$name:ident{_:M}$($args:tt)*) => { ... };
    (@envargs $p:ident:$name:ident{_}$($args:tt)*) => { ... };
    (@envargs $p:ident:$name:ident[_?$opt:ident]$($args:tt)*) => { ... };
    (@envargs $p:ident:$name:ident[_]$($args:tt)*) => { ... };
    (@envargs $p:ident:$name:ident[$opt:ident:str]$($args:tt)*) => { ... };
    (@envargs $p:ident:$name:ident[$opt:ident:!name]$($args:tt)*) => { ... };
    (@envargs $p:ident:$name:ident[$opt:ident]$($args:tt)*) => { ... };
    (@envargs $p:ident:$name:ident[mut $opt:ident:Map]$($args:tt)*) => { ... };
    (@envargs $p:ident:$name:ident[$opt:ident:Map]$($args:tt)*) => { ... };
    (@envargs $p:ident:$name:ident[$opt:ident:type $tp:ty]$($args:tt)*) => { ... };
    (@envargs $p:ident:$name:ident V:C($c:expr) $($args:tt)*) => { ... };
    (@envargs $p:ident:$name:ident V) => { ... };
    (@envargs $p:ident:$name:ident V!) => { ... };
    (@envargs $p:ident:$name:ident($c:literal?$t:ident)$($args:tt)*) => { ... };
    (@envargs $p:ident:$name:ident($t:ident)$($args:tt)*) => { ... };
    (@envargs $p:ident:$name:ident => $b:block) => { ... };
    (@envargs $p:ident:$name:ident) => { ... };
    (@args $p:ident:$name:ident{$arg:ident:name}$($args:tt)*) => { ... };
    (@args $p:ident:$name:ident{$arg:ident:!name}$($args:tt)*) => { ... };
    (@args $p:ident:$name:ident{$arg:ident}$($args:tt)*) => { ... };
    (@args $p:ident:$name:ident{$arg:ident:T}$($args:tt)*) => { ... };
    (@args $p:ident:$name:ident{_:T}$($args:tt)*) => { ... };
    (@args $p:ident:$name:ident{$arg:ident:M}$($args:tt)*) => { ... };
    (@args $p:ident:$name:ident{_:M}$($args:tt)*) => { ... };
    (@args $p:ident:$name:ident{_}$($args:tt)*) => { ... };
    (@args $p:ident:$name:ident[_?$opt:ident]$($args:tt)*) => { ... };
    (@args $p:ident:$name:ident[_]$($args:tt)*) => { ... };
    (@args $p:ident:$name:ident[$opt:ident:str]$($args:tt)*) => { ... };
    (@args $p:ident:$name:ident[$opt:ident:!name]$($args:tt)*) => { ... };
    (@args $p:ident:$name:ident[$opt:ident]$($args:tt)*) => { ... };
    (@args $p:ident:$name:ident[mut $opt:ident:Map]$($args:tt)*) => { ... };
    (@args $p:ident:$name:ident[$opt:ident:Map]$($args:tt)*) => { ... };
    (@args $p:ident:$name:ident[$opt:ident:type $tp:ty]$($args:tt)*) => { ... };
    (@args $p:ident:$name:ident V:C($c:expr) $($args:tt)*) => { ... };
    (@args $p:ident:$name:ident($c:literal?$t:ident)$($args:tt)*) => { ... };
    (@args $p:ident:$name:ident($t:ident)$($args:tt)*) => { ... };
    (@args $p:ident:$name:ident !) => { ... };
    (@args $p:ident:$name:ident => $b:block !) => { ... };
    (@args $p:ident:$name:ident => $b:block) => { ... };
}