1pub use crate::cmd_gen::Cmd;
9
10impl Cmd {
11 pub const MAX_CHAR_CODE: Cmd = Cmd::DelimNum;
13 pub const MIN_INTERNAL: Cmd = Cmd::CharGiven;
15 pub const MAX_NON_PREFIXED: Cmd = Cmd::LastItem;
17 pub const MAX_INTERNAL: Cmd = Cmd::Register;
19 pub const MAX_COMMAND: Cmd = Cmd::SetFontId;
21
22 #[inline]
24 pub fn from_u8(n: u8) -> Cmd {
25 Cmd::ALL[n as usize]
26 }
27
28 #[inline]
30 pub fn is_expandable(self) -> bool {
31 self > Cmd::MAX_COMMAND
32 }
33
34 #[inline]
36 pub fn is_call(self) -> bool {
37 self >= Cmd::Call && self <= Cmd::LongOuterCall
38 }
39
40 #[inline]
43 pub fn is_outer_or_special(self) -> bool {
44 self >= Cmd::OuterCall
45 }
46
47 #[inline]
49 pub fn is_internal(self) -> bool {
50 self >= Cmd::MIN_INTERNAL && self <= Cmd::MAX_INTERNAL
51 }
52}
53
54#[cfg(test)]
55mod tests {
56 use super::*;
57
58 #[test]
59 fn ranges_are_ordered() {
60 assert!(Cmd::MAX_CHAR_CODE < Cmd::CharNum);
61 assert!(Cmd::MIN_INTERNAL <= Cmd::MAX_NON_PREFIXED);
62 assert!(Cmd::MAX_NON_PREFIXED < Cmd::ToksRegister);
63 assert!(Cmd::MAX_INTERNAL < Cmd::Advance);
64 assert!(Cmd::MAX_COMMAND < Cmd::UndefinedCs);
65 assert!(Cmd::UndefinedCs.is_expandable());
66 assert!(!Cmd::SetFontId.is_expandable());
67 assert!(Cmd::LongOuterCall.is_call());
68 assert_eq!(Cmd::from_u8(147), Cmd::Call);
69 }
70}