Adding language
This commit is contained in:
@ -10,4 +10,5 @@ target_sources(${DAWN_TARGET_NAME}
|
||||
assetarchive.c
|
||||
assetjson.c
|
||||
assetmap.c
|
||||
assetlanguage.c
|
||||
)
|
68
src/dawn/asset/assetlanguage.c
Normal file
68
src/dawn/asset/assetlanguage.c
Normal file
@ -0,0 +1,68 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Dominic Masters
|
||||
*
|
||||
* This software is released under the MIT License.
|
||||
* https://opensource.org/licenses/MIT
|
||||
*/
|
||||
|
||||
#include "assetlanguage.h"
|
||||
#include "asset/asset.h"
|
||||
#include "assert/assert.h"
|
||||
#include "locale/language.h"
|
||||
|
||||
void assetLanguageObjectLoad(
|
||||
const char_t *key,
|
||||
assetjson_t *json
|
||||
) {
|
||||
char_t tKey[LANGUAGE_STRING_KEY_LENGTH_MAX];
|
||||
size_t keyLength = strlen(key);
|
||||
strcpy(tKey, key);
|
||||
if(keyLength > 0) {
|
||||
tKey[keyLength] = '.';
|
||||
keyLength++;
|
||||
}
|
||||
|
||||
for(int32_t i = 0; i < json->object.length; i++) {
|
||||
const char_t *subKey = json->object.keys[i];
|
||||
assetjson_t *value = json->object.values[i];
|
||||
strcpy(tKey + keyLength, subKey);
|
||||
|
||||
if(json->object.values[i]->type == ASSET_JSON_DATA_TYPE_OBJECT) {
|
||||
assetLanguageObjectLoad(tKey, value);
|
||||
continue;
|
||||
}
|
||||
|
||||
if(json->object.values[i]->type == ASSET_JSON_DATA_TYPE_STRING) {
|
||||
strcpy(LANGUAGE.keys[LANGUAGE.count], tKey);
|
||||
strcpy(LANGUAGE.strings[LANGUAGE.count], value->string);
|
||||
LANGUAGE.count++;
|
||||
continue;
|
||||
}
|
||||
|
||||
assertUnreachable("Language value is not a string or object!");
|
||||
}
|
||||
}
|
||||
|
||||
void assetLanguageLoad(const char_t *path) {
|
||||
assertNotNull(path, "Path cannot be NULL.");
|
||||
|
||||
assetOpen(path);
|
||||
size_t length = assetGetSize();
|
||||
char_t *buffer = malloc(sizeof(char_t) * (length + 1));
|
||||
buffer[length] = '\0';
|
||||
size_t read = assetRead((uint8_t*)buffer, length);
|
||||
assertTrue(read == length, "Failed to read language file!");
|
||||
assetClose();
|
||||
|
||||
assetjson_t *json;
|
||||
read = assetJsonParse(buffer, &json);
|
||||
free(buffer);
|
||||
|
||||
assertTrue(
|
||||
json->type == ASSET_JSON_DATA_TYPE_OBJECT,
|
||||
"Language file is not an object!"
|
||||
);
|
||||
|
||||
languageInit();
|
||||
assetLanguageObjectLoad("", json);
|
||||
}
|
27
src/dawn/asset/assetlanguage.h
Normal file
27
src/dawn/asset/assetlanguage.h
Normal file
@ -0,0 +1,27 @@
|
||||
/**
|
||||
* Copyright (c) 2024 Dominic Masters
|
||||
*
|
||||
* This software is released under the MIT License.
|
||||
* https://opensource.org/licenses/MIT
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include "asset/assetjson.h"
|
||||
|
||||
/**
|
||||
* Loads a JSON object from the asset file.
|
||||
*
|
||||
* @param key The key to load.
|
||||
* @param json The value to load into.
|
||||
*/
|
||||
void assetLanguageObjectLoad(
|
||||
const char_t *key,
|
||||
assetjson_t *json
|
||||
);
|
||||
|
||||
/**
|
||||
* Loads the language file from the specified path.
|
||||
*
|
||||
* @param path Path to the language file.
|
||||
*/
|
||||
void assetLanguageLoad(const char_t *path);
|
Reference in New Issue
Block a user