From c0f5be662af379c8189bccc21e7e7a0e239ed7ef Mon Sep 17 00:00:00 2001 From: retoor Date: Sat, 25 Jan 2025 14:19:01 +0100 Subject: [PATCH] Stdin support --- main.c | 30 +++++++++++++++++++++++------- markdown.h | 26 +++++++++++++++++++------- 2 files changed, 42 insertions(+), 14 deletions(-) diff --git a/main.c b/main.c index 1424034..7a70e9b 100644 --- a/main.c +++ b/main.c @@ -38,17 +38,33 @@ #include #include +char * get_prompt_from_stdin() { + char * prompt = malloc(1024 * 1024 * 10 + 1); + prompt[0] = 0; + int index = 0; + char c = 0; + while ((c = getchar()) != EOF) { + prompt[index++] = c; + } + prompt[index++] = 0; + return prompt; +} + char *get_prompt_from_args(int c, char **argv) { char *prompt = malloc(1024 * 1024 + 1); prompt[0] = 0; for (int i = 1; i < c; i++) { - if (argv[i][0] == '-') + if (!strcmp(argv[i],"--stdin")){ + free(prompt); + prompt = get_prompt_from_stdin(); break; - strncat(prompt, argv[i], 1024 * 1024); - if (i < c - 1) { - strncat(prompt, " ", 1024 * 1024); - } else { - strncat(prompt, ".", 1024 * 1024); + }else{ + strncat(prompt, argv[i], 1024 * 1024); + if (i < c - 1) { + strncat(prompt, " ", 1024 * 1024); + } else { + strncat(prompt, ".", 1024 * 1024); + } } } if (!*prompt) { @@ -211,4 +227,4 @@ int main(int argc, char *argv[]) { repl(); return 0; -} \ No newline at end of file +} diff --git a/markdown.h b/markdown.h index 037a9e5..347f8ae 100644 --- a/markdown.h +++ b/markdown.h @@ -46,15 +46,15 @@ int is_keyword(const char *word) { void highlight_code(const char *code) { const char *ptr = code; - char buffer[256]; + char buffer[4096]; size_t index = 0; - + buffer[index] = 0; while (*ptr) { if ((*ptr >= 'a' && *ptr <= 'z') || (*ptr >= 'A' && *ptr <= 'Z') || (*ptr == '_')) { while ((*ptr >= 'a' && *ptr <= 'z') || (*ptr >= 'A' && *ptr <= 'Z') || (*ptr >= '0' && *ptr <= '9') || (*ptr == '_')) { buffer[index++] = *ptr++; } - buffer[index] = '\0'; + buffer[index] = 0; if (is_keyword(buffer)) { printf(FG_BLUE "%s" RESET, buffer); @@ -66,7 +66,7 @@ void highlight_code(const char *code) { while (*ptr >= '0' && *ptr <= '9') { buffer[index++] = *ptr++; } - buffer[index] = '\0'; + buffer[index] = 0; printf(FG_CYAN "%s" RESET, buffer); index = 0; } else { @@ -93,14 +93,26 @@ void parse_markdown_to_ansi(const char *markdown) { } if (inside_code) { - char code_buffer[256]; + char code_buffer[4096]; size_t index = 0; while (*ptr && *ptr != '`') { code_buffer[index++] = *ptr++; + if(*ptr == '\n' || *ptr == ' ' || *ptr == '\t' || *ptr == '.'){ + code_buffer[index++] = 0; + highlight_code(code_buffer); + index = 0; + code_buffer[index] = 0; + } } - code_buffer[index] = '\0'; - highlight_code(code_buffer); + if(index > 0){ + highlight_code(code_buffer); + index = 0; + code_buffer[index] = 0; + + } + //code_buffer[index] = 0; + //highlight_code(code_buffer); } else { if (strncmp(ptr, "**", 2) == 0) { printf(BOLD);