various improvements
[smdp.git] / src / viewer.c
index 3e4284b..13ff6f6 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,38 +415,63 @@ 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)? " |  " : "    ");
+
+        if(CHECK_BIT(line->bits, IS_UNORDERED_LIST_EXT)) {
+            strcpy(&prompt[8], line->next && CHECK_BIT(line->next->bits, IS_UNORDERED_LIST_3)? " |  " : "    ");
+        } else {
+            strcpy(&prompt[8], " +- ");
+            offset += 2;
+        }
+
         wprintw(window,
                 "%s", prompt);
 
-        inline_display(window, &line->text->text[offset + 2], colors);
+        if(!CHECK_BIT(line->bits, IS_CODE))
+            inline_display(window, &line->text->text[offset], colors);
 
     // 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)? " |  " : "    ");
+
+        if(CHECK_BIT(line->bits, IS_UNORDERED_LIST_EXT)) {
+            strcpy(&prompt[4], line->next && CHECK_BIT(line->next->bits, IS_UNORDERED_LIST_2)? " |  " : "    ");
+        } else {
+            strcpy(&prompt[4], " +- ");
+            offset += 2;
+        }
+
         wprintw(window,
                 "%s", prompt);
 
-        inline_display(window, &line->text->text[offset + 2], colors);
+        if(!CHECK_BIT(line->bits, IS_CODE))
+            inline_display(window, &line->text->text[offset], colors);
 
     // 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];
+
+        if(CHECK_BIT(line->bits, IS_UNORDERED_LIST_EXT)) {
+            strcpy(&prompt[0], line->next && CHECK_BIT(line->next->bits, IS_UNORDERED_LIST_1)? " |  " : "    ");
+        } else {
+            strcpy(&prompt[0], " +- ");
+            offset += 2;
+        }
+
         wprintw(window,
                 "%s", prompt);
 
-        inline_display(window, &line->text->text[offset + 2], colors);
+        if(!CHECK_BIT(line->bits, IS_CODE))
+            inline_display(window, &line->text->text[offset], colors);
+    }
 
     // IS_CODE
-    } else if(CHECK_BIT(line->bits, IS_CODE)) {
+    if(CHECK_BIT(line->bits, IS_CODE)) {
 
         // set static offset for code
         offset = CODE_INDENT;
@@ -458,29 +483,12 @@ void add_line(WINDOW *window, int y, int x, line_t *line, int max_cols, int colo
         // print whole lines
         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)) {
-
-        // set headline color
-        if(colors)
-            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
-        wprintw(window,
-                "%s", &line->text->text[offset]);
-
-        wattroff(window, A_UNDERLINE);
-
-    } else {
+    if(!CHECK_BIT(line->bits, IS_UNORDERED_LIST_1) &&
+       !CHECK_BIT(line->bits, IS_UNORDERED_LIST_2) &&
+       !CHECK_BIT(line->bits, IS_UNORDERED_LIST_3) &&
+       !CHECK_BIT(line->bits, IS_CODE)) {
 
         // IS_QUOTE
         if(CHECK_BIT(line->bits, IS_QUOTE)) {
@@ -500,9 +508,44 @@ void add_line(WINDOW *window, int y, int x, line_t *line, int max_cols, int colo
                 if(line->text->text[offset] == ' ')
                     offset = next_word(line->text, offset);
             }
-        }
 
-        inline_display(window, &line->text->text[offset], colors);
+            inline_display(window, &line->text->text[offset], colors);
+        } else {
+
+            // IS_CENTER
+            if(CHECK_BIT(line->bits, IS_CENTER)) {
+                if(line->length < max_cols) {
+                    wmove(window, y, x + ((max_cols - line->length) / 2));
+                }
+            }
+
+            // IS_H1 || IS_H2
+            if(CHECK_BIT(line->bits, IS_H1) || CHECK_BIT(line->bits, IS_H2)) {
+
+                // set headline color
+                if(colors)
+                    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
+                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