From 521bed1d557cd1d58ae4b81dfe8e8902cb82f41b Mon Sep 17 00:00:00 2001 From: dm1sh Date: Mon, 18 Sep 2023 06:20:30 +0300 Subject: [PATCH] Fixed square brackets processing --- src/articles_p/process_md.c | 114 ++++++++++++++++++------------------ 1 file changed, 56 insertions(+), 58 deletions(-) diff --git a/src/articles_p/process_md.c b/src/articles_p/process_md.c index 42c47bf..52cc9f6 100644 --- a/src/articles_p/process_md.c +++ b/src/articles_p/process_md.c @@ -217,41 +217,40 @@ int process_md(article_info article, char **out) while (buff[i + 2 + n] != ']') n++; - if (buff[i + 2 + n + 1] != '(') - continue; + if (buff[i + 2 + n + 1] == '(') { + int k = 0; + while (buff[i + 2 + n + 2 + k] != ')') + k++; - int k = 0; - while (buff[i + 2 + n + 2 + k] != ')') - k++; + char *internal_text = malloc(n + 1); + memcpy(internal_text, buff + i + 2, n); + internal_text[n] = '\0'; - char *internal_text = malloc(n + 1); - memcpy(internal_text, buff + i + 2, n); - internal_text[n] = '\0'; + char *src = malloc(k + 1); + memcpy(src, buff + i + 2 + n + 2, k); + src[k] = '\0'; - char *src = malloc(k + 1); - memcpy(src, buff + i + 2 + n + 2, k); - src[k] = '\0'; + size_t append_line_length = snprintf(NULL, 0, "\"%s\"", src, src, internal_text) + 1; + char *append = malloc(append_line_length); + char *tmp_out = realloc(*out, strlen(*out) + append_line_length); + if (append == NULL || tmp_out == NULL) + { + perror("Couldn't allocate memory for new element"); + continue; + } + *out = tmp_out; + + snprintf(append, append_line_length, "\"%s\"", src, src, internal_text); + strcat(*out, append); + + i += 2 + n + 2 + k; + + free(append); + free(src); + free(internal_text); - size_t append_line_length = snprintf(NULL, 0, "\"%s\"", src, src, internal_text) + 1; - char *append = malloc(append_line_length); - char *tmp_out = realloc(*out, strlen(*out) + append_line_length); - if (append == NULL || tmp_out == NULL) - { - perror("Couldn't allocate memory for new element"); continue; } - *out = tmp_out; - - snprintf(append, append_line_length, "\"%s\"", src, src, internal_text); - strcat(*out, append); - - i += 2 + n + 2 + k; - - free(append); - free(src); - free(internal_text); - - continue; } if (buff[i] == '[') @@ -260,41 +259,40 @@ int process_md(article_info article, char **out) while (buff[i + 1 + n] != ']') n++; - if (buff[i + 1 + n + 1] != '(') - continue; + if (buff[i + 1 + n + 1] == '(') { + int k = 0; + while (buff[i + 1 + n + 2 + k] != ')') + k++; - int k = 0; - while (buff[i + 1 + n + 2 + k] != ')') - k++; + char *internal_text = malloc(n + 1); + memcpy(internal_text, buff + i + 1, n); + internal_text[n] = '\0'; - char *internal_text = malloc(n + 1); - memcpy(internal_text, buff + i + 1, n); - internal_text[n] = '\0'; + char *href = malloc(k + 1); + memcpy(href, buff + i + 1 + n + 2, k); + href[k] = '\0'; - char *href = malloc(k + 1); - memcpy(href, buff + i + 1 + n + 2, k); - href[k] = '\0'; + size_t append_line_length = snprintf(NULL, 0, "%s", href, internal_text) + 1; + char *append = malloc(append_line_length); + char *tmp_out = realloc(*out, strlen(*out) + append_line_length); + if (append == NULL || tmp_out == NULL) + { + perror("Couldn't allocate memory for new element"); + continue; + } + *out = tmp_out; + + snprintf(append, append_line_length, "%s", href, internal_text); + strcat(*out, append); + + i += 1 + n + 2 + k; + + free(append); + free(href); + free(internal_text); - size_t append_line_length = snprintf(NULL, 0, "%s", href, internal_text) + 1; - char *append = malloc(append_line_length); - char *tmp_out = realloc(*out, strlen(*out) + append_line_length); - if (append == NULL || tmp_out == NULL) - { - perror("Couldn't allocate memory for new element"); continue; } - *out = tmp_out; - - snprintf(append, append_line_length, "%s", href, internal_text); - strcat(*out, append); - - i += 1 + n + 2 + k; - - free(append); - free(href); - free(internal_text); - - continue; } size_t len = strlen(*out);