| 897 | /* ── Public API ──────────────────────────────────────────────────── */ |
| 898 | |
| 899 | CBMLanguage cbm_language_for_extension(const char *ext) { |
| 900 | if (!ext || !ext[0]) { |
| 901 | return CBM_LANG_COUNT; |
| 902 | } |
| 903 | |
| 904 | /* Check user-defined overrides first */ |
| 905 | const cbm_userconfig_t *ucfg = cbm_get_user_lang_config(); |
| 906 | if (ucfg) { |
| 907 | CBMLanguage ulang = cbm_userconfig_lookup(ucfg, ext); |
| 908 | if (ulang != CBM_LANG_COUNT) { |
| 909 | return ulang; |
| 910 | } |
| 911 | } |
| 912 | |
| 913 | for (size_t i = 0; i < EXT_TABLE_SIZE; i++) { |
| 914 | if (strcmp(EXT_TABLE[i].ext, ext) == 0) { |
| 915 | return EXT_TABLE[i].language; |
| 916 | } |
| 917 | } |
| 918 | return CBM_LANG_COUNT; |
| 919 | } |
| 920 | |
| 921 | CBMLanguage cbm_language_for_filename(const char *filename) { |
| 922 | if (!filename || !filename[0]) { |
no test coverage detected