Stdin support
This commit is contained in:
parent
d0697da15e
commit
c0f5be662a
30
main.c
30
main.c
@ -38,17 +38,33 @@
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
26
markdown.h
26
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);
|
||||
|
Loading…
Reference in New Issue
Block a user