filetype, $syntax); } private static function getSyntaxFromFilename(string $filename): Syntax { $ext = strstr(basename($filename), '.'); $ext = ($ext !== FALSE) ? $ext : ''; return match ($ext) { '.php', 'kilo' => Syntax::new( 'PHP', ), '.c', '.h', '.cpp', '.cxx', '.cc', '.hpp' => Syntax::new( 'C', [ 'continue', 'typedef', 'switch', 'return', 'static', 'while', 'break', 'struct', 'union', 'class', 'else', 'enum', 'for', 'case', 'if', ], [ '#include', 'unsigned', '#define', '#ifndef', 'double', 'signed', '#endif', '#ifdef', 'float', '#error', '#undef', 'long', 'char', 'int', 'void', '#if', ], ), '.css', '.less', '.sass', '.scss' => Syntax::new( 'CSS', slcs: '', ), '.js', '.jsx', '.ts', '.tsx', '.jsm', '.mjs', '.es' => Syntax::new( 'JavaScript', [ 'instanceof', 'continue', 'debugger', 'function', 'default', 'extends', 'finally', 'delete', 'export', 'import', 'return', 'switch', 'typeof', 'break', 'catch', 'class', 'const', 'super', 'throw', 'while', 'yield', 'case', 'else', 'this', 'void', 'with', 'from', 'for', 'new', 'try', 'var', 'do', 'if', 'in', 'as', ], [ '=>', 'Number', 'String', 'Object', 'Math', 'JSON', 'Boolean', ], ), '.rs' => Syntax::new( 'Rust', [ 'continue', 'return', 'static', 'struct', 'unsafe', 'break', 'const', 'crate', 'extern', 'match', 'super', 'trait', 'where', 'else', 'enum', 'false', 'impl', 'loop', 'move', 'self', 'type', 'while', 'for', 'let', 'mod', 'pub', 'ref', 'true', 'use', 'mut', 'as', 'fn', 'if', 'in', ], [ 'DoubleEndedIterator', 'ExactSizeIterator', 'IntoIterator', 'PartialOrd', 'PartialEq', 'Iterator', 'ToString', 'Default', 'ToOwned', 'Extend', 'FnOnce', 'Option', 'String', 'AsMut', 'AsRef', 'Clone', 'Debug', 'FnMut', 'Sized', 'Unpin', 'array', 'isize', 'usize', '&str', 'Copy', 'Drop', 'From', 'Into', 'None', 'Self', 'Send', 'Some', 'Sync', 'bool', 'char', 'i128', 'u128', 'Box', 'Err', 'Ord', 'Vec', 'dyn', 'f32', 'f64', 'i16', 'i32', 'i64', 'str', 'u16', 'u32', 'u64', 'Eq', 'Fn', 'Ok', 'i8', 'u8', ], ), default => Syntax::default(), }; } private function __construct(public string $name, public Syntax $syntax) {} }