X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=viewer.c;h=14018da550fb64e0731994975c07cb08a508cb8d;hb=31f91305483a4efa430fe1ce181f62921c77e39f;hp=6db88b95319a7e2edf0b93b3056bfb1effa74a64;hpb=a3d9a0cc14a6c55cb62e808b1c43d3b7a487faf1;p=smdp.git diff --git a/viewer.c b/viewer.c index 6db88b9..14018da 100644 --- a/viewer.c +++ b/viewer.c @@ -104,9 +104,19 @@ int ncurses_display(deck_t *deck, int notrans, int nofade, int invert) { if((max_cols > COLS) || (max_lines + bar_top + bar_bottom + 2 > LINES)) { + // disable ncurses + endwin(); + + // print error fprintf(stderr, "Error: Terminal size %ix%i too small. Need at least %ix%i.\n", COLS, LINES, max_cols, max_lines + bar_top + bar_bottom + 2); - endwin(); + + // print hint to solve it + if(max_lines + bar_top + bar_bottom + 2 > LINES) + fprintf(stderr, "You may need to add additional horizontal rules ('***') to split your file in shorter slides.\n"); + if(max_cols > COLS) + fprintf(stderr, "Automatic line wrapping is not supported jet. You may need to shorten some lines by inserting line breaks.\n"); + return(1); } @@ -142,10 +152,12 @@ int ncurses_display(deck_t *deck, int notrans, int nofade, int invert) { init_pair(CP_WHITE, 232, trans); init_pair(CP_BLUE, 21, trans); init_pair(CP_RED, 196, trans); + init_pair(CP_BLACK, 15, 232); } else { init_pair(CP_WHITE, 255, trans); init_pair(CP_BLUE, 123, trans); init_pair(CP_RED, 213, trans); + init_pair(CP_BLACK, 16, 255); } init_pair(CP_YELLOW, 208, trans); @@ -165,8 +177,10 @@ int ncurses_display(deck_t *deck, int notrans, int nofade, int invert) { if(invert) { init_pair(CP_WHITE, 0, trans); + init_pair(CP_BLACK, 7, 0); } else { init_pair(CP_WHITE, 7, trans); + init_pair(CP_BLACK, 0, 7); } init_pair(CP_BLUE, 4, trans); init_pair(CP_RED, 1, trans); @@ -353,7 +367,7 @@ int ncurses_display(deck_t *deck, int notrans, int nofade, int invert) { void add_line(WINDOW *window, int y, int x, line_t *line, int max_cols, int colors) { int i = 0; // increment char *c; // char pointer for iteration - char *special = "\\*_"; // list of interpreted chars + char *special = "\\*_`"; // list of interpreted chars cstack_t *stack = cstack_init(); if(line->text->text) { @@ -366,7 +380,8 @@ void add_line(WINDOW *window, int y, int x, line_t *line, int max_cols, int colo offset = CODE_INDENT; // reverse color for code blocks - wattron(window, A_REVERSE); + if(colors) + wattron(window, COLOR_PAIR(CP_BLACK)); // print whole lines mvwprintw(window, @@ -405,10 +420,15 @@ void add_line(WINDOW *window, int y, int x, line_t *line, int max_cols, int colo if(CHECK_BIT(line->bits, IS_QUOTE)) { while(line->text->text[offset] == '>') { // print a reverse color block - wattron(window, A_REVERSE); - wprintw(window, "%s", " "); - wattroff(window, A_REVERSE); - wprintw(window, "%s", " "); + if(colors) { + wattron(window, COLOR_PAIR(CP_BLACK)); + wprintw(window, "%s", " "); + wattron(window, COLOR_PAIR(CP_WHITE)); + wprintw(window, "%s", " "); + } else { + wprintw(window, "%s", ">"); + } + // find next quote or break offset++; if(line->text->text[offset] == ' ') @@ -440,6 +460,11 @@ void add_line(WINDOW *window, int y, int x, line_t *line, int max_cols, int colo case '_': wattroff(window, A_UNDERLINE); break; + // disable inline code + case '`': + if(colors) + wattron(window, COLOR_PAIR(CP_WHITE)); + break; } // remove top special char from stack @@ -464,6 +489,11 @@ void add_line(WINDOW *window, int y, int x, line_t *line, int max_cols, int colo case '_': wattron(window, A_UNDERLINE); break; + // enable inline code + case '`': + if(colors) + wattron(window, COLOR_PAIR(CP_BLACK)); + break; // do nothing for backslashes } @@ -495,6 +525,11 @@ void add_line(WINDOW *window, int y, int x, line_t *line, int max_cols, int colo case '_': wattroff(window, A_UNDERLINE); break; + // disable inline code + case '`': + if(colors) + wattron(window, COLOR_PAIR(CP_WHITE)); + break; // do nothing for backslashes } } @@ -509,7 +544,6 @@ void add_line(WINDOW *window, int y, int x, line_t *line, int max_cols, int colo if(colors) wattron(window, COLOR_PAIR(CP_WHITE)); wattroff(window, A_UNDERLINE); - wattroff(window, A_REVERSE); } (stack->delete)(stack); @@ -517,7 +551,7 @@ void add_line(WINDOW *window, int y, int x, line_t *line, int max_cols, int colo void fade_out(WINDOW *window, int trans, int colors, int invert) { int i; // increment - if(colors) { + if(colors && COLORS == 256) { for(i = 22; i >= 0; i--) { // dim color pairs @@ -525,10 +559,12 @@ void fade_out(WINDOW *window, int trans, int colors, int invert) { init_pair(CP_WHITE, white_ramp_invert[i], trans); init_pair(CP_BLUE, blue_ramp_invert[i], trans); init_pair(CP_RED, red_ramp_invert[i], trans); + init_pair(CP_BLACK, 15, white_ramp_invert[i]); } else { init_pair(CP_WHITE, white_ramp[i], trans); init_pair(CP_BLUE, blue_ramp[i], trans); init_pair(CP_RED, red_ramp[i], trans); + init_pair(CP_BLACK, 16, white_ramp[i]); } // refresh window with new color @@ -542,7 +578,7 @@ void fade_out(WINDOW *window, int trans, int colors, int invert) { void fade_in(WINDOW *window, int trans, int colors, int invert) { int i; // increment - if(colors) { + if(colors && COLORS == 256) { for(i = 0; i <= 23; i++) { // brighten color pairs @@ -550,10 +586,12 @@ void fade_in(WINDOW *window, int trans, int colors, int invert) { init_pair(CP_WHITE, white_ramp_invert[i], trans); init_pair(CP_BLUE, blue_ramp_invert[i], trans); init_pair(CP_RED, red_ramp_invert[i], trans); + init_pair(CP_BLACK, 15, white_ramp_invert[i]); } else { init_pair(CP_WHITE, white_ramp[i], trans); init_pair(CP_BLUE, blue_ramp[i], trans); init_pair(CP_RED, red_ramp[i], trans); + init_pair(CP_BLACK, 16, white_ramp[i]); } // refresh window with new color