get_lang.c (1623B)
1/*
2* Author: Abdul Rahim(C) 2024
3*/
4#include <stdio.h>
5#include <stdlib.h>
6#include <string.h>
7#include <ctype.h>
8#include "cJSON.h"
910
char* to_lower(const char *upper)
11{
12char* str = (char *) malloc(strlen(upper) + 1 );
13if (!str)
14return NULL;
1516
int i;
17for (i = 0; upper[i] ; i++) {
18str[i] = tolower(upper[i]);
19}
20str[i] = '\0';
21return str;
22}
2324
char *get_file_extension(const char *filename_arg)
25{
26char *filename = to_lower(filename_arg);
27if (!filename)
28strcpy(filename, filename_arg);
29char *dot = strrchr(filename, '.');
30if (dot && dot != filename) {
31/* dot is the pointer to last occurence of '.'
32*/
33return dot+1;
34}
35else {
36return NULL;
37}
38}
3940
const char* get_language_by_extension(const char *extension, cJSON *langMap)
41{
42cJSON *languageItem;
43cJSON_ArrayForEach(languageItem, langMap) {
44const char *language = languageItem->string;
45cJSON *extensions = cJSON_GetObjectItemCaseSensitive(langMap, language);
46cJSON *extItem;
47cJSON_ArrayForEach(extItem, extensions) {
48if (strcmp(extension, extItem->valuestring) == 0)
49return language;
50}
51}
5253
return NULL;
54}
5556
cJSON* loadLangMapFromFile()
57{
58/*
59* c string that contains JSON is in json_string
60*/
61cJSON *langMap = cJSON_Parse(json_string);
62return langMap;
63}
6465
const char *get_lang(const char* filename)
66{
67cJSON *langMap = loadLangMapFromFile();
68if (!langMap)
69return NULL;
7071
char *extension = get_file_extension(filename);
72if (!extension) {
73cJSON_Delete(langMap);
74return NULL;
75}
7677
const char *language = get_language_by_extension(extension, langMap);
78if (language) {
79return language;
80} else {
81return NULL;
82}
83}