From: Michael Göhler Date: Sun, 7 Sep 2014 19:36:36 +0000 (+0200) Subject: add color to CODE, H1 and H2 X-Git-Url: https://git.danieliu.xyz/?p=smdp.git;a=commitdiff_plain;h=f92a7609f7b4a6c72a892b16d371528213eca283 add color to CODE, H1 and H2 fixed CODE positioning fix segv for title only slides --- diff --git a/include/parser.h b/include/parser.h index f7e6847..da63fa1 100644 --- a/include/parser.h +++ b/include/parser.h @@ -13,5 +13,6 @@ int is_utf8(char ch); int length_utf8(char ch); int next_nonblank(cstring_t *text, int i); int next_blank(cstring_t *text, int i); +int next_word(cstring_t *text, int i); #endif // !defined( PARSER_H ) diff --git a/include/viewer.h b/include/viewer.h index 6b6d108..52a2296 100644 --- a/include/viewer.h +++ b/include/viewer.h @@ -11,7 +11,7 @@ #define FADE_DELAY 15000 // micro seconds int ncurses_display(deck_t *deck, int notrans, int nofade); -void add_line(WINDOW *window, int y, int x, line_t *line); +void add_line(WINDOW *window, int y, int x, line_t *line, int max_cols); void fade_out(WINDOW *window, int trans, int colors); void fade_in(WINDOW *window, int trans, int colors); diff --git a/parser.c b/parser.c index 3b56b5b..3346634 100644 --- a/parser.c +++ b/parser.c @@ -81,7 +81,7 @@ deck_t *markdown_load(FILE *input) { } else if(c == '\t') { // expand tab to spaces - for (i = 0; i <= EXPAND_TABS; i++) { + for (i = 0; i < EXPAND_TABS; i++) { (text->expand)(text, ' '); l++; } @@ -172,7 +172,8 @@ deck_t *markdown_load(FILE *input) { // remove line from linked list line->prev->next = line->next; - line->next->prev = line->prev; + if(line->next) + line->next->prev = line->prev; // set bits on revious line if(CHECK_BIT(line->bits, IS_H1)) { @@ -369,3 +370,7 @@ int next_blank(cstring_t *text, int i) { return i; } +int next_word(cstring_t *text, int i) { + return next_nonblank(text, next_blank(text, i)); +} + diff --git a/sample.md b/sample.md index e35b9e8..2f83e53 100644 --- a/sample.md +++ b/sample.md @@ -22,13 +22,16 @@ This is another test page. ## Code example - public static void main() { + public static void main() { + + printf("%s\n", "hello"); } Now with different indentation. function expand_tab { - } + printf("%s\n", "hello"); + } *** diff --git a/viewer.c b/viewer.c index a6cf53c..0f5d928 100644 --- a/viewer.c +++ b/viewer.c @@ -160,7 +160,7 @@ int ncurses_display(deck_t *deck, int notrans, int nofade) { // print lines while(line) { - add_line(content, l, (COLS - max_cols) / 2, line); + add_line(content, l, (COLS - max_cols) / 2, line, max_cols); line = line->next; l++; } @@ -227,14 +227,76 @@ int ncurses_display(deck_t *deck, int notrans, int nofade) { return(0); } -void add_line(WINDOW *window, int y, int x, line_t *line) { +void add_line(WINDOW *window, int y, int x, line_t *line, int max_cols) { + int i = 0; // increment + if(line->text->text) { int offset = 0; // text offset offset = next_nonblank(line->text, 0); - // print line to window - mvwprintw(window, - y, x, - "%s", &line->text->text[offset]); + + // IS_CODE + if(CHECK_BIT(line->bits, IS_CODE)) { + + // set static offset for code + offset = CODE_INDENT; + + // reverse color for code blocks + wattron(window, A_REVERSE); + + // print whole lines + mvwprintw(window, + y, x, + "%s", &line->text->text[offset]); + + // IS_QUOTE + } else if(CHECK_BIT(line->bits, IS_QUOTE)) { + //TODO replace greater sign with color block + + //FIXME remove dummy print code + mvwprintw(window, + y, x, + "%s", &line->text->text[offset]); + + } else { + + // IF_H1 || IF_H2 + if(CHECK_BIT(line->bits, IS_H1) || CHECK_BIT(line->bits, IS_H2)) { + + // set headline color + wattron(window, COLOR_PAIR(CP_BLUE)); + + // enable underline for H1 + if(CHECK_BIT(line->bits, IS_H1)) + wattron(window, A_UNDERLINE); + + // skip hashes + while(line->text->text[offset] == '#') + offset = next_word(line->text, offset); + + // print whole lines + mvwprintw(window, + y, x, + "%s", &line->text->text[offset]); + + wattroff(window, A_UNDERLINE); + + } else { + //TODO for each char in line + //TODO if *|_ highlight (maybe use a stack here?) + mvwprintw(window, + y, x, + "%s", &line->text->text[offset]); + } + } + + // fill rest off line with spaces + for(i = getcurx(window) - x; i < max_cols; i++) + wprintw(window, "%s", " "); + + // reset to default color + wattron(window, COLOR_PAIR(CP_WHITE)); + wattroff(window, A_UNDERLINE); + wattroff(window, A_REVERSE); } }