aboutsummaryrefslogtreecommitdiff
path: root/src/engine/eachdo.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/eachdo.c')
-rw-r--r--src/engine/eachdo.c243
1 files changed, 122 insertions, 121 deletions
diff --git a/src/engine/eachdo.c b/src/engine/eachdo.c
index 463ae08..d503256 100644
--- a/src/engine/eachdo.c
+++ b/src/engine/eachdo.c
@@ -34,7 +34,7 @@ extern msg_t *msg;
static int
comp(const void *a, const void *b)
{
- return ((atom_t *) b)->priority - ((atom_t *) a)->priority;
+ return ((atom_t *) b)->priority - ((atom_t *) a)->priority;
}
/*
@@ -55,42 +55,42 @@ write_eachdo_iteration(list_t *atoms,
list_t *values,
int priority)
{
- atom_t *atom = malloc(sizeof(atom_t));
- atom->priority = priority;
- atom->content = calloc(1, sizeof(char));
-
- for (size_t i = 0; i < directives->size; i++) {
- directive_t *_directive = list_get(directives, i);
- switch (_directive->type) {
- case _RAW: {
- atom->content
- = realloc(atom->content,
- strlen(atom->content) + strlen(_directive->operands) + 1);
- strcat(atom->content, _directive->operands);
- break;
+ atom_t *atom = malloc(sizeof(atom_t));
+ atom->priority = priority;
+ atom->content = calloc(1, sizeof(char));
+
+ for (size_t i = 0; i < directives->size; i++) {
+ directive_t *_directive = list_get(directives, i);
+ switch (_directive->type) {
+ case _RAW: {
+ atom->content = realloc(atom->content,
+ strlen(atom->content)
+ + strlen(_directive->operands) + 1);
+ strcat(atom->content, _directive->operands);
+ break;
+ }
+
+ case PUT: {
+ char *key = unwrap(list_find_corresponding_value_from_ptr_wrapper(
+ keys, values, trim(_directive->operands)));
+
+ if (key != NULL) {
+ atom->content = realloc(
+ atom->content, strlen(atom->content) + strlen(key) + 1);
+ strcat(atom->content, key);
+ }
+
+ break;
+ }
+
+ default:
+ /* TODO: Handle this */
+ break;
+ }
}
- case PUT: {
- char *key = unwrap(list_find_corresponding_value_from_ptr_wrapper(
- keys, values, trim(_directive->operands)));
-
- if (key != NULL) {
- atom->content
- = realloc(atom->content, strlen(atom->content) + strlen(key) + 1);
- strcat(atom->content, key);
- }
-
- break;
- }
-
- default:
- /* TODO: Handle this */
- break;
- }
- }
-
- list_add(atoms, atom);
- free(atom);
+ list_add(atoms, atom);
+ free(atom);
}
/*
@@ -107,50 +107,50 @@ handle_file_source(list_t *atoms,
eachdo_operands_t *operands,
list_t *directives)
{
- char *path;
- asprintf(&path, "%s/%s", msg->base_directory, trim(operands->key));
- list_t *files = enumfilesindir(path);
- free(path);
-
- if (files == NULL) {
- printf("Could not find key %s\n", trim(operands->key));
- free(operands);
- return;
- }
-
- for (size_t i = 0; i < files->size; i++) {
- char *file_path = unwrap(list_get(files, i));
- asprintf(&path,
- "%s/%s/%s",
- msg->base_directory,
- trim(operands->key),
- file_path);
-
- int len = strlen(path);
- char *comparable = &path[len - strlen("index.html")];
- if (strcmp(comparable, "index.html") == 0) {
- free(path);
- free(file_path);
- continue;
- }
-
- config_t *config = config_fetch_and_parse(path);
-
- int priority = 0;
- char *priority_string
- = unwrap(list_find_corresponding_value_from_ptr_wrapper(
- config->keys, config->values, "priority"));
- if (priority_string != NULL)
- priority = atoll(priority_string);
+ char *path;
+ asprintf(&path, "%s/%s", msg->base_directory, trim(operands->key));
+ list_t *files = enumfilesindir(path);
+ free(path);
- write_eachdo_iteration(
- atoms, directives, config->keys, config->values, priority);
+ if (files == NULL) {
+ printf("Could not find key %s\n", trim(operands->key));
+ free(operands);
+ return;
+ }
- config_delete(config);
- free(file_path);
- free(path);
- }
- list_delete(files);
+ for (size_t i = 0; i < files->size; i++) {
+ char *file_path = unwrap(list_get(files, i));
+ asprintf(&path,
+ "%s/%s/%s",
+ msg->base_directory,
+ trim(operands->key),
+ file_path);
+
+ int len = strlen(path);
+ char *comparable = &path[len - strlen("index.html")];
+ if (strcmp(comparable, "index.html") == 0) {
+ free(path);
+ free(file_path);
+ continue;
+ }
+
+ config_t *config = config_fetch_and_parse(path);
+
+ int priority = 0;
+ char *priority_string
+ = unwrap(list_find_corresponding_value_from_ptr_wrapper(
+ config->keys, config->values, "priority"));
+ if (priority_string != NULL)
+ priority = atoll(priority_string);
+
+ write_eachdo_iteration(
+ atoms, directives, config->keys, config->values, priority);
+
+ config_delete(config);
+ free(file_path);
+ free(path);
+ }
+ list_delete(files);
}
/*
@@ -165,56 +165,57 @@ handle_file_source(list_t *atoms,
void
handle_eachdo(char **buffer, key_match_t *match, directive_t *directive)
{
- eachdo_operands_t *operands = directive->operands;
+ eachdo_operands_t *operands = directive->operands;
- engine_t *engine = engine_ingest(&operands->content);
- engine_delete(engine);
- list_t *directives = lex(operands->content);
+ engine_t *engine = engine_ingest(&operands->content);
+ engine_delete(engine);
+ list_t *directives = lex(operands->content);
- list_t *atoms = list_create(sizeof(atom_t));
+ list_t *atoms = list_create(sizeof(atom_t));
- char *content = calloc(1, sizeof(char));
+ char *content = calloc(1, sizeof(char));
- if (!strcmp(operands->source, "resources"))
- handle_file_source(atoms, operands, directives);
- else {
- printf("Unknown source: %s\n", operands->source);
- /* TODO: handle this gracefully */
- return;
- }
+ if (!strcmp(operands->source, "resources"))
+ handle_file_source(atoms, operands, directives);
+ else {
+ printf("Unknown source: %s\n", operands->source);
+ /* TODO: handle this gracefully */
+ return;
+ }
- /* Sort atoms by priority */
- qsort(atoms->elements, atoms->size, sizeof(atom_t), comp);
+ /* Sort atoms by priority */
+ qsort(atoms->elements, atoms->size, sizeof(atom_t), comp);
- for (size_t i = 0; i < atoms->size; i++) {
- atom_t *atom = list_get(atoms, i);
- content = realloc(content, strlen(content) + strlen(atom->content) + 1);
+ for (size_t i = 0; i < atoms->size; i++) {
+ atom_t *atom = list_get(atoms, i);
+ content
+ = realloc(content, strlen(content) + strlen(atom->content) + 1);
#ifdef DEBUG
- printf("PRIORITY: %lu\n", atom->priority);
+ printf("PRIORITY: %lu\n", atom->priority);
#endif
- strcat(content, atom->content);
- }
-
- char *temp_buffer = strdup(*buffer);
- free(*buffer);
- asprintf(buffer,
- "%.*s%s%s\n",
- match->offset,
- temp_buffer,
- content,
- temp_buffer + operands->length);
- free(temp_buffer);
- free(content);
-
- for (size_t i = 0; i < directives->size; i++) {
- directive_t *_directive = list_get(directives, i);
- free(_directive->operands);
- }
- list_delete(directives);
-
- for (size_t i = 0; i < atoms->size; i++) {
- atom_t *atom = list_get(atoms, i);
- free(atom->content);
- }
- list_delete(atoms);
+ strcat(content, atom->content);
+ }
+
+ char *temp_buffer = strdup(*buffer);
+ free(*buffer);
+ asprintf(buffer,
+ "%.*s%s%s\n",
+ match->offset,
+ temp_buffer,
+ content,
+ temp_buffer + operands->length);
+ free(temp_buffer);
+ free(content);
+
+ for (size_t i = 0; i < directives->size; i++) {
+ directive_t *_directive = list_get(directives, i);
+ free(_directive->operands);
+ }
+ list_delete(directives);
+
+ for (size_t i = 0; i < atoms->size; i++) {
+ atom_t *atom = list_get(atoms, i);
+ free(atom->content);
+ }
+ list_delete(atoms);
}