Adding basic language support unfinished
This commit is contained in:
@ -4,4 +4,5 @@
|
||||
# https://opensource.org/licenses/MIT
|
||||
|
||||
add_subdirectory(display)
|
||||
add_subdirectory(file)
|
||||
add_subdirectory(file)
|
||||
add_subdirectory(locale)
|
@ -88,6 +88,7 @@ int main(int argc, char *args[]) {
|
||||
size_t readSize = fread(ttfData, 1, fileSize, file);
|
||||
fclose(file);
|
||||
if(readSize < fileSize) {
|
||||
free(ttfData);
|
||||
printf("Failed to read all data form TTF\n");
|
||||
return 1;
|
||||
}
|
||||
|
15
src/dawntools/locale/CMakeLists.txt
Normal file
15
src/dawntools/locale/CMakeLists.txt
Normal 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()
|
25
src/dawntools/locale/languagegen/CMakeLists.txt
Normal file
25
src/dawntools/locale/languagegen/CMakeLists.txt
Normal 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
|
||||
)
|
110
src/dawntools/locale/languagegen/main.c
Normal file
110
src/dawntools/locale/languagegen/main.c
Normal 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;
|
||||
}
|
@ -7,12 +7,16 @@
|
||||
|
||||
#include "csv.h"
|
||||
|
||||
char * csvGetCell(csv_t *csv, int32_t row, int32_t cell) {
|
||||
return csv->rows[(row * CSV_ROW_COUNT_MAX) + cell];
|
||||
}
|
||||
|
||||
void csvParse(char *string, csv_t *csv) {
|
||||
char c;
|
||||
size_t i, j, length;
|
||||
csvparsestate_t state;
|
||||
int32_t rowCellCount;
|
||||
|
||||
|
||||
length = strlen(string);
|
||||
csv->buffer = malloc(sizeof(char) * length * 2);
|
||||
csv->cellCounts = malloc(sizeof(int32_t) * CSV_ROW_COUNT_MAX);
|
||||
|
@ -24,6 +24,8 @@ typedef struct {
|
||||
int32_t *cellCounts;
|
||||
} csv_t;
|
||||
|
||||
char * csvGetCell(csv_t *csv, int32_t row, int32_t cell);
|
||||
|
||||
void csvParse(char *string, csv_t *csv);
|
||||
|
||||
void csvDispose(csv_t *csv);
|
Reference in New Issue
Block a user