X-Git-Url: https://git.danieliu.xyz/?p=smdp.git;a=blobdiff_plain;f=src%2Fparser.c;h=615cc6e26971c5191123282cb16864f45cf556a6;hp=465bdc16da6eea798c86fcfe7b19a8f9307063df;hb=b56994fd240a45f3b4060883f6a17c659c495e23;hpb=a7b433385ae4f244606f2d88ac9ae99d22f98586 diff --git a/src/parser.c b/src/parser.c index 465bdc1..615cc6e 100644 --- a/src/parser.c +++ b/src/parser.c @@ -158,7 +158,8 @@ deck_t *markdown_load(FILE *input, int noexpand) { slide = next_slide(slide); sc++; - } else if(CHECK_BIT(bits, IS_TILDE_CODE) && + } else if((CHECK_BIT(bits, IS_TILDE_CODE) || + CHECK_BIT(bits, IS_GFM_CODE)) && CHECK_BIT(bits, IS_EMPTY)) { // remove tilde code markers (text->reset)(text); @@ -400,6 +401,7 @@ int markdown_analyse(cstring_t *text, int prev) { static int unordered_list_level = 0; static int unordered_list_level_offset[] = {-1, -1, -1, -1}; static int num_tilde_characters = 0; + static int num_backticks = 0; int i = 0; // increment int bits = 0; // markdown bits @@ -447,6 +449,27 @@ int markdown_analyse(cstring_t *text, int prev) { return bits; } + // IS_GFM_CODE + if (wcsncmp(text->value, L"```", 3) == 0) { + int backticks_in_line = next_nonbacktick(text, 0); + if (backticks_in_line >= num_backticks) { + if (num_backticks > 0) { + num_backticks = 0; + } else { + num_backticks = backticks_in_line; + } + SET_BIT(bits, IS_EMPTY); + SET_BIT(bits, IS_GFM_CODE); + return bits; + } + } + + if (num_backticks > 0) { + SET_BIT(bits, IS_CODE); + SET_BIT(bits, IS_GFM_CODE); + return bits; + } + // IS_STOP if((offset < CODE_INDENT || !CHECK_BIT(prev, IS_CODE)) && (!wcsncmp(&text->value[offset], L"
", 4) || @@ -831,3 +854,10 @@ int next_nontilde(cstring_t *text, int i) { return i; } +int next_nonbacktick(cstring_t *text, int i) { + while ((i < text->size) && text->value[i] == L'`') + i++; + + return i; +} +