mirror of
https://github.com/visit1985/mdp.git
synced 2024-11-23 00:03:52 +03:00
support Github style code formatting (#121)
Signed-off-by: Namhyung Kim <namhyung@gmail.com>
This commit is contained in:
parent
a7b433385a
commit
b56994fd24
@ -48,6 +48,7 @@ enum line_bitmask {
|
||||
IS_QUOTE,
|
||||
IS_CODE,
|
||||
IS_TILDE_CODE,
|
||||
IS_GFM_CODE,
|
||||
IS_HR,
|
||||
IS_UNORDERED_LIST_1,
|
||||
IS_UNORDERED_LIST_2,
|
||||
|
@ -59,5 +59,6 @@ int prev_blank(cstring_t *text, int i);
|
||||
int next_blank(cstring_t *text, int i);
|
||||
int next_word(cstring_t *text, int i);
|
||||
int next_nontilde(cstring_t *text, int i);
|
||||
int next_nonbacktick(cstring_t *text, int i);
|
||||
|
||||
#endif // !defined( PARSER_H )
|
||||
|
28
sample.md
28
sample.md
@ -115,8 +115,8 @@ at least as many or more ~ for closing.
|
||||
becomes
|
||||
|
||||
~~~ {.numberLines}
|
||||
int main(int argc, char \*argv[]) {
|
||||
printf("%s\\n", "Hello world!");
|
||||
int main(int argc, char *argv[]) {
|
||||
printf("%s\n", "Hello world!");
|
||||
}
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
@ -127,6 +127,30 @@ will be ignored
|
||||
|
||||
-> # Supported markdown formatting <-
|
||||
|
||||
You can also use [github](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) flavored markdown's
|
||||
code block. Use at least three backticks to open
|
||||
and at least as many or more backticks for closing.
|
||||
|
||||
\```
|
||||
\int main(int argc, char \*argv[]) {
|
||||
\ printf("%s\\n", "Hello world!");
|
||||
\}
|
||||
\```
|
||||
|
||||
becomes
|
||||
|
||||
```
|
||||
int main(int argc, char *argv[]) {
|
||||
printf("%s\n", "Hello world!");
|
||||
}
|
||||
```
|
||||
|
||||
Language hint will be ignored
|
||||
|
||||
-------------------------------------------------
|
||||
|
||||
-> # Supported markdown formatting <-
|
||||
|
||||
Quotes are auto-detected by preceding *>*.
|
||||
|
||||
Multiple *>* are interpreted as nested quotes.
|
||||
|
32
src/parser.c
32
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"<br>", 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;
|
||||
}
|
||||
|
||||
|
@ -656,7 +656,8 @@ void add_line(WINDOW *window, int y, int x, line_t *line, int max_cols, int colo
|
||||
// IS_CODE
|
||||
if(CHECK_BIT(line->bits, IS_CODE)) {
|
||||
|
||||
if (!CHECK_BIT(line->bits, IS_TILDE_CODE)) {
|
||||
if (!CHECK_BIT(line->bits, IS_TILDE_CODE) &&
|
||||
!CHECK_BIT(line->bits, IS_GFM_CODE)) {
|
||||
// set static offset for code
|
||||
offset = CODE_INDENT;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user