-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
- cstack_t *stack = cstack_init();
-
- if(line->text->text) {
- int offset = 0; // text offset
-
- // IS_UNORDERED_LIST_3
- if(CHECK_BIT(line->bits, IS_UNORDERED_LIST_3)) {
- offset = next_nonblank(line->text, 0);
- char format_s[15];
- strcpy(&format_s[0], CHECK_BIT(line->bits, IS_UNORDERED_LIST_1)? " | " : " ");
- strcpy(&format_s[4], CHECK_BIT(line->bits, IS_UNORDERED_LIST_2)? " | " : " ");
- strcpy(&format_s[8], line->next && CHECK_BIT(line->next->bits, IS_UNORDERED_LIST_3)? " +- %s" : " `- %s");
- mvwprintw(window,
- y, x,
- format_s,
- &line->text->text[offset + 2]);
-
- // IS_UNORDERED_LIST_2
- } else if(CHECK_BIT(line->bits, IS_UNORDERED_LIST_2)) {
- offset = next_nonblank(line->text, 0);
- char format_s[11];
- strcpy(&format_s[0], CHECK_BIT(line->bits, IS_UNORDERED_LIST_1)? " | " : " ");
- strcpy(&format_s[4], line->next && CHECK_BIT(line->next->bits, IS_UNORDERED_LIST_2)? " +- %s" : " `- %s");
- mvwprintw(window,
- y, x,
- format_s,
- &line->text->text[offset + 2]);
-
- // IS_UNORDERED_LIST_1
- } else if(CHECK_BIT(line->bits, IS_UNORDERED_LIST_1)) {
- offset = next_nonblank(line->text, 0);
- char format_s[7];
- strcpy(&format_s[0], line->next && CHECK_BIT(line->next->bits, IS_UNORDERED_LIST_1)? " +- %s" : " `- %s");
- mvwprintw(window,
- y, x,
- format_s,
- &line->text->text[offset + 2]);
-
- // IS_CODE
- } else if(CHECK_BIT(line->bits, IS_CODE)) {
+void setup_list_strings(void)
+{
+ const char *str;
+
+ /* utf8 can require 6 bytes */
+ if ((str = getenv("MDP_LIST_OPEN")) != NULL && strlen(str) <= 4*6) {
+ list_open1 = list_open2 = list_open3 = str;
+ } else {
+ if ((str = getenv("MDP_LIST_OPEN1")) != NULL && strlen(str) <= 4*6)
+ list_open1 = str;
+ if ((str = getenv("MDP_LIST_OPEN2")) != NULL && strlen(str) <= 4*6)
+ list_open2 = str;
+ if ((str = getenv("MDP_LIST_OPEN3")) != NULL && strlen(str) <= 4*6)
+ list_open3 = str;
+ }
+ if ((str = getenv("MDP_LIST_HEAD")) != NULL && strlen(str) <= 4*6) {
+ list_head1 = list_head2 = list_head3 = str;
+ } else {
+ if ((str = getenv("MDP_LIST_HEAD1")) != NULL && strlen(str) <= 4*6)
+ list_head1 = str;
+ if ((str = getenv("MDP_LIST_HEAD2")) != NULL && strlen(str) <= 4*6)
+ list_head2 = str;
+ if ((str = getenv("MDP_LIST_HEAD3")) != NULL && strlen(str) <= 4*6)
+ list_head3 = str;
+ }
+}
+
+void add_line(WINDOW *window, int y, int x, line_t *line, int max_cols, int colors, int nocodebg) {
+
+ int i; // increment
+ int offset = 0; // text offset
+
+ // move the cursor in position
+ wmove(window, y, x);
+
+ if(!line->text->value) {
+
+ // fill rest off line with spaces if we are in a code block
+ if(CHECK_BIT(line->bits, IS_CODE) && colors) {
+ if(colors && !nocodebg)
+ wattron(window, COLOR_PAIR(CP_BLACK));
+ for(i = getcurx(window) - x; i < max_cols; i++)
+ wprintw(window, "%s", " ");
+ }
+
+ // do nothing
+ return;
+ }
+
+ // IS_UNORDERED_LIST_3
+ if(CHECK_BIT(line->bits, IS_UNORDERED_LIST_3)) {
+ offset = next_nonblank(line->text, 0);
+ char prompt[13 * 6];
+ int pos = 0, len, cnt;
+ len = sizeof(prompt) - pos;
+ cnt = snprintf(&prompt[pos], len, "%s", CHECK_BIT(line->bits, IS_UNORDERED_LIST_1)? list_open1 : " ");
+ pos += (cnt > len - 1 ? len - 1 : cnt);
+ len = sizeof(prompt) - pos;
+ cnt = snprintf(&prompt[pos], len, "%s", CHECK_BIT(line->bits, IS_UNORDERED_LIST_2)? list_open2 : " ");
+ pos += (cnt > len - 1 ? len - 1 : cnt);
+ len = sizeof(prompt) - pos;
+
+ if(CHECK_BIT(line->bits, IS_UNORDERED_LIST_EXT)) {
+ snprintf(&prompt[pos], len, "%s", line->next && CHECK_BIT(line->next->bits, IS_UNORDERED_LIST_3)? list_open3 : " ");
+ } else {
+ snprintf(&prompt[pos], len, "%s", list_head3);
+ offset += 2;
+ }
+
+ wprintw(window,
+ "%s", prompt);
+
+ if(!CHECK_BIT(line->bits, IS_CODE))
+ inline_display(window, &line->text->value[offset], colors, nocodebg);
+
+ // IS_UNORDERED_LIST_2
+ } else if(CHECK_BIT(line->bits, IS_UNORDERED_LIST_2)) {
+ offset = next_nonblank(line->text, 0);
+ char prompt[9 * 6];
+ int pos = 0, len, cnt;
+ len = sizeof(prompt) - pos;
+ cnt = snprintf(&prompt[pos], len, "%s", CHECK_BIT(line->bits, IS_UNORDERED_LIST_1)? list_open1 : " ");
+ pos += (cnt > len - 1 ? len - 1 : cnt);
+ len = sizeof(prompt) - pos;
+
+ if(CHECK_BIT(line->bits, IS_UNORDERED_LIST_EXT)) {
+ snprintf(&prompt[pos], len, "%s", line->next && CHECK_BIT(line->next->bits, IS_UNORDERED_LIST_2)? list_open2 : " ");
+ } else {
+ snprintf(&prompt[pos], len, "%s", list_head2);
+ offset += 2;
+ }
+
+ wprintw(window,
+ "%s", prompt);
+
+ if(!CHECK_BIT(line->bits, IS_CODE))
+ inline_display(window, &line->text->value[offset], colors, nocodebg);
+
+ // IS_UNORDERED_LIST_1
+ } else if(CHECK_BIT(line->bits, IS_UNORDERED_LIST_1)) {
+ offset = next_nonblank(line->text, 0);
+ char prompt[5 * 6];
+
+ if(CHECK_BIT(line->bits, IS_UNORDERED_LIST_EXT)) {
+ strcpy(&prompt[0], line->next && CHECK_BIT(line->next->bits, IS_UNORDERED_LIST_1)? list_open1 : " ");
+ } else {
+ strcpy(&prompt[0], list_head1);
+ offset += 2;
+ }