Adding basic language support unfinished

This commit is contained in:
2022-12-15 21:11:37 -08:00
parent 2f48f61e9a
commit 5b48fb3901
22 changed files with 364 additions and 4 deletions

View File

@ -0,0 +1,15 @@
# Copyright (c) 2021 Dominic Msters
#
# This software is released under the MIT License.
# https://opensource.org/licenses/MIT
add_subdirectory(languagegen)
# Language Tool
function(tool_language target in)
add_custom_target(${target}
COMMAND languagegen "${DAWN_ASSETS_SOURCE_DIR}/${in}" "${DAWN_ASSETS_BUILD_DIR}/${target}"
COMMENT "Generating texture ${target} from ${in}"
DEPENDS languagegen
)
endfunction()

View File

@ -0,0 +1,25 @@
# Copyright (c) 2021 Dominic Msters
#
# This software is released under the MIT License.
# https://opensource.org/licenses/MIT
# Texture Build Tool
project(languagegen VERSION 1.0)
add_executable(languagegen)
target_sources(languagegen
PRIVATE
main.c
../../utils/file.c
../../utils/image.c
../../utils/csv.c
)
target_include_directories(languagegen
PUBLIC
${CMAKE_CURRENT_LIST_DIR}/../../
${CMAKE_CURRENT_LIST_DIR}
)
target_link_libraries(languagegen
PUBLIC
${DAWN_BUILD_HOST_LIBS}
stb
)

View File

@ -0,0 +1,110 @@
/**
* Copyright (c) 2021 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#include "../../utils/common.h"
#include "../../utils/file.h"
#include "../../utils/csv.h"
int main(int argc, char *argv[]) {
FILE *file;
char path[FILENAME_MAX + 1];
csv_t csv;
char *in;
char *out;
char *buffer;
char sep = '|';
if(argc != 3) {
printf("Invalid number of arguments\n");
return 1;
}
// Set up strings
in = argv[1];
out = argv[2];
// Normalize slashes
fileNormalizeSlashes(in);
fileNormalizeSlashes(out);
// Check the output doesn't already exist
sprintf(path, "%s.language", out);
// file = fopen(path, "rb");
// if(file != NULL) {
// fclose(file);
// return 0;
// }
// Read in original CSV string
file = fopen(in, "rb");
if(file == NULL) {
printf("Failed to open file!\n");
return 1;
}
// Seek to end, get length, seek back to start.
fseek(file, 0, SEEK_END);
size_t fileSize = ftell(file);
fseek(file, 0, SEEK_SET);
// Read in all data
buffer = malloc(sizeof(char) * (fileSize + 1));
size_t readSize = fread(buffer, 1, fileSize, file);
fclose(file);
if(readSize < fileSize) {
free(buffer);
printf("Failed to read all data from CSV\n");
return 1;
}
buffer[fileSize] = '\0';
csvParse(buffer, &csv);
free(buffer);
printf("Parsed\n");
// Prepare output file for writing.
sprintf(path, "%s.language", out);
fileMkdirp(path);
file = fopen(path, "wb");
if(file == NULL) {
csvDispose(&csv);
printf("Failed to create output language file\n");
return 1;
}
// Iterate over the CSV
for(int32_t y = 0; y < csv.rowCount; y++) {
// Ensure valid line
if(csv.cellCounts[y] != 2) {
printf("Failed to parse language. Line %i has %i cells instead of 2\n", y, csv.cellCounts);
fclose(file);
csvDispose(&csv);
return 1;
}
char *key = csvGetCell(&csv, y, 0);
char *value = csvGetCell(&csv, y, 1);
if(strlen(key) <= 0 || strlen(value) <= 0) {
printf("Failed to parse language. Line %i has an invalid string\n", y);
fclose(file);
csvDispose(&csv);
return 1;
}
fwrite(key, sizeof(char), strlen(key), file);
fwrite(&sep, sizeof(char), 1, file);
fwrite(value, sizeof(char), strlen(value), file);
fwrite(&sep, sizeof(char), 1, file);
}
// Finished writing
fclose(file);
csvDispose(&csv);
return 0;
}