added special char for horizontal centering (#3)
[smdp.git] / src / viewer.c
index 3e4284b..4aec11e 100644 (file)
@@ -146,7 +146,7 @@ int ncurses_display(deck_t *deck, int notrans, int nofade, int invert) {
         endwin();
 
         // print error
-        fprintf(stderr, "Error: Terminal heigth (%i lines) too small. Need at least %i lines.\n", LINES, max_lines + bar_top + bar_bottom);
+        fprintf(stderr, "Error: Terminal height (%i lines) too small. Need at least %i lines.\n", LINES, max_lines + bar_top + bar_bottom);
         fprintf(stderr, "You may need to add additional horizontal rules ('***') to split your file in shorter slides.\n");
 
         return 1;
@@ -415,10 +415,10 @@ void add_line(WINDOW *window, int y, int x, line_t *line, int max_cols, int colo
     // IS_UNORDERED_LIST_3
     if(CHECK_BIT(line->bits, IS_UNORDERED_LIST_3)) {
         offset = next_nonblank(line->text, 0);
-        char prompt[10];
-        strcpy(&prompt[0], CHECK_BIT(line->bits, IS_UNORDERED_LIST_1)? "|  " : "   ");
-        strcpy(&prompt[3], CHECK_BIT(line->bits, IS_UNORDERED_LIST_2)? "|  " : "   ");
-        strcpy(&prompt[6], line->next && CHECK_BIT(line->next->bits, IS_UNORDERED_LIST_3)? "+- " : "`- ");
+        char prompt[13];
+        strcpy(&prompt[0], CHECK_BIT(line->bits, IS_UNORDERED_LIST_1)? " |  " : "    ");
+        strcpy(&prompt[4], CHECK_BIT(line->bits, IS_UNORDERED_LIST_2)? " |  " : "    ");
+        strcpy(&prompt[8], line->next && CHECK_BIT(line->next->bits, IS_UNORDERED_LIST_3)? " +- " : " `- ");
         wprintw(window,
                 "%s", prompt);
 
@@ -427,9 +427,9 @@ void add_line(WINDOW *window, int y, int x, line_t *line, int max_cols, int colo
     // IS_UNORDERED_LIST_2
     } else if(CHECK_BIT(line->bits, IS_UNORDERED_LIST_2)) {
         offset = next_nonblank(line->text, 0);
-        char prompt[7];
-        strcpy(&prompt[0], CHECK_BIT(line->bits, IS_UNORDERED_LIST_1)? "|  " : "   ");
-        strcpy(&prompt[3], line->next && CHECK_BIT(line->next->bits, IS_UNORDERED_LIST_2)? "+- " : "`- ");
+        char prompt[9];
+        strcpy(&prompt[0], CHECK_BIT(line->bits, IS_UNORDERED_LIST_1)? " |  " : "    ");
+        strcpy(&prompt[4], line->next && CHECK_BIT(line->next->bits, IS_UNORDERED_LIST_2)? " +- " : " `- ");
         wprintw(window,
                 "%s", prompt);
 
@@ -438,8 +438,8 @@ void add_line(WINDOW *window, int y, int x, line_t *line, int max_cols, int colo
     // IS_UNORDERED_LIST_1
     } else if(CHECK_BIT(line->bits, IS_UNORDERED_LIST_1)) {
         offset = next_nonblank(line->text, 0);
-        char prompt[4];
-        strcpy(&prompt[0], line->next && CHECK_BIT(line->next->bits, IS_UNORDERED_LIST_1)? "+- " : "`- ");
+        char prompt[5];
+        strcpy(&prompt[0], line->next && CHECK_BIT(line->next->bits, IS_UNORDERED_LIST_1)? " +- " : " `- ");
         wprintw(window,
                 "%s", prompt);
 
@@ -459,50 +459,62 @@ void add_line(WINDOW *window, int y, int x, line_t *line, int max_cols, int colo
         wprintw(window,
                 "%s", &line->text->text[offset]);
 
-    // IS_H1 || IS_H2
-    } else if(CHECK_BIT(line->bits, IS_H1) || CHECK_BIT(line->bits, IS_H2)) {
+    // IS_QUOTE
+    } else if(CHECK_BIT(line->bits, IS_QUOTE)) {
+        while(line->text->text[offset] == '>') {
+            // print a reverse color block
+            if(colors) {
+                wattron(window, COLOR_PAIR(CP_BLACK));
+                wprintw(window, "%s", " ");
+                wattron(window, COLOR_PAIR(CP_WHITE));
+                wprintw(window, "%s", " ");
+            } else {
+                wprintw(window, "%s", ">");
+            }
 
-        // set headline color
-        if(colors)
-            wattron(window, COLOR_PAIR(CP_BLUE));
+            // find next quote or break
+            offset++;
+            if(line->text->text[offset] == ' ')
+                offset = next_word(line->text, offset);
+        }
 
-        // enable underline for H1
-        if(CHECK_BIT(line->bits, IS_H1))
-            wattron(window, A_UNDERLINE);
+        inline_display(window, &line->text->text[offset], colors);
 
-        // skip hashes
-        while(line->text->text[offset] == '#')
-            offset = next_word(line->text, offset);
+    } else {
 
-        // print whole lines
-        wprintw(window,
-                "%s", &line->text->text[offset]);
+        // IS_CENTER
+        if(CHECK_BIT(line->bits, IS_CENTER)) {
+            if(line->length < max_cols) {
+                wmove(window, y, x + ((max_cols - line->length) / 2));
+            }
+        }
 
-        wattroff(window, A_UNDERLINE);
+        // IS_H1 || IS_H2
+        if(CHECK_BIT(line->bits, IS_H1) || CHECK_BIT(line->bits, IS_H2)) {
 
-    } else {
+            // set headline color
+            if(colors)
+                wattron(window, COLOR_PAIR(CP_BLUE));
 
-        // IS_QUOTE
-        if(CHECK_BIT(line->bits, IS_QUOTE)) {
-            while(line->text->text[offset] == '>') {
-                // print a reverse color block
-                if(colors) {
-                    wattron(window, COLOR_PAIR(CP_BLACK));
-                    wprintw(window, "%s", " ");
-                    wattron(window, COLOR_PAIR(CP_WHITE));
-                    wprintw(window, "%s", " ");
-                } else {
-                    wprintw(window, "%s", ">");
-                }
+            // enable underline for H1
+            if(CHECK_BIT(line->bits, IS_H1))
+                wattron(window, A_UNDERLINE);
 
-                // find next quote or break
-                offset++;
-                if(line->text->text[offset] == ' ')
-                    offset = next_word(line->text, offset);
-            }
-        }
+            // skip hashes
+            while(line->text->text[offset] == '#')
+                offset = next_word(line->text, offset);
 
-        inline_display(window, &line->text->text[offset], colors);
+            // print whole lines
+            wprintw(window,
+                    "%s", &line->text->text[offset]);
+
+            wattroff(window, A_UNDERLINE);
+
+        // no line-wide markdown
+        } else {
+
+            inline_display(window, &line->text->text[offset], colors);
+        }
     }
 
     // fill rest off line with spaces