aboutsummaryrefslogtreecommitdiffstats
path: root/src/blogc/loader.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/blogc/loader.c')
-rw-r--r--src/blogc/loader.c170
1 files changed, 84 insertions, 86 deletions
diff --git a/src/blogc/loader.c b/src/blogc/loader.c
index d620988..3a1b8fc 100644
--- a/src/blogc/loader.c
+++ b/src/blogc/loader.c
@@ -12,14 +12,12 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <squareball.h>
+
#include "datetime-parser.h"
#include "source-parser.h"
#include "template-parser.h"
#include "loader.h"
-#include "../common/error.h"
-#include "../common/file.h"
-#include "../common/utils.h"
-#include "../common/sort.h"
char*
@@ -31,7 +29,7 @@ blogc_get_filename(const char *f)
if (strlen(f) == 0)
return NULL;
- char *filename = bc_strdup(f);
+ char *filename = sb_strdup(f);
// keep a pointer to original string
char *tmp = filename;
@@ -52,46 +50,46 @@ blogc_get_filename(const char *f)
}
}
- char *final_filename = bc_strdup(tmp);
+ char *final_filename = sb_strdup(tmp);
free(filename);
return final_filename;
}
-bc_slist_t*
-blogc_template_parse_from_file(const char *f, bc_error_t **err)
+sb_slist_t*
+blogc_template_parse_from_file(const char *f, sb_error_t **err)
{
if (err == NULL || *err != NULL)
return NULL;
size_t len;
- char *s = bc_file_get_contents(f, true, &len, err);
+ char *s = sb_file_get_contents_utf8(f, &len, err);
if (s == NULL)
return NULL;
- bc_slist_t *rv = blogc_template_parse(s, len, err);
+ sb_slist_t *rv = blogc_template_parse(s, len, err);
free(s);
return rv;
}
-bc_trie_t*
-blogc_source_parse_from_file(const char *f, bc_error_t **err)
+sb_trie_t*
+blogc_source_parse_from_file(const char *f, sb_error_t **err)
{
if (err == NULL || *err != NULL)
return NULL;
size_t len;
- char *s = bc_file_get_contents(f, true, &len, err);
+ char *s = sb_file_get_contents_utf8(f, &len, err);
if (s == NULL)
return NULL;
- bc_trie_t *rv = blogc_source_parse(s, len, err);
+ sb_trie_t *rv = blogc_source_parse(s, len, err);
// set FILENAME variable
if (rv != NULL) {
char *filename = blogc_get_filename(f);
if (filename != NULL)
- bc_trie_insert(rv, "FILENAME", filename);
+ sb_trie_insert(rv, "FILENAME", filename);
}
free(s);
@@ -102,8 +100,8 @@ blogc_source_parse_from_file(const char *f, bc_error_t **err)
static int
sort_source(const void *a, const void *b)
{
- const char *ca = bc_trie_lookup((bc_trie_t*) a, "c");
- const char *cb = bc_trie_lookup((bc_trie_t*) b, "c");
+ const char *ca = sb_trie_lookup((sb_trie_t*) a, "c");
+ const char *cb = sb_trie_lookup((sb_trie_t*) b, "c");
if (ca == NULL || cb == NULL) {
return 0; // wat
@@ -120,88 +118,88 @@ sort_source_reverse(const void *a, const void *b)
}
-bc_slist_t*
-blogc_source_parse_from_files(bc_trie_t *conf, bc_slist_t *l, bc_error_t **err)
+sb_slist_t*
+blogc_source_parse_from_files(sb_trie_t *conf, sb_slist_t *l, sb_error_t **err)
{
if (err == NULL || *err != NULL)
return NULL;
- bool sort = bc_str_to_bool(bc_trie_lookup(conf, "FILTER_SORT"));
+ bool sort = sb_str_to_bool(sb_trie_lookup(conf, "FILTER_SORT"));
- bc_slist_t* sources = NULL;
- bc_error_t *tmp_err = NULL;
+ sb_slist_t* sources = NULL;
+ sb_error_t *tmp_err = NULL;
size_t with_date = 0;
- for (bc_slist_t *tmp = l; tmp != NULL; tmp = tmp->next) {
+ for (sb_slist_t *tmp = l; tmp != NULL; tmp = tmp->next) {
char *f = tmp->data;
- bc_trie_t *s = blogc_source_parse_from_file(f, &tmp_err);
+ sb_trie_t *s = blogc_source_parse_from_file(f, &tmp_err);
if (s == NULL) {
- *err = bc_error_new_printf(BLOGC_ERROR_LOADER,
- "An error occurred while parsing source file: %s\n\n%s",
- f, tmp_err->msg);
- bc_error_free(tmp_err);
- bc_slist_free_full(sources, (bc_free_func_t) bc_trie_free);
+ *err = sb_strerror_new_printf(
+ "loader: An error occurred while parsing source file: %s\n> %s",
+ f, sb_error_to_string(tmp_err));
+ sb_error_free(tmp_err);
+ sb_slist_free_full(sources, (sb_free_func_t) sb_trie_free);
return NULL;
}
- const char *date = bc_trie_lookup(s, "DATE");
+ const char *date = sb_trie_lookup(s, "DATE");
if (date != NULL) {
with_date++;
}
if (sort) {
if (date == NULL) {
- *err = bc_error_new_printf(BLOGC_ERROR_LOADER,
- "'FILTER_SORT' requires that 'DATE' variable is set for "
- "every source file: %s", f);
- bc_trie_free(s);
- bc_slist_free_full(sources, (bc_free_func_t) bc_trie_free);
+ *err = sb_strerror_new_printf(
+ "loader: 'FILTER_SORT' requires that 'DATE' variable is "
+ "set for every source file: %s", f);
+ sb_trie_free(s);
+ sb_slist_free_full(sources, (sb_free_func_t) sb_trie_free);
return NULL;
}
char *timestamp = blogc_convert_datetime(date, "%s", &tmp_err);
if (timestamp == NULL) {
- *err = bc_error_new_printf(BLOGC_ERROR_LOADER,
- "An error occurred while parsing 'DATE' variable: %s"
- "\n\n%s", f, tmp_err->msg);
- bc_error_free(tmp_err);
- bc_trie_free(s);
- bc_slist_free_full(sources, (bc_free_func_t) bc_trie_free);
+ *err = sb_strerror_new_printf(
+ "loader: An error occurred while parsing 'DATE' variable: "
+ "%s\n> %s", f, sb_error_to_string(tmp_err));
+ sb_error_free(tmp_err);
+ sb_trie_free(s);
+ sb_slist_free_full(sources, (sb_free_func_t) sb_trie_free);
return NULL;
}
- bc_trie_insert(s, "c", timestamp);
+ sb_trie_insert(s, "c", timestamp);
}
- sources = bc_slist_append(sources, s);
+ sources = sb_slist_append(sources, s);
}
- if (with_date > 0 && with_date < bc_slist_length(l)) {
- *err = bc_error_new_printf(BLOGC_ERROR_LOADER,
- "'DATE' variable provided for at least one source file, but not "
- "for all source files. It must be provided for all files.");
- bc_slist_free_full(sources, (bc_free_func_t) bc_trie_free);
+ if (with_date > 0 && with_date < sb_slist_length(l)) {
+ *err = sb_strerror_new(
+ "loader: 'DATE' variable provided for at least one source file, "
+ "but not for all source files. It must be provided for all files.");
+ sb_slist_free_full(sources, (sb_free_func_t) sb_trie_free);
return NULL;
}
- bool reverse = bc_str_to_bool(bc_trie_lookup(conf, "FILTER_REVERSE"));
+ bool reverse = sb_str_to_bool(sb_trie_lookup(conf, "FILTER_REVERSE"));
if (sort) {
- sources = bc_slist_sort(sources,
- (bc_sort_func_t) (reverse ? sort_source_reverse : sort_source));
+ sources = sb_slist_sort(sources,
+ (sb_sort_func_t) (reverse ? sort_source_reverse : sort_source));
}
else if (reverse) {
- bc_slist_t *tmp_sources = NULL;
- for (bc_slist_t *tmp = sources; tmp != NULL; tmp = tmp->next) {
- tmp_sources = bc_slist_prepend(tmp_sources, tmp->data);
+ sb_slist_t *tmp_sources = NULL;
+ for (sb_slist_t *tmp = sources; tmp != NULL; tmp = tmp->next) {
+ tmp_sources = sb_slist_prepend(tmp_sources, tmp->data);
}
- bc_slist_t *tmp = sources;
+ sb_slist_t *tmp = sources;
sources = tmp_sources;
- bc_slist_free(tmp);
+ sb_slist_free(tmp);
}
- const char *filter_tag = bc_trie_lookup(conf, "FILTER_TAG");
- const char *filter_page = bc_trie_lookup(conf, "FILTER_PAGE");
- const char *filter_per_page = bc_trie_lookup(conf, "FILTER_PER_PAGE");
+ const char *filter_tag = sb_trie_lookup(conf, "FILTER_TAG");
+ const char *filter_page = sb_trie_lookup(conf, "FILTER_PAGE");
+ const char *filter_per_page = sb_trie_lookup(conf, "FILTER_PER_PAGE");
const char *ptr;
char *endptr;
@@ -227,17 +225,17 @@ blogc_source_parse_from_files(bc_trie_t *conf, bc_slist_t *l, bc_error_t **err)
size_t end = start + per_page;
size_t counter = 0;
- bc_slist_t *rv = NULL;
- for (bc_slist_t *tmp = sources; tmp != NULL; tmp = tmp->next) {
- bc_trie_t *s = tmp->data;
+ sb_slist_t *rv = NULL;
+ for (sb_slist_t *tmp = sources; tmp != NULL; tmp = tmp->next) {
+ sb_trie_t *s = tmp->data;
if (filter_tag != NULL) {
- const char *tags_str = bc_trie_lookup(s, "TAGS");
+ const char *tags_str = sb_trie_lookup(s, "TAGS");
// if user wants to filter by tag and no tag is provided, skip it
if (tags_str == NULL) {
- bc_trie_free(s);
+ sb_trie_free(s);
continue;
}
- char **tags = bc_str_split(tags_str, ' ', 0);
+ char **tags = sb_str_split(tags_str, ' ', 0);
bool found = false;
for (size_t i = 0; tags[i] != NULL; i++) {
if (tags[i][0] == '\0')
@@ -245,58 +243,58 @@ blogc_source_parse_from_files(bc_trie_t *conf, bc_slist_t *l, bc_error_t **err)
if (0 == strcmp(tags[i], filter_tag))
found = true;
}
- bc_strv_free(tags);
+ sb_strv_free(tags);
if (!found) {
- bc_trie_free(s);
+ sb_trie_free(s);
continue;
}
}
if (filter_page != NULL) {
if (counter < start || counter >= end) {
counter++;
- bc_trie_free(s);
+ sb_trie_free(s);
continue;
}
counter++;
}
- rv = bc_slist_append(rv, s);
+ rv = sb_slist_append(rv, s);
}
- bc_slist_free(sources);
+ sb_slist_free(sources);
bool first = true;
- for (bc_slist_t *tmp = rv; tmp != NULL; tmp = tmp->next) {
- bc_trie_t *s = tmp->data;
+ for (sb_slist_t *tmp = rv; tmp != NULL; tmp = tmp->next) {
+ sb_trie_t *s = tmp->data;
if (first) {
- const char *val = bc_trie_lookup(s, "DATE");
+ const char *val = sb_trie_lookup(s, "DATE");
if (val != NULL)
- bc_trie_insert(conf, "DATE_FIRST", bc_strdup(val));
- val = bc_trie_lookup(s, "FILENAME");
+ sb_trie_insert(conf, "DATE_FIRST", sb_strdup(val));
+ val = sb_trie_lookup(s, "FILENAME");
if (val != NULL)
- bc_trie_insert(conf, "FILENAME_FIRST", bc_strdup(val));
+ sb_trie_insert(conf, "FILENAME_FIRST", sb_strdup(val));
first = false;
}
if (tmp->next == NULL) { // last
- const char *val = bc_trie_lookup(s, "DATE");
+ const char *val = sb_trie_lookup(s, "DATE");
if (val != NULL)
- bc_trie_insert(conf, "DATE_LAST", bc_strdup(val));
- val = bc_trie_lookup(s, "FILENAME");
+ sb_trie_insert(conf, "DATE_LAST", sb_strdup(val));
+ val = sb_trie_lookup(s, "FILENAME");
if (val != NULL)
- bc_trie_insert(conf, "FILENAME_LAST", bc_strdup(val));
+ sb_trie_insert(conf, "FILENAME_LAST", sb_strdup(val));
}
}
if (filter_page != NULL) {
size_t last_page = ceilf(((float) counter) / per_page);
- bc_trie_insert(conf, "CURRENT_PAGE", bc_strdup_printf("%ld", page));
+ sb_trie_insert(conf, "CURRENT_PAGE", sb_strdup_printf("%ld", page));
if (page > 1)
- bc_trie_insert(conf, "PREVIOUS_PAGE", bc_strdup_printf("%ld", page - 1));
+ sb_trie_insert(conf, "PREVIOUS_PAGE", sb_strdup_printf("%ld", page - 1));
if (page < last_page)
- bc_trie_insert(conf, "NEXT_PAGE", bc_strdup_printf("%ld", page + 1));
- if (bc_slist_length(rv) > 0)
- bc_trie_insert(conf, "FIRST_PAGE", bc_strdup("1"));
+ sb_trie_insert(conf, "NEXT_PAGE", sb_strdup_printf("%ld", page + 1));
+ if (sb_slist_length(rv) > 0)
+ sb_trie_insert(conf, "FIRST_PAGE", sb_strdup("1"));
if (last_page > 0)
- bc_trie_insert(conf, "LAST_PAGE", bc_strdup_printf("%d", last_page));
+ sb_trie_insert(conf, "LAST_PAGE", sb_strdup_printf("%d", last_page));
}
return rv;