diff options
Diffstat (limited to 'src/blogc')
-rw-r--r-- | src/blogc/content-parser.c | 336 | ||||
-rw-r--r-- | src/blogc/datetime-parser.c | 131 | ||||
-rw-r--r-- | src/blogc/datetime-parser.h | 4 | ||||
-rw-r--r-- | src/blogc/debug.c | 6 | ||||
-rw-r--r-- | src/blogc/debug.h | 4 | ||||
-rw-r--r-- | src/blogc/funcvars.c | 8 | ||||
-rw-r--r-- | src/blogc/funcvars.h | 6 | ||||
-rw-r--r-- | src/blogc/loader.c | 170 | ||||
-rw-r--r-- | src/blogc/loader.h | 11 | ||||
-rw-r--r-- | src/blogc/main.c | 80 | ||||
-rw-r--r-- | src/blogc/renderer.c | 81 | ||||
-rw-r--r-- | src/blogc/renderer.h | 18 | ||||
-rw-r--r-- | src/blogc/rusage.c | 23 | ||||
-rw-r--r-- | src/blogc/rusage.h | 4 | ||||
-rw-r--r-- | src/blogc/source-parser.c | 78 | ||||
-rw-r--r-- | src/blogc/source-parser.h | 7 | ||||
-rw-r--r-- | src/blogc/sysinfo.c | 33 | ||||
-rw-r--r-- | src/blogc/sysinfo.h | 10 | ||||
-rw-r--r-- | src/blogc/template-parser.c | 253 | ||||
-rw-r--r-- | src/blogc/template-parser.h | 11 |
20 files changed, 625 insertions, 649 deletions
diff --git a/src/blogc/content-parser.c b/src/blogc/content-parser.c index 047af4b..829638e 100644 --- a/src/blogc/content-parser.c +++ b/src/blogc/content-parser.c @@ -9,9 +9,9 @@ #include <stdbool.h> #include <stdlib.h> #include <string.h> +#include <squareball.h> #include "content-parser.h" -#include "../common/utils.h" // this is a half ass implementation of a markdown-like syntax. bugs are // expected. feel free to improve the parser and add new features. @@ -22,7 +22,7 @@ blogc_slugify(const char *str) { if (str == NULL) return NULL; - char *new_str = bc_strdup(str); + char *new_str = sb_strdup(str); int diff = 'a' - 'A'; // just to avoid magic numbers for (size_t i = 0; new_str[i] != '\0'; i++) { if (new_str[i] >= 'a' && new_str[i] <= 'z') @@ -60,13 +60,13 @@ htmlentities(char c) static void -htmlentities_append(bc_string_t *str, char c) +htmlentities_append(sb_string_t *str, char c) { const char *e = htmlentities(c); if (e == NULL) - bc_string_append_c(str, c); + sb_string_append_c(str, c); else - bc_string_append(str, e); + sb_string_append(str, e); } @@ -75,10 +75,10 @@ blogc_htmlentities(const char *str) { if (str == NULL) return NULL; - bc_string_t *rv = bc_string_new(); + sb_string_t *rv = sb_string_new(); for (size_t i = 0; str[i] != '\0'; i++) htmlentities_append(rv, str[i]); - return bc_string_free(rv, false); + return sb_string_free(rv, false); } @@ -87,7 +87,7 @@ blogc_fix_description(const char *paragraph) { if (paragraph == NULL) return NULL; - bc_string_t *rv = bc_string_new(); + sb_string_t *rv = sb_string_new(); bool last = false; bool newline = false; char *tmp = NULL; @@ -101,12 +101,12 @@ blogc_fix_description(const char *paragraph) case '\n': if (newline) break; - tmp = bc_strndup(paragraph + start, current - start); - bc_string_append(rv, bc_str_strip(tmp)); + tmp = sb_strndup(paragraph + start, current - start); + sb_string_append(rv, sb_str_strip(tmp)); free(tmp); tmp = NULL; if (!last) - bc_string_append_c(rv, ' '); + sb_string_append_c(rv, ' '); start = current + 1; newline = true; break; @@ -117,8 +117,8 @@ blogc_fix_description(const char *paragraph) break; current++; } - tmp = blogc_htmlentities(bc_str_strip(rv->str)); - bc_string_free(rv, true); + tmp = blogc_htmlentities(sb_str_strip(rv->str)); + sb_string_free(rv, true); return tmp; } @@ -190,7 +190,7 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) size_t start_link = 0; char *link1 = NULL; - bc_string_t *rv = bc_string_new(); + sb_string_t *rv = sb_string_new(); blogc_content_parser_inline_state_t state = CONTENT_INLINE_START; @@ -244,15 +244,15 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) state = CONTENT_INLINE_ASTERISK_DOUBLE; break; } - tmp = bc_str_find(src + current, '*'); + tmp = sb_str_find(src + current, '*'); if (tmp == NULL || ((tmp - src) >= src_len)) { - bc_string_append_c(rv, '*'); + sb_string_append_c(rv, '*'); state = CONTENT_INLINE_START; continue; } tmp2 = blogc_content_parse_inline_internal( src + current, (tmp - src) - current); - bc_string_append_printf(rv, "<em>%s</em>", tmp2); + sb_string_append_printf(rv, "<em>%s</em>", tmp2); current = tmp - src; tmp = NULL; free(tmp2); @@ -263,21 +263,21 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) case CONTENT_INLINE_ASTERISK_DOUBLE: tmp = src + current; do { - tmp = bc_str_find(tmp, '*'); + tmp = sb_str_find(tmp, '*'); if (((tmp - src) < src_len) && *(tmp + 1) == '*') { break; } tmp++; } while (tmp != NULL && (tmp - src) < src_len); if (tmp == NULL || ((tmp - src) >= src_len)) { - bc_string_append_c(rv, '*'); - bc_string_append_c(rv, '*'); + sb_string_append_c(rv, '*'); + sb_string_append_c(rv, '*'); state = CONTENT_INLINE_START; continue; } tmp2 = blogc_content_parse_inline_internal( src + current, (tmp - src) - current); - bc_string_append_printf(rv, "<strong>%s</strong>", tmp2); + sb_string_append_printf(rv, "<strong>%s</strong>", tmp2); current = tmp - src + 1; tmp = NULL; free(tmp2); @@ -290,15 +290,15 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) state = CONTENT_INLINE_UNDERSCORE_DOUBLE; break; } - tmp = bc_str_find(src + current, '_'); + tmp = sb_str_find(src + current, '_'); if (tmp == NULL || ((tmp - src) >= src_len)) { - bc_string_append_c(rv, '_'); + sb_string_append_c(rv, '_'); state = CONTENT_INLINE_START; continue; } tmp2 = blogc_content_parse_inline_internal( src + current, (tmp - src) - current); - bc_string_append_printf(rv, "<em>%s</em>", tmp2); + sb_string_append_printf(rv, "<em>%s</em>", tmp2); current = tmp - src; tmp = NULL; free(tmp2); @@ -309,21 +309,21 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) case CONTENT_INLINE_UNDERSCORE_DOUBLE: tmp = src + current; do { - tmp = bc_str_find(tmp, '_'); + tmp = sb_str_find(tmp, '_'); if (((tmp - src) < src_len) && *(tmp + 1) == '_') { break; } tmp++; } while (tmp != NULL && (tmp - src) < src_len); if (tmp == NULL || ((tmp - src) >= src_len)) { - bc_string_append_c(rv, '_'); - bc_string_append_c(rv, '_'); + sb_string_append_c(rv, '_'); + sb_string_append_c(rv, '_'); state = CONTENT_INLINE_START; continue; } tmp2 = blogc_content_parse_inline_internal( src + current, (tmp - src) - current); - bc_string_append_printf(rv, "<strong>%s</strong>", tmp2); + sb_string_append_printf(rv, "<strong>%s</strong>", tmp2); current = tmp - src + 1; tmp = NULL; free(tmp2); @@ -336,19 +336,19 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) state = CONTENT_INLINE_BACKTICKS_DOUBLE; break; } - tmp = bc_str_find(src + current, '`'); + tmp = sb_str_find(src + current, '`'); if (tmp == NULL || ((tmp - src) >= src_len)) { - bc_string_append_c(rv, '`'); + sb_string_append_c(rv, '`'); state = CONTENT_INLINE_START; continue; } - tmp3 = bc_strndup(src + current, (tmp - src) - current); + tmp3 = sb_strndup(src + current, (tmp - src) - current); tmp2 = blogc_htmlentities(tmp3); free(tmp3); tmp3 = NULL; - bc_string_append(rv, "<code>"); - bc_string_append(rv, tmp2); - bc_string_append(rv, "</code>"); + sb_string_append(rv, "<code>"); + sb_string_append(rv, tmp2); + sb_string_append(rv, "</code>"); current = tmp - src; tmp = NULL; free(tmp2); @@ -359,25 +359,25 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) case CONTENT_INLINE_BACKTICKS_DOUBLE: tmp = src + current; do { - tmp = bc_str_find(tmp, '`'); + tmp = sb_str_find(tmp, '`'); if (((tmp - src) < src_len) && *(tmp + 1) == '`') { break; } tmp++; } while (tmp != NULL && (tmp - src) < src_len); if (tmp == NULL || ((tmp - src) >= src_len)) { - bc_string_append_c(rv, '`'); - bc_string_append_c(rv, '`'); + sb_string_append_c(rv, '`'); + sb_string_append_c(rv, '`'); state = CONTENT_INLINE_START; continue; } - tmp3 = bc_strndup(src + current, (tmp - src) - current); + tmp3 = sb_strndup(src + current, (tmp - src) - current); tmp2 = blogc_htmlentities(tmp3); free(tmp3); tmp3 = NULL; - bc_string_append(rv, "<code>"); - bc_string_append(rv, tmp2); - bc_string_append(rv, "</code>"); + sb_string_append(rv, "<code>"); + sb_string_append(rv, tmp2); + sb_string_append(rv, "</code>"); current = tmp - src + 1; tmp = NULL; free(tmp2); @@ -398,24 +398,24 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) case CONTENT_INLINE_LINK_AUTO: tmp = src + current; do { - tmp = bc_str_find(tmp, ']'); + tmp = sb_str_find(tmp, ']'); if (((tmp - src) < src_len) && *(tmp + 1) == ']') { break; } tmp++; } while (tmp != NULL && (tmp - src) < src_len); if (tmp == NULL || ((tmp - src) >= src_len)) { - bc_string_append_c(rv, '['); - bc_string_append_c(rv, '['); + sb_string_append_c(rv, '['); + sb_string_append_c(rv, '['); state = CONTENT_INLINE_START; continue; } - tmp2 = bc_strndup(src + current, (tmp - src) - current); - bc_string_append(rv, "<a href=\""); - bc_string_append_escaped(rv, tmp2); - bc_string_append(rv, "\">"); - bc_string_append_escaped(rv, tmp2); - bc_string_append(rv, "</a>"); + tmp2 = sb_strndup(src + current, (tmp - src) - current); + sb_string_append(rv, "<a href=\""); + sb_string_append_escaped(rv, tmp2); + sb_string_append(rv, "\">"); + sb_string_append_escaped(rv, tmp2); + sb_string_append(rv, "</a>"); current = tmp - src + 1; tmp = NULL; free(tmp2); @@ -434,7 +434,7 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) } if (c == ']') { if (--count == 0) { - link1 = bc_strndup(src + start_link, current - start_link); + link1 = sb_strndup(src + start_link, current - start_link); state = CONTENT_INLINE_LINK_URL_START; } } @@ -448,7 +448,7 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) start = current + 1; break; } - bc_string_append_c(rv, '['); + sb_string_append_c(rv, '['); state = CONTENT_INLINE_START; current = start_link; start_link = 0; @@ -460,13 +460,13 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) break; } if (c == ')') { - tmp2 = bc_strndup(src + start, current - start); + tmp2 = sb_strndup(src + start, current - start); tmp3 = blogc_content_parse_inline(link1); free(link1); link1 = NULL; - bc_string_append(rv, "<a href=\""); - bc_string_append_escaped(rv, tmp2); - bc_string_append_printf(rv, "\">%s</a>", tmp3); + sb_string_append(rv, "<a href=\""); + sb_string_append_escaped(rv, tmp2); + sb_string_append_printf(rv, "\">%s</a>", tmp3); free(tmp2); tmp2 = NULL; free(tmp3); @@ -483,7 +483,7 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) start_link = current + 1; break; } - bc_string_append_c(rv, '!'); + sb_string_append_c(rv, '!'); state = CONTENT_INLINE_START; continue; @@ -493,7 +493,7 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) break; } if (c == ']') { - link1 = bc_strndup(src + start_link, current - start_link); + link1 = sb_strndup(src + start_link, current - start_link); state = CONTENT_INLINE_IMAGE_URL_START; } break; @@ -506,8 +506,8 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) start = current + 1; break; } - bc_string_append_c(rv, '!'); - bc_string_append_c(rv, '['); + sb_string_append_c(rv, '!'); + sb_string_append_c(rv, '['); state = CONTENT_INLINE_START; current = start_link; start_link = 0; @@ -519,12 +519,12 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) break; } if (c == ')') { - tmp2 = bc_strndup(src + start, current - start); - bc_string_append(rv, "<img src=\""); - bc_string_append_escaped(rv, tmp2); - bc_string_append(rv, "\" alt=\""); - bc_string_append_escaped(rv, link1); - bc_string_append(rv, "\">"); + tmp2 = sb_strndup(src + start, current - start); + sb_string_append(rv, "<img src=\""); + sb_string_append_escaped(rv, tmp2); + sb_string_append(rv, "\" alt=\""); + sb_string_append_escaped(rv, link1); + sb_string_append(rv, "\">"); free(tmp2); tmp2 = NULL; free(link1); @@ -537,31 +537,31 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) case CONTENT_INLINE_ENDASH: if (c == '-') { if (is_last) { - bc_string_append(rv, "–"); + sb_string_append(rv, "–"); state = CONTENT_INLINE_START; // wat break; } state = CONTENT_INLINE_EMDASH; break; } - bc_string_append_c(rv, '-'); + sb_string_append_c(rv, '-'); state = CONTENT_INLINE_START; continue; case CONTENT_INLINE_EMDASH: if (c == '-') { - bc_string_append(rv, "—"); + sb_string_append(rv, "—"); state = CONTENT_INLINE_START; break; } - bc_string_append(rv, "–"); + sb_string_append(rv, "–"); state = CONTENT_INLINE_START; continue; case CONTENT_INLINE_LINE_BREAK_START: if (c == ' ') { if (is_last) { - bc_string_append(rv, "<br />"); + sb_string_append(rv, "<br />"); state = CONTENT_INLINE_START; // wat break; } @@ -569,14 +569,14 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) state = CONTENT_INLINE_LINE_BREAK; break; } - bc_string_append_c(rv, ' '); + sb_string_append_c(rv, ' '); state = CONTENT_INLINE_START; continue; case CONTENT_INLINE_LINE_BREAK: if (c == ' ') { if (is_last) { - bc_string_append(rv, "<br />"); + sb_string_append(rv, "<br />"); state = CONTENT_INLINE_START; // wat break; } @@ -584,12 +584,12 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) break; } if (c == '\n' || c == '\r') { - bc_string_append_printf(rv, "<br />%c", c); + sb_string_append_printf(rv, "<br />%c", c); state = CONTENT_INLINE_START; break; } for (size_t i = 0; i < count; i++) - bc_string_append_c(rv, ' '); + sb_string_append_c(rv, ' '); state = CONTENT_INLINE_START; continue; } @@ -604,14 +604,14 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) case CONTENT_INLINE_IMAGE_ALT: case CONTENT_INLINE_IMAGE_URL_START: case CONTENT_INLINE_IMAGE_URL: - bc_string_append_c(rv, '!'); + sb_string_append_c(rv, '!'); case CONTENT_INLINE_LINK_CONTENT: case CONTENT_INLINE_LINK_URL_START: case CONTENT_INLINE_LINK_URL: tmp2 = blogc_content_parse_inline(src + start_link); - bc_string_append_c(rv, '['); - bc_string_append_escaped(rv, tmp2); // no need to free, as it wil be done below. + sb_string_append_c(rv, '['); + sb_string_append_escaped(rv, tmp2); // no need to free, as it wil be done below. break; // add all the other states here explicitly, so the compiler helps us @@ -636,7 +636,7 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) free(tmp3); free(link1); - return bc_string_free(rv, false); + return sb_string_free(rv, false); } @@ -704,11 +704,11 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, char d = '\0'; - bc_slist_t *lines = NULL; - bc_slist_t *lines2 = NULL; + sb_slist_t *lines = NULL; + sb_slist_t *lines2 = NULL; - bc_string_t *rv = bc_string_new(); - bc_string_t *tmp_str = NULL; + sb_string_t *rv = sb_string_new(); + sb_string_t *tmp_str = NULL; blogc_content_parser_state_t state = CONTENT_START_LINE; @@ -835,16 +835,16 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, if (c == '\n' || c == '\r' || is_last) { end = is_last && c != '\n' && c != '\r' ? src_len : (real_end != 0 ? real_end : current); - tmp = bc_strndup(src + start, end - start); + tmp = sb_strndup(src + start, end - start); if (first_header != NULL && *first_header == NULL) *first_header = blogc_htmlentities(tmp); parsed = blogc_content_parse_inline(tmp); slug = blogc_slugify(tmp); if (slug == NULL) - bc_string_append_printf(rv, "<h%d>%s</h%d>%s", + sb_string_append_printf(rv, "<h%d>%s</h%d>%s", header_level, parsed, header_level, line_ending); else - bc_string_append_printf(rv, "<h%d id=\"%s\">%s</h%d>%s", + sb_string_append_printf(rv, "<h%d id=\"%s\">%s</h%d>%s", header_level, slug, parsed, header_level, line_ending); free(slug); @@ -868,8 +868,8 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, case CONTENT_HTML_END: if (c == '\n' || c == '\r' || is_last) { - tmp = bc_strndup(src + start, end - start); - bc_string_append_printf(rv, "%s%s", tmp, line_ending); + tmp = sb_strndup(src + start, end - start); + sb_string_append_printf(rv, "%s%s", tmp, line_ending); free(tmp); tmp = NULL; state = CONTENT_START_LINE; @@ -882,7 +882,7 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, case CONTENT_BLOCKQUOTE: if (c == ' ' || c == '\t') break; - prefix = bc_strndup(src + start, current - start); + prefix = sb_strndup(src + start, current - start); state = CONTENT_BLOCKQUOTE_START; break; @@ -890,16 +890,16 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, if (c == '\n' || c == '\r' || is_last) { end = is_last && c != '\n' && c != '\r' ? src_len : (real_end != 0 ? real_end : current); - tmp = bc_strndup(src + start2, end - start2); - if (bc_str_starts_with(tmp, prefix)) { - lines = bc_slist_append(lines, bc_strdup(tmp + strlen(prefix))); + tmp = sb_strndup(src + start2, end - start2); + if (sb_str_starts_with(tmp, prefix)) { + lines = sb_slist_append(lines, sb_strdup(tmp + strlen(prefix))); state = CONTENT_BLOCKQUOTE_END; } else { state = CONTENT_PARAGRAPH; free(prefix); prefix = NULL; - bc_slist_free_full(lines, free); + sb_slist_free_full(lines, free); lines = NULL; if (is_last) { free(tmp); @@ -915,21 +915,21 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, case CONTENT_BLOCKQUOTE_END: if (c == '\n' || c == '\r' || is_last) { - tmp_str = bc_string_new(); - for (bc_slist_t *l = lines; l != NULL; l = l->next) - bc_string_append_printf(tmp_str, "%s%s", l->data, + tmp_str = sb_string_new(); + for (sb_slist_t *l = lines; l != NULL; l = l->next) + sb_string_append_printf(tmp_str, "%s%s", l->data, line_ending); // do not propagate title and description to blockquote parsing, // because we just want paragraphs from first level of // content. tmp = blogc_content_parse(tmp_str->str, NULL, NULL, NULL); - bc_string_append_printf(rv, "<blockquote>%s</blockquote>%s", + sb_string_append_printf(rv, "<blockquote>%s</blockquote>%s", tmp, line_ending); free(tmp); tmp = NULL; - bc_string_free(tmp_str, true); + sb_string_free(tmp_str, true); tmp_str = NULL; - bc_slist_free_full(lines, free); + sb_slist_free_full(lines, free); lines = NULL; free(prefix); prefix = NULL; @@ -945,7 +945,7 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, case CONTENT_CODE: if (c == ' ' || c == '\t') break; - prefix = bc_strndup(src + start, current - start); + prefix = sb_strndup(src + start, current - start); state = CONTENT_CODE_START; break; @@ -953,16 +953,16 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, if (c == '\n' || c == '\r' || is_last) { end = is_last && c != '\n' && c != '\r' ? src_len : (real_end != 0 ? real_end : current); - tmp = bc_strndup(src + start2, end - start2); - if (bc_str_starts_with(tmp, prefix)) { - lines = bc_slist_append(lines, bc_strdup(tmp + strlen(prefix))); + tmp = sb_strndup(src + start2, end - start2); + if (sb_str_starts_with(tmp, prefix)) { + lines = sb_slist_append(lines, sb_strdup(tmp + strlen(prefix))); state = CONTENT_CODE_END; } else { state = CONTENT_PARAGRAPH; free(prefix); prefix = NULL; - bc_slist_free_full(lines, free); + sb_slist_free_full(lines, free); lines = NULL; free(tmp); tmp = NULL; @@ -978,18 +978,18 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, case CONTENT_CODE_END: if (c == '\n' || c == '\r' || is_last) { - bc_string_append(rv, "<pre><code>"); - for (bc_slist_t *l = lines; l != NULL; l = l->next) { + sb_string_append(rv, "<pre><code>"); + for (sb_slist_t *l = lines; l != NULL; l = l->next) { char *tmp_line = blogc_htmlentities(l->data); if (l->next == NULL) - bc_string_append_printf(rv, "%s", tmp_line); + sb_string_append_printf(rv, "%s", tmp_line); else - bc_string_append_printf(rv, "%s%s", tmp_line, + sb_string_append_printf(rv, "%s%s", tmp_line, line_ending); free(tmp_line); } - bc_string_append_printf(rv, "</code></pre>%s", line_ending); - bc_slist_free_full(lines, free); + sb_string_append_printf(rv, "</code></pre>%s", line_ending); + sb_slist_free_full(lines, free); lines = NULL; free(prefix); prefix = NULL; @@ -1015,7 +1015,7 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, } if (c == ' ' || c == '\t') break; - prefix = bc_strndup(src + start, current - start); + prefix = sb_strndup(src + start, current - start); state = CONTENT_UNORDERED_LIST_START; break; @@ -1036,7 +1036,7 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, break; } if (c == '\n' || c == '\r' || is_last) { - bc_string_append_printf(rv, "<hr />%s", line_ending); + sb_string_append_printf(rv, "<hr />%s", line_ending); state = CONTENT_START_LINE; start = current; d = '\0'; @@ -1049,30 +1049,30 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, if (c == '\n' || c == '\r' || is_last) { end = is_last && c != '\n' && c != '\r' ? src_len : (real_end != 0 ? real_end : current); - tmp = bc_strndup(src + start2, end - start2); - tmp2 = bc_strdup_printf("%-*s", strlen(prefix), ""); - if (bc_str_starts_with(tmp, prefix)) { + tmp = sb_strndup(src + start2, end - start2); + tmp2 = sb_strdup_printf("%-*s", strlen(prefix), ""); + if (sb_str_starts_with(tmp, prefix)) { if (lines2 != NULL) { - tmp_str = bc_string_new(); - for (bc_slist_t *l = lines2; l != NULL; l = l->next) { + tmp_str = sb_string_new(); + for (sb_slist_t *l = lines2; l != NULL; l = l->next) { if (l->next == NULL) - bc_string_append_printf(tmp_str, "%s", l->data); + sb_string_append_printf(tmp_str, "%s", l->data); else - bc_string_append_printf(tmp_str, "%s%s", l->data, + sb_string_append_printf(tmp_str, "%s%s", l->data, line_ending); } - bc_slist_free_full(lines2, free); + sb_slist_free_full(lines2, free); lines2 = NULL; parsed = blogc_content_parse_inline(tmp_str->str); - bc_string_free(tmp_str, true); - lines = bc_slist_append(lines, bc_strdup(parsed)); + sb_string_free(tmp_str, true); + lines = sb_slist_append(lines, sb_strdup(parsed)); free(parsed); parsed = NULL; } - lines2 = bc_slist_append(lines2, bc_strdup(tmp + strlen(prefix))); + lines2 = sb_slist_append(lines2, sb_strdup(tmp + strlen(prefix))); } - else if (bc_str_starts_with(tmp, tmp2)) { - lines2 = bc_slist_append(lines2, bc_strdup(tmp + strlen(prefix))); + else if (sb_str_starts_with(tmp, tmp2)) { + lines2 = sb_slist_append(lines2, sb_strdup(tmp + strlen(prefix))); } else { state = CONTENT_PARAGRAPH_END; @@ -1082,8 +1082,8 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, tmp2 = NULL; free(prefix); prefix = NULL; - bc_slist_free_full(lines, free); - bc_slist_free_full(lines2, free); + sb_slist_free_full(lines, free); + sb_slist_free_full(lines2, free); lines = NULL; if (is_last) continue; @@ -1102,28 +1102,28 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, if (c == '\n' || c == '\r' || is_last) { if (lines2 != NULL) { // FIXME: avoid repeting the code below - tmp_str = bc_string_new(); - for (bc_slist_t *l = lines2; l != NULL; l = l->next) { + tmp_str = sb_string_new(); + for (sb_slist_t *l = lines2; l != NULL; l = l->next) { if (l->next == NULL) - bc_string_append_printf(tmp_str, "%s", l->data); + sb_string_append_printf(tmp_str, "%s", l->data); else - bc_string_append_printf(tmp_str, "%s%s", l->data, + sb_string_append_printf(tmp_str, "%s%s", l->data, line_ending); } - bc_slist_free_full(lines2, free); + sb_slist_free_full(lines2, free); lines2 = NULL; parsed = blogc_content_parse_inline(tmp_str->str); - bc_string_free(tmp_str, true); - lines = bc_slist_append(lines, bc_strdup(parsed)); + sb_string_free(tmp_str, true); + lines = sb_slist_append(lines, sb_strdup(parsed)); free(parsed); parsed = NULL; } - bc_string_append_printf(rv, "<ul>%s", line_ending); - for (bc_slist_t *l = lines; l != NULL; l = l->next) - bc_string_append_printf(rv, "<li>%s</li>%s", l->data, + sb_string_append_printf(rv, "<ul>%s", line_ending); + for (sb_slist_t *l = lines; l != NULL; l = l->next) + sb_string_append_printf(rv, "<li>%s</li>%s", l->data, line_ending); - bc_string_append_printf(rv, "</ul>%s", line_ending); - bc_slist_free_full(lines, free); + sb_string_append_printf(rv, "</ul>%s", line_ending); + sb_slist_free_full(lines, free); lines = NULL; free(prefix); prefix = NULL; @@ -1160,30 +1160,30 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, if (c == '\n' || c == '\r' || is_last) { end = is_last && c != '\n' && c != '\r' ? src_len : (real_end != 0 ? real_end : current); - tmp = bc_strndup(src + start2, end - start2); - tmp2 = bc_strdup_printf("%-*s", prefix_len, ""); + tmp = sb_strndup(src + start2, end - start2); + tmp2 = sb_strdup_printf("%-*s", prefix_len, ""); if (blogc_is_ordered_list_item(tmp, prefix_len)) { if (lines2 != NULL) { - tmp_str = bc_string_new(); - for (bc_slist_t *l = lines2; l != NULL; l = l->next) { + tmp_str = sb_string_new(); + for (sb_slist_t *l = lines2; l != NULL; l = l->next) { if (l->next == NULL) - bc_string_append_printf(tmp_str, "%s", l->data); + sb_string_append_printf(tmp_str, "%s", l->data); else - bc_string_append_printf(tmp_str, "%s%s", l->data, + sb_string_append_printf(tmp_str, "%s%s", l->data, line_ending); } - bc_slist_free_full(lines2, free); + sb_slist_free_full(lines2, free); lines2 = NULL; parsed = blogc_content_parse_inline(tmp_str->str); - bc_string_free(tmp_str, true); - lines = bc_slist_append(lines, bc_strdup(parsed)); + sb_string_free(tmp_str, true); + lines = sb_slist_append(lines, sb_strdup(parsed)); free(parsed); parsed = NULL; } - lines2 = bc_slist_append(lines2, bc_strdup(tmp + prefix_len)); + lines2 = sb_slist_append(lines2, sb_strdup(tmp + prefix_len)); } - else if (bc_str_starts_with(tmp, tmp2)) { - lines2 = bc_slist_append(lines2, bc_strdup(tmp + prefix_len)); + else if (sb_str_starts_with(tmp, tmp2)) { + lines2 = sb_slist_append(lines2, sb_strdup(tmp + prefix_len)); } else { state = CONTENT_PARAGRAPH_END; @@ -1193,8 +1193,8 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, tmp2 = NULL; free(parsed); parsed = NULL; - bc_slist_free_full(lines, free); - bc_slist_free_full(lines2, free); + sb_slist_free_full(lines, free); + sb_slist_free_full(lines2, free); lines = NULL; if (is_last) continue; @@ -1213,28 +1213,28 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, if (c == '\n' || c == '\r' || is_last) { if (lines2 != NULL) { // FIXME: avoid repeting the code below - tmp_str = bc_string_new(); - for (bc_slist_t *l = lines2; l != NULL; l = l->next) { + tmp_str = sb_string_new(); + for (sb_slist_t *l = lines2; l != NULL; l = l->next) { if (l->next == NULL) - bc_string_append_printf(tmp_str, "%s", l->data); + sb_string_append_printf(tmp_str, "%s", l->data); else - bc_string_append_printf(tmp_str, "%s%s", l->data, + sb_string_append_printf(tmp_str, "%s%s", l->data, line_ending); } - bc_slist_free_full(lines2, free); + sb_slist_free_full(lines2, free); lines2 = NULL; parsed = blogc_content_parse_inline(tmp_str->str); - bc_string_free(tmp_str, true); - lines = bc_slist_append(lines, bc_strdup(parsed)); + sb_string_free(tmp_str, true); + lines = sb_slist_append(lines, sb_strdup(parsed)); free(parsed); parsed = NULL; } - bc_string_append_printf(rv, "<ol>%s", line_ending); - for (bc_slist_t *l = lines; l != NULL; l = l->next) - bc_string_append_printf(rv, "<li>%s</li>%s", l->data, + sb_string_append_printf(rv, "<ol>%s", line_ending); + for (sb_slist_t *l = lines; l != NULL; l = l->next) + sb_string_append_printf(rv, "<li>%s</li>%s", l->data, line_ending); - bc_string_append_printf(rv, "</ol>%s", line_ending); - bc_slist_free_full(lines, free); + sb_string_append_printf(rv, "</ol>%s", line_ending); + sb_slist_free_full(lines, free); lines = NULL; free(prefix); prefix = NULL; @@ -1258,11 +1258,11 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, case CONTENT_PARAGRAPH_END: if (c == '\n' || c == '\r' || is_last) { - tmp = bc_strndup(src + start, end - start); + tmp = sb_strndup(src + start, end - start); if (description != NULL && *description == NULL) *description = blogc_fix_description(tmp); parsed = blogc_content_parse_inline(tmp); - bc_string_append_printf(rv, "<p>%s</p>%s", parsed, + sb_string_append_printf(rv, "<p>%s</p>%s", parsed, line_ending); free(parsed); parsed = NULL; @@ -1280,5 +1280,5 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, current++; } - return bc_string_free(rv, false); + return sb_string_free(rv, false); } diff --git a/src/blogc/datetime-parser.c b/src/blogc/datetime-parser.c index ddaf6ef..5cb6520 100644 --- a/src/blogc/datetime-parser.c +++ b/src/blogc/datetime-parser.c @@ -15,10 +15,9 @@ #endif /* HAVE_TIME_H */ #include <string.h> +#include <squareball.h> #include "datetime-parser.h" -#include "../common/error.h" -#include "../common/utils.h" typedef enum { @@ -47,16 +46,16 @@ typedef enum { char* blogc_convert_datetime(const char *orig, const char *format, - bc_error_t **err) + sb_error_t **err) { if (err == NULL || *err != NULL) return NULL; #ifndef HAVE_TIME_H - *err = bc_error_new(BLOGC_WARNING_DATETIME_PARSER, - "Your operating system does not supports the datetime functionalities " - "used by blogc. Sorry."); + *err = sb_strerror_new( + "datetime: Your operating system does not supports the datetime " + "functionalities used by blogc. Sorry."); return NULL; #else @@ -80,8 +79,8 @@ blogc_convert_datetime(const char *orig, const char *format, state = DATETIME_SECOND_YEAR; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid first digit of year. " + *err = sb_strerror_new_printf( + "datetime: Invalid first digit of year. " "Found '%c', must be integer >= 0 and <= 9.", c); break; @@ -91,8 +90,8 @@ blogc_convert_datetime(const char *orig, const char *format, state = DATETIME_THIRD_YEAR; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid second digit of year. " + *err = sb_strerror_new_printf( + "datetime: Invalid second digit of year. " "Found '%c', must be integer >= 0 and <= 9.", c); break; @@ -102,8 +101,8 @@ blogc_convert_datetime(const char *orig, const char *format, state = DATETIME_FOURTH_YEAR; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid third digit of year. " + *err = sb_strerror_new_printf( + "datetime: Invalid third digit of year. " "Found '%c', must be integer >= 0 and <= 9.", c); break; @@ -111,8 +110,8 @@ blogc_convert_datetime(const char *orig, const char *format, if (c >= '0' && c <= '9') { tmp += c - diff - 1900; if (tmp < 0) { - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid year. Found %d, must be >= 1900.", + *err = sb_strerror_new_printf( + "datetime: Invalid year. Found %d, must be >= 1900.", tmp + 1900); break; } @@ -120,8 +119,8 @@ blogc_convert_datetime(const char *orig, const char *format, state = DATETIME_FIRST_HYPHEN; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid fourth digit of year. " + *err = sb_strerror_new_printf( + "datetime: Invalid fourth digit of year. " "Found '%c', must be integer >= 0 and <= 9.", c); break; @@ -131,8 +130,8 @@ blogc_convert_datetime(const char *orig, const char *format, state = DATETIME_FIRST_MONTH; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid separator between year and month. " + *err = sb_strerror_new_printf( + "datetime: Invalid separator between year and month. " "Found '%c', must be '-'.", c); break; @@ -142,8 +141,8 @@ blogc_convert_datetime(const char *orig, const char *format, state = DATETIME_SECOND_MONTH; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid first digit of month. " + *err = sb_strerror_new_printf( + "datetime: Invalid first digit of month. " "Found '%c', must be integer >= 0 and <= 1.", c); break; @@ -151,17 +150,17 @@ blogc_convert_datetime(const char *orig, const char *format, if (c >= '0' && c <= '9') { tmp += c - diff - 1; if (tmp < 0 || tmp > 11) { - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid month. Found %d, must be >= 1 and <= 12.", - tmp + 1); + *err = sb_strerror_new_printf( + "datetime: Invalid month. " + "Found %d, must be >= 1 and <= 12.", tmp + 1); break; } t.tm_mon = tmp; state = DATETIME_SECOND_HYPHEN; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid second digit of month. " + *err = sb_strerror_new_printf( + "datetime: Invalid second digit of month. " "Found '%c', must be integer >= 0 and <= 9.", c); break; @@ -171,8 +170,8 @@ blogc_convert_datetime(const char *orig, const char *format, state = DATETIME_FIRST_DAY; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid separator between month and day. " + *err = sb_strerror_new_printf( + "datetime: Invalid separator between month and day. " "Found '%c', must be '-'.", c); break; @@ -182,8 +181,8 @@ blogc_convert_datetime(const char *orig, const char *format, state = DATETIME_SECOND_DAY; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid first digit of day. " + *err = sb_strerror_new_printf( + "datetime: Invalid first digit of day. " "Found '%c', must be integer >= 0 and <= 3.", c); break; @@ -191,17 +190,17 @@ blogc_convert_datetime(const char *orig, const char *format, if (c >= '0' && c <= '9') { tmp += c - diff; if (tmp < 1 || tmp > 31) { - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid day. Found %d, must be >= 1 and <= 31.", - tmp); + *err = sb_strerror_new_printf( + "datetime: Invalid day. " + "Found %d, must be >= 1 and <= 31.", tmp); break; } t.tm_mday = tmp; state = DATETIME_SPACE; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid second digit of day. " + *err = sb_strerror_new_printf( + "datetime: Invalid second digit of day. " "Found '%c', must be integer >= 0 and <= 9.", c); break; @@ -211,8 +210,8 @@ blogc_convert_datetime(const char *orig, const char *format, state = DATETIME_FIRST_HOUR; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid separator between date and time. " + *err = sb_strerror_new_printf( + "datetime: Invalid separator between date and time. " "Found '%c', must be ' ' (empty space).", c); break; @@ -222,8 +221,8 @@ blogc_convert_datetime(const char *orig, const char *format, state = DATETIME_SECOND_HOUR; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid first digit of hours. " + *err = sb_strerror_new_printf( + "datetime: Invalid first digit of hours. " "Found '%c', must be integer >= 0 and <= 2.", c); break; @@ -231,17 +230,17 @@ blogc_convert_datetime(const char *orig, const char *format, if (c >= '0' && c <= '9') { tmp += c - diff; if (tmp < 0 || tmp > 23) { - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid hours. Found %d, must be >= 0 and <= 23.", - tmp); + *err = sb_strerror_new_printf( + "datetime: Invalid hours. " + "Found %d, must be >= 0 and <= 23.", tmp); break; } t.tm_hour = tmp; state = DATETIME_FIRST_COLON; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid second digit of hours. " + *err = sb_strerror_new_printf( + "datetime: Invalid second digit of hours. " "Found '%c', must be integer >= 0 and <= 9.", c); break; @@ -251,8 +250,8 @@ blogc_convert_datetime(const char *orig, const char *format, state = DATETIME_FIRST_MINUTE; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid separator between hours and minutes. " + *err = sb_strerror_new_printf( + "datetime: Invalid separator between hours and minutes. " "Found '%c', must be ':'.", c); break; @@ -262,8 +261,8 @@ blogc_convert_datetime(const char *orig, const char *format, state = DATETIME_SECOND_MINUTE; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid first digit of minutes. " + *err = sb_strerror_new_printf( + "datetime: Invalid first digit of minutes. " "Found '%c', must be integer >= 0 and <= 5.", c); break; @@ -274,17 +273,17 @@ blogc_convert_datetime(const char *orig, const char *format, // this won't happen because we are restricting the digits // to 00-59 already, but lets keep the code here for // reference. - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid minutes. Found %d, must be >= 0 and <= 59.", - tmp); + *err = sb_strerror_new_printf( + "datetime: Invalid minutes. " + "Found %d, must be >= 0 and <= 59.", tmp); break; } t.tm_min = tmp; state = DATETIME_SECOND_COLON; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid second digit of minutes. " + *err = sb_strerror_new_printf( + "datetime: Invalid second digit of minutes. " "Found '%c', must be integer >= 0 and <= 9.", c); break; @@ -294,8 +293,8 @@ blogc_convert_datetime(const char *orig, const char *format, state = DATETIME_FIRST_SECOND; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid separator between minutes and seconds. " + *err = sb_strerror_new_printf( + "datetime: Invalid separator between minutes and seconds. " "Found '%c', must be ':'.", c); break; @@ -305,8 +304,8 @@ blogc_convert_datetime(const char *orig, const char *format, state = DATETIME_SECOND_SECOND; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid first digit of seconds. " + *err = sb_strerror_new_printf( + "datetime: Invalid first digit of seconds. " "Found '%c', must be integer >= 0 and <= 6.", c); break; @@ -314,17 +313,17 @@ blogc_convert_datetime(const char *orig, const char *format, if (c >= '0' && c <= '9') { tmp += c - diff; if (tmp < 0 || tmp > 60) { - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid seconds. Found %d, must be >= 0 and <= 60.", - tmp); + *err = sb_strerror_new_printf( + "datetime: Invalid seconds. " + "Found %d, must be >= 0 and <= 60.", tmp); break; } t.tm_sec = tmp; state = DATETIME_DONE; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid second digit of seconds. " + *err = sb_strerror_new_printf( + "datetime: Invalid second digit of seconds. " "Found '%c', must be integer >= 0 and <= 9.", c); break; @@ -355,8 +354,8 @@ blogc_convert_datetime(const char *orig, const char *format, case DATETIME_SECOND_MINUTE: case DATETIME_FIRST_SECOND: case DATETIME_SECOND_SECOND: - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid datetime string. " + *err = sb_strerror_new_printf( + "datetime: Invalid datetime string. " "Found '%s', formats allowed are: 'yyyy-mm-dd hh:mm:ss', " "'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and 'yyyy-mm-dd'.", orig); @@ -374,13 +373,13 @@ blogc_convert_datetime(const char *orig, const char *format, char buf[1024]; if (0 == strftime(buf, sizeof(buf), format, &t)) { - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Failed to format DATE variable, FORMAT is too long: %s", + *err = sb_strerror_new_printf( + "datetime: Failed to format DATE variable, FORMAT is too long: %s", format); return NULL; } - return bc_strdup(buf); + return sb_strdup(buf); #endif } diff --git a/src/blogc/datetime-parser.h b/src/blogc/datetime-parser.h index 8617ad0..25d03f2 100644 --- a/src/blogc/datetime-parser.h +++ b/src/blogc/datetime-parser.h @@ -9,9 +9,9 @@ #ifndef _DATETIME_H #define _DATETIME_H -#include "../common/error.h" +#include <squareball.h> char* blogc_convert_datetime(const char *orig, const char *format, - bc_error_t **err); + sb_error_t **err); #endif /* _DATETIME_H */ diff --git a/src/blogc/debug.c b/src/blogc/debug.c index 11e7973..851d4cb 100644 --- a/src/blogc/debug.c +++ b/src/blogc/debug.c @@ -7,9 +7,9 @@ */ #include <stdio.h> +#include <squareball.h> #include "template-parser.h" -#include "../common/utils.h" #include "debug.h" @@ -34,9 +34,9 @@ get_operator(blogc_template_operator_t op) void -blogc_debug_template(bc_slist_t *ast) +blogc_debug_template(sb_slist_t *ast) { - for (bc_slist_t *tmp = ast; tmp != NULL; tmp = tmp->next) { + for (sb_slist_t *tmp = ast; tmp != NULL; tmp = tmp->next) { blogc_template_node_t *data = tmp->data; fprintf(stderr, "DEBUG: <TEMPLATE "); switch (data->type) { diff --git a/src/blogc/debug.h b/src/blogc/debug.h index 6138a91..8bff4cf 100644 --- a/src/blogc/debug.h +++ b/src/blogc/debug.h @@ -9,8 +9,8 @@ #ifndef ___DEBUG_H #define ___DEBUG_H -#include "../common/utils.h" +#include <squareball.h> -void blogc_debug_template(bc_slist_t *ast); +void blogc_debug_template(sb_slist_t *ast); #endif /* ___DEBUG_H */ diff --git a/src/blogc/funcvars.c b/src/blogc/funcvars.c index 6f0700b..358e3b4 100644 --- a/src/blogc/funcvars.c +++ b/src/blogc/funcvars.c @@ -9,11 +9,11 @@ #include <stdbool.h> #include <stdlib.h> #include <string.h> +#include <squareball.h> -#include "funcvars.h" #include "rusage.h" #include "sysinfo.h" -#include "../common/utils.h" +#include "funcvars.h" static const struct func_map { @@ -41,14 +41,14 @@ static const struct func_map { void -blogc_funcvars_eval(bc_trie_t *global, const char *name) +blogc_funcvars_eval(sb_trie_t *global, const char *name) { if (global == NULL || name == NULL) return; // protect against evaluating the same function twice in the same global // context - if (NULL != bc_trie_lookup(global, name)) + if (NULL != sb_trie_lookup(global, name)) return; for (size_t i = 0; funcs[i].variable != NULL; i++) { diff --git a/src/blogc/funcvars.h b/src/blogc/funcvars.h index aae1bc3..3768f81 100644 --- a/src/blogc/funcvars.h +++ b/src/blogc/funcvars.h @@ -10,10 +10,10 @@ #define ___FUNCVARS_H #include <stdbool.h> -#include "../common/utils.h" +#include <squareball.h> -typedef void (*blogc_funcvars_func_t) (bc_trie_t*); +typedef void (*blogc_funcvars_func_t) (sb_trie_t*); -void blogc_funcvars_eval(bc_trie_t *global, const char *name); +void blogc_funcvars_eval(sb_trie_t *global, const char *name); #endif /* ___FUNCVARS_H */ 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; diff --git a/src/blogc/loader.h b/src/blogc/loader.h index 66da7d0..89de4db 100644 --- a/src/blogc/loader.h +++ b/src/blogc/loader.h @@ -9,13 +9,12 @@ #ifndef _LOADER_H #define _LOADER_H -#include "../common/error.h" -#include "../common/utils.h" +#include <squareball.h> char* blogc_get_filename(const char *f); -bc_slist_t* blogc_template_parse_from_file(const char *f, bc_error_t **err); -bc_trie_t* blogc_source_parse_from_file(const char *f, bc_error_t **err); -bc_slist_t* blogc_source_parse_from_files(bc_trie_t *conf, bc_slist_t *l, - bc_error_t **err); +sb_slist_t* blogc_template_parse_from_file(const char *f, sb_error_t **err); +sb_trie_t* blogc_source_parse_from_file(const char *f, sb_error_t **err); +sb_slist_t* blogc_source_parse_from_files(sb_trie_t *conf, sb_slist_t *l, + sb_error_t **err); #endif /* _LOADER_H */ diff --git a/src/blogc/main.c b/src/blogc/main.c index 2f93d18..a12fa90 100644 --- a/src/blogc/main.c +++ b/src/blogc/main.c @@ -27,14 +27,12 @@ #include <stdint.h> #include <stdlib.h> #include <string.h> +#include <squareball.h> #include "debug.h" #include "template-parser.h" #include "loader.h" #include "renderer.h" -#include "../common/error.h" -#include "../common/utf8.h" -#include "../common/utils.h" #ifdef MAKE_EMBEDDED extern int bm_main(int argc, char **argv); @@ -94,7 +92,7 @@ blogc_print_usage(void) static void blogc_mkdir_recursive(const char *filename) { - char *fname = bc_strdup(filename); + char *fname = sb_strdup(filename); for (char *tmp = fname; *tmp != '\0'; tmp++) { if (*tmp != '/' && *tmp != '\\') continue; @@ -126,8 +124,8 @@ blogc_mkdir_recursive(const char *filename) } -static bc_slist_t* -blogc_read_stdin_to_list(bc_slist_t *l) +static sb_slist_t* +blogc_read_stdin_to_list(sb_slist_t *l) { char buffer[4096]; while (NULL != fgets(buffer, 4096, stdin)) { @@ -142,7 +140,7 @@ blogc_read_stdin_to_list(bc_slist_t *l) buffer[len - 1] = '\0'; if (strlen(buffer) == 0) continue; - l = bc_slist_append(l, bc_strdup(buffer)); + l = sb_slist_append(l, sb_strdup(buffer)); } return l; } @@ -168,10 +166,10 @@ main(int argc, char **argv) char *tmp = NULL; char **pieces = NULL; - bc_slist_t *sources = NULL; - bc_trie_t *listing_entry_source = NULL; - bc_trie_t *config = bc_trie_new(free); - bc_trie_insert(config, "BLOGC_VERSION", bc_strdup(PACKAGE_VERSION)); + sb_slist_t *sources = NULL; + sb_trie_t *listing_entry_source = NULL; + sb_trie_t *config = sb_trie_new(free); + sb_trie_insert(config, "BLOGC_VERSION", sb_strdup(PACKAGE_VERSION)); for (size_t i = 1; i < argc; i++) { tmp = NULL; @@ -194,27 +192,27 @@ main(int argc, char **argv) break; case 'e': if (argv[i][2] != '\0') - listing_entry = bc_strdup(argv[i] + 2); + listing_entry = sb_strdup(argv[i] + 2); else if (i + 1 < argc) - listing_entry = bc_strdup(argv[++i]); + listing_entry = sb_strdup(argv[++i]); break; case 't': if (argv[i][2] != '\0') - template = bc_strdup(argv[i] + 2); + template = sb_strdup(argv[i] + 2); else if (i + 1 < argc) - template = bc_strdup(argv[++i]); + template = sb_strdup(argv[++i]); break; case 'o': if (argv[i][2] != '\0') - output = bc_strdup(argv[i] + 2); + output = sb_strdup(argv[i] + 2); else if (i + 1 < argc) - output = bc_strdup(argv[++i]); + output = sb_strdup(argv[++i]); break; case 'p': if (argv[i][2] != '\0') - print = bc_strdup(argv[i] + 2); + print = sb_strdup(argv[i] + 2); else if (i + 1 < argc) - print = bc_strdup(argv[++i]); + print = sb_strdup(argv[++i]); break; case 'D': if (argv[i][2] != '\0') @@ -222,16 +220,16 @@ main(int argc, char **argv) else if (i + 1 < argc) tmp = argv[++i]; if (tmp != NULL) { - if (!bc_utf8_validate((uint8_t*) tmp, strlen(tmp))) { + if (!sb_utf8_validate((uint8_t*) tmp, strlen(tmp))) { fprintf(stderr, "blogc: error: invalid value for " "-D (must be valid UTF-8 string): %s\n", tmp); goto cleanup; } - pieces = bc_str_split(tmp, '=', 2); - if (bc_strv_length(pieces) != 2) { + pieces = sb_str_split(tmp, '=', 2); + if (sb_strv_length(pieces) != 2) { fprintf(stderr, "blogc: error: invalid value for " "-D (must have an '='): %s\n", tmp); - bc_strv_free(pieces); + sb_strv_free(pieces); rv = 1; goto cleanup; } @@ -242,13 +240,13 @@ main(int argc, char **argv) fprintf(stderr, "blogc: error: invalid value " "for -D (configuration key must be uppercase " "with '_'): %s\n", pieces[0]); - bc_strv_free(pieces); + sb_strv_free(pieces); rv = 1; goto cleanup; } } - bc_trie_insert(config, pieces[0], bc_strdup(pieces[1])); - bc_strv_free(pieces); + sb_trie_insert(config, pieces[0], sb_strdup(pieces[1])); + sb_strv_free(pieces); pieces = NULL; } break; @@ -266,7 +264,7 @@ main(int argc, char **argv) } } else { - sources = bc_slist_append(sources, bc_strdup(argv[i])); + sources = sb_slist_append(sources, sb_strdup(argv[i])); } #ifdef MAKE_EMBEDDED @@ -281,14 +279,14 @@ main(int argc, char **argv) if (input_stdin) sources = blogc_read_stdin_to_list(sources); - if (!listing && bc_slist_length(sources) == 0) { + if (!listing && sb_slist_length(sources) == 0) { blogc_print_usage(); fprintf(stderr, "blogc: error: one source file is required\n"); rv = 1; goto cleanup; } - if (!listing && bc_slist_length(sources) > 1) { + if (!listing && sb_slist_length(sources) > 1) { blogc_print_usage(); fprintf(stderr, "blogc: error: only one source file should be provided, " "if running without '-l'\n"); @@ -296,11 +294,11 @@ main(int argc, char **argv) goto cleanup; } - bc_error_t *err = NULL; + sb_error_t *err = NULL; - bc_slist_t *s = blogc_source_parse_from_files(config, sources, &err); + sb_slist_t *s = blogc_source_parse_from_files(config, sources, &err); if (err != NULL) { - bc_error_print(err, "blogc"); + fprintf(stderr, "blogc: error: %s\n", sb_error_to_string(err)); rv = 1; goto cleanup2; } @@ -308,14 +306,14 @@ main(int argc, char **argv) if (listing && listing_entry != NULL) { listing_entry_source = blogc_source_parse_from_file(listing_entry, &err); if (err != NULL) { - bc_error_print(err, "blogc"); + fprintf(stderr, "blogc: error: %s\n", sb_error_to_string(err)); rv = 1; goto cleanup2; } } if (print != NULL) { - bc_trie_t *local = NULL; + sb_trie_t *local = NULL; if (!listing && s != NULL) { local = s->data; } @@ -339,9 +337,9 @@ main(int argc, char **argv) goto cleanup2; } - bc_slist_t* l = blogc_template_parse_from_file(template, &err); + sb_slist_t* l = blogc_template_parse_from_file(template, &err); if (err != NULL) { - bc_error_print(err, "blogc"); + fprintf(stderr, "blogc: error: %s\n", sb_error_to_string(err)); rv = 1; goto cleanup3; } @@ -376,15 +374,15 @@ cleanup4: cleanup3: blogc_template_free_ast(l); cleanup2: - bc_slist_free_full(s, (bc_free_func_t) bc_trie_free); - bc_error_free(err); + sb_slist_free_full(s, (sb_free_func_t) sb_trie_free); + sb_error_free(err); cleanup: - bc_trie_free(config); + sb_trie_free(config); free(template); free(output); free(print); free(listing_entry); - bc_trie_free(listing_entry_source); - bc_slist_free_full(sources, free); + sb_trie_free(listing_entry_source); + sb_slist_free_full(sources, free); return rv; } diff --git a/src/blogc/renderer.c b/src/blogc/renderer.c index 87b3f5a..42e4d29 100644 --- a/src/blogc/renderer.c +++ b/src/blogc/renderer.c @@ -11,67 +11,68 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <squareball.h> + #include "datetime-parser.h" #include "funcvars.h" #include "template-parser.h" #include "renderer.h" -#include "../common/error.h" -#include "../common/utils.h" const char* -blogc_get_variable(const char *name, bc_trie_t *global, bc_trie_t *local) +blogc_get_variable(const char *name, sb_trie_t *global, sb_trie_t *local) { const char *rv = NULL; if (local != NULL) { - rv = bc_trie_lookup(local, name); + rv = sb_trie_lookup(local, name); if (rv != NULL) return rv; } if (global != NULL) - rv = bc_trie_lookup(global, name); + rv = sb_trie_lookup(global, name); return rv; } char* -blogc_format_date(const char *date, bc_trie_t *global, bc_trie_t *local) +blogc_format_date(const char *date, sb_trie_t *global, sb_trie_t *local) { const char *date_format = blogc_get_variable("DATE_FORMAT", global, local); if (date == NULL) return NULL; if (date_format == NULL) - return bc_strdup(date); + return sb_strdup(date); - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *rv = blogc_convert_datetime(date, date_format, &err); if (err != NULL) { - bc_error_print(err, "blogc"); - bc_error_free(err); - return bc_strdup(date); + fprintf(stderr, "blogc: warning: An error occurred while formatting " + "date:\n> %s\n", sb_error_to_string(err)); + sb_error_free(err); + return sb_strdup(date); } return rv; } char* -blogc_format_variable(const char *name, bc_trie_t *global, bc_trie_t *local, - bc_slist_t *foreach_var) +blogc_format_variable(const char *name, sb_trie_t *global, sb_trie_t *local, + sb_slist_t *foreach_var) { // if used asked for a variable that exists, just return it right away const char *value = blogc_get_variable(name, global, local); if (value != NULL) - return bc_strdup(value); + return sb_strdup(value); // do the same for special variable 'FOREACH_ITEM' if (0 == strcmp(name, "FOREACH_ITEM")) { if (foreach_var != NULL && foreach_var->data != NULL) { - return bc_strdup(foreach_var->data); + return sb_strdup(foreach_var->data); } return NULL; } - char *var = bc_strdup(name); + char *var = sb_strdup(name); size_t i; size_t last = strlen(var); @@ -96,7 +97,7 @@ blogc_format_variable(const char *name, bc_trie_t *global, bc_trie_t *local, bool must_format = false; - if (bc_str_ends_with(var, "_FORMATTED")) { + if (sb_str_ends_with(var, "_FORMATTED")) { var[strlen(var) - 10] = '\0'; must_format = true; } @@ -118,23 +119,23 @@ blogc_format_variable(const char *name, bc_trie_t *global, bc_trie_t *local, char *rv = NULL; if (must_format) { - if (bc_str_starts_with(name, "DATE_")) { + if (sb_str_starts_with(name, "DATE_")) { rv = blogc_format_date(value, global, local); } else { fprintf(stderr, "warning: no formatter found for '%s', " "ignoring.\n", var); - rv = bc_strdup(value); + rv = sb_strdup(value); } } else { - rv = bc_strdup(value); + rv = sb_strdup(value); } free(var); if (len > 0) { - char *tmp = bc_strndup(rv, len); + char *tmp = sb_strndup(rv, len); free(rv); rv = tmp; } @@ -143,19 +144,19 @@ blogc_format_variable(const char *name, bc_trie_t *global, bc_trie_t *local, } -bc_slist_t* -blogc_split_list_variable(const char *name, bc_trie_t *global, bc_trie_t *local) +sb_slist_t* +blogc_split_list_variable(const char *name, sb_trie_t *global, sb_trie_t *local) { const char *value = blogc_get_variable(name, global, local); if (value == NULL) return NULL; - bc_slist_t *rv = NULL; + sb_slist_t *rv = NULL; - char **tmp = bc_str_split(value, ' ', 0); + char **tmp = sb_str_split(value, ' ', 0); for (size_t i = 0; tmp[i] != NULL; i++) { if (tmp[i][0] != '\0') // ignore empty strings - rv = bc_slist_append(rv, tmp[i]); + rv = sb_slist_append(rv, tmp[i]); else free(tmp[i]); } @@ -166,25 +167,25 @@ blogc_split_list_variable(const char *name, bc_trie_t *global, bc_trie_t *local) char* -blogc_render(bc_slist_t *tmpl, bc_slist_t *sources, bc_trie_t *listing_entry, bc_trie_t *config, bool listing) +blogc_render(sb_slist_t *tmpl, sb_slist_t *sources, sb_trie_t *listing_entry, sb_trie_t *config, bool listing) { if (tmpl == NULL) return NULL; - bc_slist_t *current_source = NULL; - bc_slist_t *listing_start = NULL; + sb_slist_t *current_source = NULL; + sb_slist_t *listing_start = NULL; - bc_string_t *str = bc_string_new(); + sb_string_t *str = sb_string_new(); - bc_trie_t *tmp_source = NULL; + sb_trie_t *tmp_source = NULL; char *config_value = NULL; char *defined = NULL; size_t if_count = 0; - bc_slist_t *foreach_var = NULL; - bc_slist_t *foreach_var_start = NULL; - bc_slist_t *foreach_start = NULL; + sb_slist_t *foreach_var = NULL; + sb_slist_t *foreach_var_start = NULL; + sb_slist_t *foreach_start = NULL; bool if_not = false; bool inside_block = false; @@ -193,7 +194,7 @@ blogc_render(bc_slist_t *tmpl, bc_slist_t *sources, bc_trie_t *listing_entry, bc int cmp = 0; - bc_slist_t *tmp = tmpl; + sb_slist_t *tmp = tmpl; while (tmp != NULL) { blogc_template_node_t *node = tmp->data; @@ -201,7 +202,7 @@ blogc_render(bc_slist_t *tmpl, bc_slist_t *sources, bc_trie_t *listing_entry, bc case BLOGC_TEMPLATE_NODE_CONTENT: if (node->data[0] != NULL) - bc_string_append(str, node->data[0]); + sb_string_append(str, node->data[0]); break; case BLOGC_TEMPLATE_NODE_BLOCK: @@ -272,7 +273,7 @@ blogc_render(bc_slist_t *tmpl, bc_slist_t *sources, bc_trie_t *listing_entry, bc config_value = blogc_format_variable(node->data[0], config, inside_block ? tmp_source : NULL, foreach_var); if (config_value != NULL) { - bc_string_append(str, config_value); + sb_string_append(str, config_value); free(config_value); config_value = NULL; break; @@ -314,7 +315,7 @@ blogc_render(bc_slist_t *tmpl, bc_slist_t *sources, bc_trie_t *listing_entry, bc (node->data[1][0] == '"') && (node->data[1][strlen(node->data[1]) - 1] == '"')) { - defined2 = bc_strndup(node->data[1] + 1, + defined2 = sb_strndup(node->data[1] + 1, strlen(node->data[1]) - 2); } else { @@ -463,7 +464,7 @@ blogc_render(bc_slist_t *tmpl, bc_slist_t *sources, bc_trie_t *listing_entry, bc } } foreach_start = NULL; - bc_slist_free_full(foreach_var_start, free); + sb_slist_free_full(foreach_var_start, free); foreach_var_start = NULL; break; } @@ -473,5 +474,5 @@ blogc_render(bc_slist_t *tmpl, bc_slist_t *sources, bc_trie_t *listing_entry, bc // no need to free temporary variables here. the template parser makes sure // that templates are sane and statements are closed. - return bc_string_free(str, false); + return sb_string_free(str, false); } diff --git a/src/blogc/renderer.h b/src/blogc/renderer.h index 8f2516a..c0bf289 100644 --- a/src/blogc/renderer.h +++ b/src/blogc/renderer.h @@ -10,15 +10,15 @@ #define _RENDERER_H #include <stdbool.h> -#include "../common/utils.h" +#include <squareball.h> -const char* blogc_get_variable(const char *name, bc_trie_t *global, bc_trie_t *local); -char* blogc_format_date(const char *date, bc_trie_t *global, bc_trie_t *local); -char* blogc_format_variable(const char *name, bc_trie_t *global, bc_trie_t *local, - bc_slist_t *foreach_var); -bc_slist_t* blogc_split_list_variable(const char *name, bc_trie_t *global, - bc_trie_t *local); -char* blogc_render(bc_slist_t *tmpl, bc_slist_t *sources, bc_trie_t *listing_entr, - bc_trie_t *config, bool listing); +const char* blogc_get_variable(const char *name, sb_trie_t *global, sb_trie_t *local); +char* blogc_format_date(const char *date, sb_trie_t *global, sb_trie_t *local); +char* blogc_format_variable(const char *name, sb_trie_t *global, sb_trie_t *local, + sb_slist_t *foreach_var); +sb_slist_t* blogc_split_list_variable(const char *name, sb_trie_t *global, + sb_trie_t *local); +char* blogc_render(sb_slist_t *tmpl, sb_slist_t *sources, sb_trie_t *listing_entr, + sb_trie_t *config, bool listing); #endif /* _RENDERER_H */ diff --git a/src/blogc/rusage.c b/src/blogc/rusage.c index a38848d..8753506 100644 --- a/src/blogc/rusage.c +++ b/src/blogc/rusage.c @@ -19,7 +19,8 @@ #endif /* HAVE_SYS_RESOURCE_H */ #include <stdlib.h> -#include "../common/utils.h" +#include <squareball.h> + #include "rusage.h" @@ -33,7 +34,7 @@ blogc_rusage_get(void) if (0 != getrusage(RUSAGE_SELF, &usage)) return NULL; - blogc_rusage_t *rv = bc_malloc(sizeof(blogc_rusage_t)); + blogc_rusage_t *rv = sb_malloc(sizeof(blogc_rusage_t)); rv->cpu_time = ( (usage.ru_utime.tv_sec * 1000000) + usage.ru_utime.tv_usec + (usage.ru_stime.tv_sec * 1000000) + usage.ru_stime.tv_usec); @@ -48,14 +49,14 @@ char* blogc_rusage_format_cpu_time(long long time) { if (time >= 1000000) - return bc_strdup_printf("%.3fs", ((float) time) / 1000000.0); + return sb_strdup_printf("%.3fs", ((float) time) / 1000000.0); // this is a special case: some systems may report the cpu time rounded up to the // milisecond. it is useless to show ".000" in this case. if (time >= 1000) - return bc_strdup_printf("%.*fms", time % 1000 ? 3 : 0, ((float) time) / 1000.0); + return sb_strdup_printf("%.*fms", time % 1000 ? 3 : 0, ((float) time) / 1000.0); - return bc_strdup_printf("%dus", time); + return sb_strdup_printf("%dus", time); } @@ -63,23 +64,23 @@ char* blogc_rusage_format_memory(long mem) { if (mem >= 1048576) - return bc_strdup_printf("%.3fGB", ((float) mem) / 1048576.0); + return sb_strdup_printf("%.3fGB", ((float) mem) / 1048576.0); if (mem >= 1024) - return bc_strdup_printf("%.3fMB", ((float) mem) / 1024.0); - return bc_strdup_printf("%dKB", mem); + return sb_strdup_printf("%.3fMB", ((float) mem) / 1024.0); + return sb_strdup_printf("%dKB", mem); } void -blogc_rusage_inject(bc_trie_t *global) +blogc_rusage_inject(sb_trie_t *global) { blogc_rusage_t *usage = blogc_rusage_get(); if (usage == NULL) return; - bc_trie_insert(global, "BLOGC_RUSAGE_CPU_TIME", + sb_trie_insert(global, "BLOGC_RUSAGE_CPU_TIME", blogc_rusage_format_cpu_time(usage->cpu_time)); - bc_trie_insert(global, "BLOGC_RUSAGE_MEMORY", + sb_trie_insert(global, "BLOGC_RUSAGE_MEMORY", blogc_rusage_format_memory(usage->memory)); free(usage); diff --git a/src/blogc/rusage.h b/src/blogc/rusage.h index 6344066..725a3b6 100644 --- a/src/blogc/rusage.h +++ b/src/blogc/rusage.h @@ -19,7 +19,7 @@ #endif #endif -#include "../common/utils.h" +#include <squareball.h> typedef struct { long long cpu_time; // in microseconds @@ -31,6 +31,6 @@ blogc_rusage_t* blogc_rusage_get(void); char* blogc_rusage_format_cpu_time(long long time); char* blogc_rusage_format_memory(long mem); -void blogc_rusage_inject(bc_trie_t *global); +void blogc_rusage_inject(sb_trie_t *global); #endif /* ___RUSAGE_H */ diff --git a/src/blogc/source-parser.c b/src/blogc/source-parser.c index 18cf95a..fb181de 100644 --- a/src/blogc/source-parser.c +++ b/src/blogc/source-parser.c @@ -8,11 +8,10 @@ #include <stdlib.h> #include <string.h> +#include <squareball.h> #include "content-parser.h" #include "source-parser.h" -#include "../common/error.h" -#include "../common/utils.h" typedef enum { @@ -26,8 +25,8 @@ typedef enum { } blogc_source_parser_state_t; -bc_trie_t* -blogc_source_parse(const char *src, size_t src_len, bc_error_t **err) +sb_trie_t* +blogc_source_parse(const char *src, size_t src_len, sb_error_t **err) { if (err == NULL || *err != NULL) return NULL; @@ -39,7 +38,7 @@ blogc_source_parse(const char *src, size_t src_len, bc_error_t **err) char *key = NULL; char *tmp = NULL; char *content = NULL; - bc_trie_t *rv = bc_trie_new(free); + sb_trie_t *rv = sb_trie_new(free); blogc_source_parser_state_t state = SOURCE_START; @@ -60,16 +59,16 @@ blogc_source_parse(const char *src, size_t src_len, bc_error_t **err) state = SOURCE_SEPARATOR; break; } - *err = bc_error_parser(BLOGC_ERROR_SOURCE_PARSER, src, src_len, - current, - "Can't find a configuration key or the content separator."); + *err = sb_parser_error_new(src, src_len, current, + "source: Can't find a configuration key or the content " + "separator."); break; case SOURCE_CONFIG_KEY: if ((c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_') break; if (c == ':') { - key = bc_strndup(src + start, current - start); + key = sb_strndup(src + start, current - start); if (((current - start == 8) && (0 == strncmp("FILENAME", src + start, 8))) || ((current - start == 7) && @@ -93,16 +92,16 @@ blogc_source_parse(const char *src, size_t src_len, bc_error_t **err) ((current - start == 13) && (0 == strncmp("BLOGC_VERSION", src + start, 13)))) { - *err = bc_error_new_printf(BLOGC_ERROR_SOURCE_PARSER, - "'%s' variable is forbidden in source files. It will " - "be set for you by the compiler.", key); + *err = sb_strerror_new_printf( + "source: '%s' variable is forbidden in source files. " + "It will be set for you by the compiler.", key); break; } state = SOURCE_CONFIG_VALUE_START; break; } - *err = bc_error_parser(BLOGC_ERROR_SOURCE_PARSER, src, src_len, - current, "Invalid configuration key."); + *err = sb_parser_error_new(src, src_len, current, + "source: Invalid configuration key."); break; case SOURCE_CONFIG_VALUE_START: @@ -111,7 +110,7 @@ blogc_source_parse(const char *src, size_t src_len, bc_error_t **err) start = current; break; } - bc_trie_insert(rv, key, bc_strdup("")); + sb_trie_insert(rv, key, sb_strdup("")); free(key); key = NULL; state = SOURCE_START; @@ -119,8 +118,8 @@ blogc_source_parse(const char *src, size_t src_len, bc_error_t **err) case SOURCE_CONFIG_VALUE: if (c == '\n' || c == '\r') { - tmp = bc_strndup(src + start, current - start); - bc_trie_insert(rv, key, bc_strdup(bc_str_strip(tmp))); + tmp = sb_strndup(src + start, current - start); + sb_trie_insert(rv, key, sb_strdup(sb_str_strip(tmp))); free(tmp); free(key); key = NULL; @@ -135,9 +134,9 @@ blogc_source_parse(const char *src, size_t src_len, bc_error_t **err) state = SOURCE_CONTENT_START; break; } - *err = bc_error_parser(BLOGC_ERROR_SOURCE_PARSER, src, src_len, - current, - "Invalid content separator. Must be more than one '-' characters."); + *err = sb_parser_error_new(src, src_len, current, + "source: Invalid content separator. Must be more than one " + "'-' characters."); break; case SOURCE_CONTENT_START: @@ -149,18 +148,18 @@ blogc_source_parse(const char *src, size_t src_len, bc_error_t **err) case SOURCE_CONTENT: if (current == (src_len - 1)) { - tmp = bc_strndup(src + start, src_len - start); - bc_trie_insert(rv, "RAW_CONTENT", tmp); + tmp = sb_strndup(src + start, src_len - start); + sb_trie_insert(rv, "RAW_CONTENT", tmp); char *first_header = NULL; char *description = NULL; content = blogc_content_parse(tmp, &end_excerpt, &first_header, &description); if (first_header != NULL) { // do not override source-provided first_header. - if (NULL == bc_trie_lookup(rv, "FIRST_HEADER")) { + if (NULL == sb_trie_lookup(rv, "FIRST_HEADER")) { // no need to free, because we are transfering memory // ownership to the trie. - bc_trie_insert(rv, "FIRST_HEADER", first_header); + sb_trie_insert(rv, "FIRST_HEADER", first_header); } else { free(first_header); @@ -168,18 +167,18 @@ blogc_source_parse(const char *src, size_t src_len, bc_error_t **err) } if (description != NULL) { // do not override source-provided description. - if (NULL == bc_trie_lookup(rv, "DESCRIPTION")) { + if (NULL == sb_trie_lookup(rv, "DESCRIPTION")) { // no need to free, because we are transfering memory // ownership to the trie. - bc_trie_insert(rv, "DESCRIPTION", description); + sb_trie_insert(rv, "DESCRIPTION", description); } else { free(description); } } - bc_trie_insert(rv, "CONTENT", content); - bc_trie_insert(rv, "EXCERPT", end_excerpt == 0 ? - bc_strdup(content) : bc_strndup(content, end_excerpt)); + sb_trie_insert(rv, "CONTENT", content); + sb_trie_insert(rv, "EXCERPT", end_excerpt == 0 ? + sb_strdup(content) : sb_strndup(content, end_excerpt)); } break; } @@ -190,29 +189,28 @@ blogc_source_parse(const char *src, size_t src_len, bc_error_t **err) current++; } - if (*err == NULL && bc_trie_size(rv) == 0) { + if (*err == NULL && sb_trie_size(rv) == 0) { // ok, nothing found in the config trie, but no error set either. // let's try to be nice with the users and provide some reasonable // output. :) switch (state) { case SOURCE_START: - *err = bc_error_parser(BLOGC_ERROR_SOURCE_PARSER, src, src_len, - current, "Your source file is empty."); + *err = sb_parser_error_new(src, src_len, current, + "source: Your source file is empty."); break; case SOURCE_CONFIG_KEY: - *err = bc_error_parser(BLOGC_ERROR_SOURCE_PARSER, src, src_len, - current, "Your last configuration key is missing ':' and " + *err = sb_parser_error_new(src, src_len, current, + "source: Your last configuration key is missing ':' and " "the value"); break; case SOURCE_CONFIG_VALUE_START: - *err = bc_error_parser(BLOGC_ERROR_SOURCE_PARSER, src, src_len, - current, "Configuration value not provided for '%s'.", - key); + *err = sb_parser_error_new_printf(src, src_len, current, + "source: Configuration value not provided for '%s'.", key); break; case SOURCE_CONFIG_VALUE: - *err = bc_error_parser(BLOGC_ERROR_SOURCE_PARSER, src, src_len, - current, "No line ending after the configuration value for " + *err = sb_parser_error_new_printf(src, src_len, current, + "source: No line ending after the configuration value for " "'%s'.", key); break; case SOURCE_SEPARATOR: @@ -224,7 +222,7 @@ blogc_source_parse(const char *src, size_t src_len, bc_error_t **err) if (*err != NULL) { free(key); - bc_trie_free(rv); + sb_trie_free(rv); return NULL; } diff --git a/src/blogc/source-parser.h b/src/blogc/source-parser.h index 8672fb0..b90f30b 100644 --- a/src/blogc/source-parser.h +++ b/src/blogc/source-parser.h @@ -10,10 +10,9 @@ #define _SOURCE_PARSER_H #include <stddef.h> -#include "../common/error.h" -#include "../common/utils.h" +#include <squareball.h> -bc_trie_t* blogc_source_parse(const char *src, size_t src_len, - bc_error_t **err); +sb_trie_t* blogc_source_parse(const char *src, size_t src_len, + sb_error_t **err); #endif /* _SOURCE_PARSER_H */ diff --git a/src/blogc/sysinfo.c b/src/blogc/sysinfo.c index cdb860e..9e0ab1b 100644 --- a/src/blogc/sysinfo.c +++ b/src/blogc/sysinfo.c @@ -21,9 +21,8 @@ #include <stdbool.h> #include <stdlib.h> #include <string.h> -#include "../common/error.h" -#include "../common/file.h" -#include "../common/utils.h" +#include <squareball.h> + #include "sysinfo.h" @@ -39,37 +38,37 @@ blogc_sysinfo_get_hostname(void) return NULL; // FIXME: return FQDN instead of local host name - return bc_strdup(buf); + return sb_strdup(buf); #endif } void -blogc_sysinfo_inject_hostname(bc_trie_t *global) +blogc_sysinfo_inject_hostname(sb_trie_t *global) { char *hostname = blogc_sysinfo_get_hostname(); if (hostname == NULL) return; - bc_trie_insert(global, "BLOGC_SYSINFO_HOSTNAME", hostname); + sb_trie_insert(global, "BLOGC_SYSINFO_HOSTNAME", hostname); } char* blogc_sysinfo_get_username(void) { - return bc_strdup(getenv("LOGNAME")); + return sb_strdup(getenv("LOGNAME")); } void -blogc_sysinfo_inject_username(bc_trie_t *global) +blogc_sysinfo_inject_username(sb_trie_t *global) { char *username = blogc_sysinfo_get_username(); if (username == NULL) return; - bc_trie_insert(global, "BLOGC_SYSINFO_USERNAME", username); + sb_trie_insert(global, "BLOGC_SYSINFO_USERNAME", username); } @@ -91,19 +90,19 @@ blogc_sysinfo_get_datetime(void) if (0 == strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", t)) return NULL; - return bc_strdup(buf); + return sb_strdup(buf); #endif } void -blogc_sysinfo_inject_datetime(bc_trie_t *global) +blogc_sysinfo_inject_datetime(sb_trie_t *global) { char *t = blogc_sysinfo_get_datetime(); if (t == NULL) return; - bc_trie_insert(global, "BLOGC_SYSINFO_DATETIME", t); + sb_trie_insert(global, "BLOGC_SYSINFO_DATETIME", t); } @@ -121,10 +120,10 @@ blogc_sysinfo_get_inside_docker(void) inside_docker_evaluated = true; size_t len; - bc_error_t *err = NULL; - char *contents = bc_file_get_contents("/proc/1/cgroup", false, &len, &err); + sb_error_t *err = NULL; + char *contents = sb_file_get_contents("/proc/1/cgroup", &len, &err); if (err != NULL) { - bc_error_free(err); + sb_error_free(err); inside_docker = false; return inside_docker; } @@ -136,8 +135,8 @@ blogc_sysinfo_get_inside_docker(void) void -blogc_sysinfo_inject_inside_docker(bc_trie_t *global) +blogc_sysinfo_inject_inside_docker(sb_trie_t *global) { if (blogc_sysinfo_get_inside_docker()) - bc_trie_insert(global, "BLOGC_SYSINFO_INSIDE_DOCKER", bc_strdup("1")); + sb_trie_insert(global, "BLOGC_SYSINFO_INSIDE_DOCKER", sb_strdup("1")); } diff --git a/src/blogc/sysinfo.h b/src/blogc/sysinfo.h index b249661..23b7ba6 100644 --- a/src/blogc/sysinfo.h +++ b/src/blogc/sysinfo.h @@ -24,15 +24,15 @@ #endif /* HAVE_TIME_H */ #include <stdbool.h> -#include "../common/utils.h" +#include <squareball.h> char* blogc_sysinfo_get_hostname(void); -void blogc_sysinfo_inject_hostname(bc_trie_t *global); +void blogc_sysinfo_inject_hostname(sb_trie_t *global); char* blogc_sysinfo_get_username(void); -void blogc_sysinfo_inject_username(bc_trie_t *global); +void blogc_sysinfo_inject_username(sb_trie_t *global); char* blogc_sysinfo_get_datetime(void); -void blogc_sysinfo_inject_datetime(bc_trie_t *global); +void blogc_sysinfo_inject_datetime(sb_trie_t *global); bool blogc_sysinfo_get_inside_docker(void); -void blogc_sysinfo_inject_inside_docker(bc_trie_t *global); +void blogc_sysinfo_inject_inside_docker(sb_trie_t *global); #endif /* ___SYSINFO_H */ diff --git a/src/blogc/template-parser.c b/src/blogc/template-parser.c index 0b4eb55..1ce0c51 100644 --- a/src/blogc/template-parser.c +++ b/src/blogc/template-parser.c @@ -9,10 +9,12 @@ #include <stdbool.h> #include <stdlib.h> #include <string.h> +#include <squareball.h> #include "template-parser.h" -#include "../common/error.h" -#include "../common/utils.h" + +#define is_space(c) (c == ' ' || c == '\f' || c == '\n' || c == '\r' || \ + c == '\t' || c == '\v') typedef enum { @@ -41,8 +43,8 @@ typedef enum { } blogc_template_parser_state_t; -bc_slist_t* -blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) +sb_slist_t* +blogc_template_parse(const char *src, size_t src_len, sb_error_t **err) { if (err == NULL || *err != NULL) return NULL; @@ -63,7 +65,7 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) bool foreach_open = false; bool block_foreach_open = false; - bc_slist_t *ast = NULL; + sb_slist_t *ast = NULL; blogc_template_node_t *node = NULL; /* @@ -94,21 +96,21 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) case TEMPLATE_START: if (last) { - node = bc_malloc(sizeof(blogc_template_node_t)); + node = sb_malloc(sizeof(blogc_template_node_t)); node->type = type; if (lstrip_next) { - tmp = bc_strndup(src + start, src_len - start); - node->data[0] = bc_strdup(bc_str_lstrip(tmp)); + tmp = sb_strndup(src + start, src_len - start); + node->data[0] = sb_strdup(sb_str_lstrip(tmp)); free(tmp); tmp = NULL; lstrip_next = false; } else { - node->data[0] = bc_strndup(src + start, src_len - start); + node->data[0] = sb_strndup(src + start, src_len - start); } node->op = 0; node->data[1] = NULL; - ast = bc_slist_append(ast, node); + ast = sb_slist_append(ast, node); previous = node; node = NULL; } @@ -125,21 +127,21 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) else state = TEMPLATE_VARIABLE_START; if (end > start) { - node = bc_malloc(sizeof(blogc_template_node_t)); + node = sb_malloc(sizeof(blogc_template_node_t)); node->type = type; if (lstrip_next) { - tmp = bc_strndup(src + start, end - start); - node->data[0] = bc_strdup(bc_str_lstrip(tmp)); + tmp = sb_strndup(src + start, end - start); + node->data[0] = sb_strdup(sb_str_lstrip(tmp)); free(tmp); tmp = NULL; lstrip_next = false; } else { - node->data[0] = bc_strndup(src + start, end - start); + node->data[0] = sb_strndup(src + start, end - start); } node->op = 0; node->data[1] = NULL; - ast = bc_slist_append(ast, node); + ast = sb_slist_append(ast, node); previous = node; node = NULL; } @@ -153,7 +155,7 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) if ((previous != NULL) && (previous->type == BLOGC_TEMPLATE_NODE_CONTENT)) { - previous->data[0] = bc_str_rstrip(previous->data[0]); // does not need copy + previous->data[0] = sb_str_rstrip(previous->data[0]); // does not need copy } state = TEMPLATE_BLOCK_START; break; @@ -161,7 +163,7 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) state = TEMPLATE_BLOCK_START; case TEMPLATE_BLOCK_START: - if (bc_isspace(c)) + if (is_space(c)) break; if (c >= 'a' && c <= 'z') { state = TEMPLATE_BLOCK_TYPE; @@ -169,21 +171,20 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) break; } if (c == '-') { - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid statement syntax. Duplicated whitespace " - "cleaner before statement."); + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid statement syntax. Duplicated " + "whitespace cleaner before statement."); break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid statement syntax. Must begin with lowercase letter."); + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid statement syntax. Must begin with " + "lowercase letter."); break; case TEMPLATE_BLOCK_TYPE: if (c >= 'a' && c <= 'z') break; - if (bc_isspace(c)) { + if (is_space(c)) { if ((current - start == 5) && (0 == strncmp("block", src + start, 5))) { @@ -195,8 +196,8 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) block_foreach_open = foreach_open; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, - src, src_len, current, "Blocks can't be nested."); + *err = sb_parser_error_new(src, src_len, current, + "template: Blocks can't be nested."); break; } else if ((current - start == 8) && @@ -204,16 +205,18 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) { if (block_open) { if (if_count != block_if_count) { - *err = bc_error_new_printf(BLOGC_ERROR_TEMPLATE_PARSER, - "%d open 'if', 'ifdef' and/or 'ifndef' statements " - "were not closed inside a '%s' block!", + *err = sb_strerror_new_printf( + "template: %d open 'if', 'ifdef' and/or " + "'ifndef' statements were not closed " + "inside a '%s' block!", if_count - block_if_count, block_type); break; } if (!block_foreach_open && foreach_open) { - *err = bc_error_new_printf(BLOGC_ERROR_TEMPLATE_PARSER, - "An open 'foreach' statement was not closed " - "inside a '%s' block!", block_type); + *err = sb_strerror_new_printf( + "template: An open 'foreach' statement was " + "not closed inside a '%s' block!", + block_type); break; } state = TEMPLATE_BLOCK_END_WHITESPACE_CLEANER; @@ -221,9 +224,9 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) block_open = false; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, - src, src_len, current, - "'endblock' statement without an open 'block' statement."); + *err = sb_parser_error_new(src, src_len, current, + "template: 'endblock' statement without an open " + "'block' statement."); break; } else if ((current - start == 5) && @@ -268,16 +271,14 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) else_open = true; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, - src, src_len, current, - "More than one 'else' statement for an open 'if', " - "'ifdef' or 'ifndef' statement."); + *err = sb_parser_error_new(src, src_len, current, + "template: More than one 'else' statement for " + "an open 'if', 'ifdef' or 'ifndef' statement."); break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, - src, src_len, current, - "'else' statement without an open 'if', 'ifdef' or " - "'ifndef' statement."); + *err = sb_parser_error_new(src, src_len, current, + "template: 'else' statement without an open 'if', " + "'ifdef' or 'ifndef' statement."); break; } else if ((current - start == 5) && @@ -292,10 +293,9 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) else_open = false; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, - src, src_len, current, - "'endif' statement without an open 'if', 'ifdef' or " - "'ifndef' statement."); + *err = sb_parser_error_new(src, src_len, current, + "template: 'endif' statement without an open 'if', " + "'ifdef' or 'ifndef' statement."); break; } else if ((current - start == 7) && @@ -308,9 +308,8 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) foreach_open = true; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, - src, src_len, current, "'foreach' statements can't " - "be nested."); + *err = sb_parser_error_new(src, src_len, current, + "template: 'foreach' statements can't be nested."); break; } else if ((current - start == 10) && @@ -324,37 +323,35 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) foreach_open = false; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, - src, src_len, current, - "'endforeach' statement without an open 'foreach' " - "statement."); + *err = sb_parser_error_new(src, src_len, current, + "template: 'endforeach' statement without an open " + "'foreach' statement."); break; } } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid statement type: Allowed types are: 'block', " + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid statement type: Allowed types are: 'block', " "'endblock', 'if', 'ifdef', 'ifndef', 'else', 'endif', " "'foreach' and 'endforeach'."); break; case TEMPLATE_BLOCK_BLOCK_TYPE_START: - if (bc_isspace(c)) + if (is_space(c)) break; if (c >= 'a' && c <= 'z') { state = TEMPLATE_BLOCK_BLOCK_TYPE; start = current; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid block syntax. Must begin with lowercase letter."); + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid block syntax. Must begin with lowercase " + "letter."); break; case TEMPLATE_BLOCK_BLOCK_TYPE: if ((c >= 'a' && c <= 'z') || c == '_') break; - if (bc_isspace(c)) { + if (is_space(c)) { if ((current - start == 5) && (0 == strncmp("entry", src + start, 5))) { @@ -388,29 +385,28 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) break; } } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid block type. Allowed types are: 'entry', 'listing', " - "'listing_once' and 'listing_entry'."); + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid block type. Allowed types are: 'entry', " + "'listing', 'listing_once' and 'listing_entry'."); break; case TEMPLATE_BLOCK_IF_START: - if (bc_isspace(c)) + if (is_space(c)) break; if (c >= 'A' && c <= 'Z') { state = TEMPLATE_BLOCK_IF_VARIABLE; start = current; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid variable name. Must begin with uppercase letter."); + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid variable name. Must begin with uppercase " + "letter."); break; case TEMPLATE_BLOCK_IF_VARIABLE: if ((c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_') break; - if (bc_isspace(c)) { + if (is_space(c)) { end = current; if (type == BLOGC_TEMPLATE_NODE_IF) state = TEMPLATE_BLOCK_IF_OPERATOR_START; @@ -418,28 +414,27 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) state = TEMPLATE_BLOCK_END_WHITESPACE_CLEANER; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid variable name. Must be uppercase letter, number " - "or '_'."); + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid variable name. Must be uppercase letter, " + "number or '_'."); break; case TEMPLATE_BLOCK_IF_OPERATOR_START: - if (bc_isspace(c)) + if (is_space(c)) break; state = TEMPLATE_BLOCK_IF_OPERATOR; op_start = current; break; case TEMPLATE_BLOCK_IF_OPERATOR: - if (!bc_isspace(c)) + if (!is_space(c)) break; state = TEMPLATE_BLOCK_IF_OPERAND_START; op_end = current; break; case TEMPLATE_BLOCK_IF_OPERAND_START: - if (bc_isspace(c)) + if (is_space(c)) break; if (c >= 'A' && c <= 'Z') { state = TEMPLATE_BLOCK_IF_VARIABLE_OPERAND; @@ -453,9 +448,8 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) } op_start = 0; op_end = 0; - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid 'if' operand. Must be double-quoted static " + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid 'if' operand. Must be double-quoted static " "string or variable."); break; @@ -476,35 +470,33 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) break; case TEMPLATE_BLOCK_FOREACH_START: - if (bc_isspace(c)) + if (is_space(c)) break; if (c >= 'A' && c <= 'Z') { state = TEMPLATE_BLOCK_FOREACH_VARIABLE; start = current; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid foreach variable name. Must begin with uppercase " - "letter."); + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid foreach variable name. Must begin with " + "uppercase letter."); break; case TEMPLATE_BLOCK_FOREACH_VARIABLE: if ((c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_') break; - if (bc_isspace(c)) { + if (is_space(c)) { end = current; state = TEMPLATE_BLOCK_END_WHITESPACE_CLEANER; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid foreach variable name. Must be uppercase letter, " - "number or '_'."); + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid foreach variable name. Must be uppercase " + "letter, number or '_'."); break; case TEMPLATE_BLOCK_END_WHITESPACE_CLEANER: - if (bc_isspace(c)) + if (is_space(c)) break; if (c == '-') { lstrip_next = true; @@ -519,19 +511,17 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) break; } if (c == '-') { - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid statement syntax. Duplicated whitespace " + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid statement syntax. Duplicated whitespace " "cleaner after statement."); break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid statement syntax. Must end with '%%}'."); + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid statement syntax. Must end with '%}'."); break; case TEMPLATE_VARIABLE_START: - if (bc_isspace(c)) + if (is_space(c)) break; if (c >= 'A' && c <= 'Z') { state = TEMPLATE_VARIABLE; @@ -539,15 +529,15 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) start = current; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid variable name. Must begin with uppercase letter."); + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid variable name. Must begin with uppercase " + "letter."); break; case TEMPLATE_VARIABLE: if ((c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_') break; - if (bc_isspace(c)) { + if (is_space(c)) { end = current; state = TEMPLATE_VARIABLE_END; break; @@ -557,22 +547,20 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) state = TEMPLATE_CLOSE_BRACKET; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid variable name. Must be uppercase letter, number " - "or '_'."); + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid variable name. Must be uppercase letter, " + "number or '_'."); break; case TEMPLATE_VARIABLE_END: - if (bc_isspace(c)) + if (is_space(c)) break; if (c == '}') { state = TEMPLATE_CLOSE_BRACKET; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid statement syntax. Must end with '}}'."); + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid statement syntax. Must end with '}}'."); break; case TEMPLATE_CLOSE_BRACKET: @@ -596,9 +584,8 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) tmp_op = BLOGC_TEMPLATE_OP_NEQ; } if (tmp_op == 0) { - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, - src, src_len, op_start, - "Invalid 'if' operator. Must be '<', '>', " + *err = sb_parser_error_new(src, src_len, op_start, + "template: Invalid 'if' operator. Must be '<', '>', " "'<=', '>=', '==' or '!='."); op_start = 0; op_end = 0; @@ -607,21 +594,21 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) op_start = 0; op_end = 0; } - node = bc_malloc(sizeof(blogc_template_node_t)); + node = sb_malloc(sizeof(blogc_template_node_t)); node->type = type; node->op = tmp_op; node->data[0] = NULL; node->data[1] = NULL; if (end > start) - node->data[0] = bc_strndup(src + start, end - start); + node->data[0] = sb_strndup(src + start, end - start); if (end2 > start2) { - node->data[1] = bc_strndup(src + start2, end2 - start2); + node->data[1] = sb_strndup(src + start2, end2 - start2); start2 = 0; end2 = 0; } if (type == BLOGC_TEMPLATE_NODE_BLOCK) block_type = node->data[0]; - ast = bc_slist_append(ast, node); + ast = sb_slist_append(ast, node); previous = node; node = NULL; state = TEMPLATE_START; @@ -629,9 +616,8 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) start = current + 1; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid statement syntax. Must end with '}'."); + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid statement syntax. Must end with '}'."); break; } @@ -644,18 +630,17 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) if (*err == NULL) { if (state == TEMPLATE_BLOCK_IF_STRING_OPERAND) - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, src_len, - start2, "Found an open double-quoted string."); + *err = sb_parser_error_new(src, src_len, start2, + "template: Found an open double-quoted string."); else if (if_count != 0) - *err = bc_error_new_printf(BLOGC_ERROR_TEMPLATE_PARSER, - "%d open 'if', 'ifdef' and/or 'ifndef' statements were not closed!", - if_count); + *err = sb_strerror_new_printf( + "template: %d open 'if', 'ifdef' and/or 'ifndef' statements " + "were not closed!", if_count); else if (block_open) - *err = bc_error_new(BLOGC_ERROR_TEMPLATE_PARSER, - "An open block was not closed!"); + *err = sb_strerror_new("template: An open block was not closed!"); else if (foreach_open) - *err = bc_error_new(BLOGC_ERROR_TEMPLATE_PARSER, - "An open 'foreach' statement was not closed!"); + *err = sb_strerror_new( + "template: An open 'foreach' statement was not closed!"); } if (*err != NULL) { @@ -672,9 +657,9 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) void -blogc_template_free_ast(bc_slist_t *ast) +blogc_template_free_ast(sb_slist_t *ast) { - for (bc_slist_t *tmp = ast; tmp != NULL; tmp = tmp->next) { + for (sb_slist_t *tmp = ast; tmp != NULL; tmp = tmp->next) { blogc_template_node_t *data = tmp->data; if (data == NULL) continue; @@ -682,5 +667,5 @@ blogc_template_free_ast(bc_slist_t *ast) free(data->data[1]); free(data); } - bc_slist_free(ast); + sb_slist_free(ast); } diff --git a/src/blogc/template-parser.h b/src/blogc/template-parser.h index 6183016..d21d6d8 100644 --- a/src/blogc/template-parser.h +++ b/src/blogc/template-parser.h @@ -10,8 +10,7 @@ #define _TEMPLATE_PARSER_H #include <stddef.h> -#include "../common/error.h" -#include "../common/utils.h" +#include <squareball.h> /* * note: whitespace cleaners are NOT added to AST. we fix strings right during @@ -48,11 +47,11 @@ typedef struct { // 2 slots to store node data. char *data[2]; - bc_slist_t *childs; + sb_slist_t *childs; } blogc_template_node_t; -bc_slist_t* blogc_template_parse(const char *src, size_t src_len, - bc_error_t **err); -void blogc_template_free_ast(bc_slist_t *ast); +sb_slist_t* blogc_template_parse(const char *src, size_t src_len, + sb_error_t **err); +void blogc_template_free_ast(sb_slist_t *ast); #endif /* _TEMPLATE_PARSER_H */ |