From bd43c075db3d89805f5c102e02f2bc854a9d9354 Mon Sep 17 00:00:00 2001 From: Alex Karle Date: Fri, 17 Dec 2021 00:16:16 -0500 Subject: [PATCH] Simplify links, add bold, italic, and html escapes --- blag.c | 125 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------- 1 file changed, 79 insertions(+), 46 deletions(-) diff --git a/blag.c b/blag.c index 5b32436..07dab87 100644 --- a/blag.c +++ b/blag.c @@ -10,7 +10,7 @@ * *

tags around paragraphs * - * * bullets (non-nested), breaks allowed if indented + * - bullets (non-nested), breaks allowed if indented * * 1. numerical lists (non-nested), breaks allowed if indented * @@ -18,11 +18,11 @@ * * TAB code blocks * - * Inline `code` + * Inline `code`, _italics_, and *bold* * * Escaping via \ * - * [[url|Links]] + * [url Links] * * TODO: * ----- @@ -52,10 +52,30 @@ enum Block { OLIST_BREAK, LINK_URL_PARSE, LINK_DESC_PARSE, - POTENTIAL_LINK, - POTENTIAL_LINK_END }; +void putesc(int c) { + switch (c) { + case '<': + printf("<"); + break; + case '>': + printf(">"); + break; + case '&': + printf("&"); + break; + case '"': + printf("""); + break; + case '\'': + printf("'"); + break; + default: + putchar(c); + } +} + int closeblock(int in, int hlvl) { if (in == HEADER) { in = NONE; @@ -100,14 +120,15 @@ int parse() { * continue or truly be broken on a second newline (PARAGRAPH, CODE, * U/OLIST, etc). Several of the variable length tokens (like ordered * list numbers, header level, etc) enter a "PARSE" mode where special - * action is taken until the parsing is done (usually on ' ', but for - * links on '|') + * action is taken until the parsing is done (usually on ' ') */ int c; enum Block in = NONE; enum Block in_link = NONE; int hlvl = 0; - int in_code; + int in_code = 0; + int in_ital = 0; + int in_bold = 0; int escape = 0; while ((c = getchar()) != EOF) { /* Handle Escapes before all else */ @@ -116,18 +137,11 @@ int parse() { in = PARAGRAPH; printf("

\n"); } - putchar(c); + putesc(c); escape = 0; continue; } - /* Reset special "potential" states */ - if (c != '[' && in_link == POTENTIAL_LINK) { - in_link = NONE; - } else if (c != ']' && in_link == POTENTIAL_LINK_END) { - in_link = NONE; - } - /* Handle unique state changes by char */ switch (c) { case '\\': @@ -141,7 +155,7 @@ int parse() { hlvl++; } else { /* not a special # */ - putchar(c); + putesc(c); } break; case ' ': @@ -168,17 +182,48 @@ int parse() { } else if (in == OLIST_BREAK) { /* assume it's a continuation! */ in = OLIST; + } else if (in_link == LINK_URL_PARSE) { + in_link = LINK_DESC_PARSE; + printf("\">"); } else { - putchar(c); + putesc(c); } break; case '`': - if (in_code) { - printf(""); - in_code = 0; + if (in_link == NONE) { + if (in_code) { + printf(""); + in_code = 0; + } else { + printf(""); + in_code = 1; + } + } + break; + case '*': + if (!in_code && in_link == NONE) { + if (in_bold) { + printf(""); + in_bold = 0; + } else { + printf(""); + in_bold = 1; + } + } else { + putesc(c); + } + break; + case '_': + if (!in_code && in_link == NONE) { + if (in_ital) { + printf(""); + in_ital = 0; + } else { + printf(""); + in_ital = 1; + } } else { - printf(""); - in_code = 1; + putesc(c); } break; case '\t': @@ -188,7 +233,7 @@ int parse() { } else if (in == CODE_BREAK) { in = CODE; } else { - putchar(c); + putesc(c); } break; case '>': @@ -198,13 +243,11 @@ int parse() { } else if (in == QUOTE_BREAK) { in = QUOTE; } else { - putchar(c); + putesc(c); } break; case '[': if (in_link == NONE) { - in_link = POTENTIAL_LINK; - } else if (in_link == POTENTIAL_LINK) { if (in == NONE) { /* Assume this is a new paragraph */ in = PARAGRAPH; @@ -214,31 +257,21 @@ int parse() { in_link = LINK_URL_PARSE; printf(""); - } else { - putchar(c); + putesc(c); } break; case ']': if (in_link == LINK_DESC_PARSE) { - in_link = POTENTIAL_LINK_END; - } else if (in_link == POTENTIAL_LINK_END) { in_link = NONE; printf(""); } else { - putchar(c); + putesc(c); } break; - case '*': + case '-': if (in == NONE) { in = ULIST_START; } else if (in == ULIST_START || in == ULIST_PARSE) { @@ -247,7 +280,7 @@ int parse() { /* next list item */ in = ULIST_PARSE; } else { - putchar(c); + putesc(c); } break; case '1': @@ -268,13 +301,13 @@ int parse() { /* next list item */ in = OLIST_PARSE; } else { - putchar(c); + putesc(c); } break; case '\n': in = closeblock(in, hlvl); if (in != ULIST_BREAK && in != OLIST_BREAK) { - putchar(c); + putesc(c); } break; default: @@ -286,7 +319,7 @@ int parse() { /* We thought it might be the end, but it aint! */ in = PARAGRAPH; } - putchar(c); + putesc(c); break; } } -- libgit2 1.1.1