From 0c001196b12c55bf07d46b24cd95cc719888334f Mon Sep 17 00:00:00 2001 From: Jeremy Rand Date: Thu, 29 Apr 2021 19:33:15 -0400 Subject: [PATCH] Some minor fixes to style translation. Quote blocks should be working now. Some extra carriage returns are removed. Some extra style debug output to figure out if there are problems. Extend the test.md file to better cover cases I care about (versus cases the md parser cares about). --- md2teach/main.c | 1 + md2teach/main.h | 1 + md2teach/style.c | 4 ++ md2teach/test.md | 89 +++++++++++++++++++++++++++++++------------- md2teach/translate.c | 10 ++--- 5 files changed, 74 insertions(+), 31 deletions(-) diff --git a/md2teach/main.c b/md2teach/main.c index c79663d..4b59773 100644 --- a/md2teach/main.c +++ b/md2teach/main.c @@ -35,6 +35,7 @@ char * commandName; int debugEnabled = 0; +int debugIndentLevel = 0; // Implementation diff --git a/md2teach/main.h b/md2teach/main.h index 6f1f43e..bc10dfd 100644 --- a/md2teach/main.h +++ b/md2teach/main.h @@ -12,6 +12,7 @@ extern char * commandName; extern int debugEnabled; +extern int debugIndentLevel; #endif /* main_h */ diff --git a/md2teach/style.c b/md2teach/style.c index 631092b..38d2f7f 100644 --- a/md2teach/style.c +++ b/md2teach/style.c @@ -222,6 +222,10 @@ void setStyle(tStyleType styleType, uint16_t textMask, uint16_t headerSize) // Check to see if the previous style actually emitted any characters and if not, // then just overwrite it with this new style. currentPos = outputPos(); + + if (debugEnabled) + fprintf(stderr, "%*ssetStyle(%u,%u,%u) @ offset %lu\n", debugIndentLevel, "", (uint16_t)styleType, textMask, headerSize, currentPos); + if (styleChangedAt == currentPos) { formatPtr->styleItems[lastStyleIndex].dataOffset = styleOffset; return; diff --git a/md2teach/test.md b/md2teach/test.md index 2eceab3..4822c95 100644 --- a/md2teach/test.md +++ b/md2teach/test.md @@ -1,45 +1,84 @@ -# h1 -## h2 -### h3 -#### h4 -##### h5 -###### h6 +# h1 *emphasis* **strong** ***stremphasis*** + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + +## h2 *emphasis* **strong** ***stremphasis*** + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + +### h3 *emphasis* **strong** ***stremphasis*** + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + +#### h4 *emphasis* **strong** ***stremphasis*** + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + +##### h5 *emphasis* **strong** ***stremphasis*** + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + +###### h6 *emphasis* **strong** ***stremphasis*** h1 == +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + h2 -- +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + -------------------- - indented code - * list item code - 1. number list code +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + + // indented code + for (i = 0; i < 100; i++) + printf("Hello, world!\n"); +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + ``` -fenced code -* list item code -1. number list code +// fenced code +for (i = 0; i < 100; i++) + printf("Hello, world!\n"); ``` - +> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +> +> Quote which leads to a list of bullet items: +> * list quote1 +> * list quote2 +> * list quote3 +> +> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +> Quote which leads to a list of numbered items: +> 1. number list quote1 +> 1. number list quote2 +> 1. number list quote3 +> +> Quote with *emphasis* **strong** ***stremphasis***. -> quote -> * list quote -> 1. number list quote +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. -* list item -1. list item +Paragraph which leads to a list of bullet items: +* list item1 +* list item2 +* list item3 + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + +Paragraph which leads to a list of numbered items: +1. list item1 +1. list item2 +1. list item3 + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. [ref]: /url -paragraph +paragraph with *emphasis* **strong** ***stremphasis*** A©&xA9;© Ӓ ꯍ `code` -*emph* **strong** ***strong emph*** -_emph_ __strong__ ___strong emph___ -[ref] [ref][] [link](/url) -![ref] ![ref][] ![img](/url) - -\\ \* \. \` \ diff --git a/md2teach/translate.c b/md2teach/translate.c index a7dc933..e8c162a 100644 --- a/md2teach/translate.c +++ b/md2teach/translate.c @@ -64,8 +64,6 @@ static MD_PARSER parser = { NULL // syntax }; -static int debugIndentLevel = 0; - static tBlockListItem * blockList = NULL; static uint16_t textStyleMask = STYLE_TEXT_PLAIN; @@ -318,7 +316,8 @@ static int enterBlockHook(MD_BLOCKTYPE type, void * detail, void * userdata) newBlock->numTabs = blockList->numTabs; if (blockList->styleType == STYLE_TYPE_QUOTE) newBlock->styleType = STYLE_TYPE_QUOTE; - newBlock->styleType = STYLE_TYPE_TEXT; + else + newBlock->styleType = STYLE_TYPE_TEXT; } newBlock->next = blockList; blockList = newBlock; @@ -505,11 +504,9 @@ static int leaveBlockHook(MD_BLOCKTYPE type, void * detail, void * userdata) break; case MD_BLOCK_UL: - writeChar('\r'); break; case MD_BLOCK_OL: - writeChar('\r'); break; case MD_BLOCK_LI: @@ -521,11 +518,12 @@ static int leaveBlockHook(MD_BLOCKTYPE type, void * detail, void * userdata) break; case MD_BLOCK_H: + if (blockList != NULL) + setStyle(blockList->styleType, textStyleMask, 0); writeChar('\r'); break; case MD_BLOCK_CODE: - writeChar('\r'); break; case MD_BLOCK_P: