From d83a53beb823f9e1cbd73ea214fe99a1511f5f59 Mon Sep 17 00:00:00 2001 From: Inqiyad Sabr Date: Mon, 3 Nov 2025 00:08:18 +0600 Subject: Code Cleanup, More strict checks The previous write up was a disaster but it works, not very strict, it skips some edge cases for performance. Your gemini capsule might be large and stuff. But I decided to opt for code readability over performance for now. Going to work on optimisations later. --- g2x.c | 118 +++++++++++++++++++++++++++++++++++------------------------------- 1 file changed, 63 insertions(+), 55 deletions(-) (limited to 'g2x.c') diff --git a/g2x.c b/g2x.c index f53fff0..d2d7cef 100644 --- a/g2x.c +++ b/g2x.c @@ -1,68 +1,76 @@ #include +#include + #define BUFSIZE 4096 #define xmlput(n)\ - for(i = n; buf[i] != '\n'; i++) {\ - switch(buf[i]) {\ - default: putchar(buf[i]); break;\ + for(pos = n; buf[pos] != '\n'; pos++) {\ + switch(buf[pos]) {\ + default: putchar(buf[pos]); break;\ case '>' : fputs(">",stdout); break;\ case '<' : fputs("<",stdout); break;\ case '&' : fputs("&",stdout); break;\ case '\'': fputs("'",stdout); break;\ - case '"' : fputs(""",stdout); break;}} -int main(void) { - char buf[BUFSIZE]; int i; - fputs( + case '"' : fputs(""",stdout); break;\ + }\ + } +#define html(s) fputs(s,stdout) +#define getbuf() fgets(buf,BUFSIZE,stdin) + +int main(void) +{ + char buf[BUFSIZE]; + int pos, list_state = 0; + + html( "\n" - "\n" - "\n\n" - "\n" - "\n" - "",stdout - ); while (fgets(buf,BUFSIZE,stdin) != NULL) { - if (buf[2] == '#')/* ### */ { - fputs("

",stdout); - xmlput(4); fputs("

\n",stdout); - continue; - } else if (buf[1] == '#') /* ## */ { - fputs("

",stdout); - xmlput(3); fputs("

\n",stdout); - continue; - } else if (buf[0] == '#') /* # */ { - fputs("

",stdout); - xmlput(2); fputs("

\n",stdout); + "\n" + "\n" + "\n" + "\n" + "\n" + ); + + while (getbuf() != NULL) + { + if (!strncmp(buf,"###",3)) { + html("

"); xmlput(4); html("

"); continue; + } else if (!strncmp(buf,"##",2)) { + html("

"); xmlput(3); html("

"); continue; + } else if (buf[0] == '#') { + html("

"); xmlput(2); html("

"); continue; + } + else if (buf[0] == '>') { + fputs("
",stdout); xmlput(2); + fputs("
\n",stdout); continue; + } + else if (buf[0] == '*') { + if (list_state == 0) html("
    \n"); + html("
  • "); xmlput(2); html("
  • \n"); + list_state = 1; continue; - } else if (buf[0] == '*') { - fputs("
    • ",stdout); xmlput(2); - fputs("
    \n",stdout); continue; - } else if (buf[0] == '=' && buf[1] == '>')/* link */ { - fputs("

    ",stdout); xmlput(i+1); - fputs("

    \n",stdout); + } else if (list_state == 1) { + html("
\n"); + list_state = 0; continue; - } else if (buf[0] == '`' && buf[2] == '`')/* code */ { - fputs("
",stdout);
-			fgets(buf,BUFSIZE,stdin);
-			while (buf[0] != '`' && buf[2] != '`') {
-				xmlput(0); fputs("\n",stdout);
-				fgets(buf,BUFSIZE,stdin);
-			} fputs("
",stdout); + } + else if (!strncmp(buf,"=>",2)) { + html("

"); xmlput(pos); html("

\n"); continue; - } else if (buf[0] == '>') { - fputs("
",stdout); xmlput(2); - fputs("
\n",stdout); + } + else if (!strncmp(buf,"```",3)) { + getbuf(); html("
");
+			while (strncmp(buf,"```",3)) {
+				xmlput(0); putchar('\n'); getbuf();
+			} html("
\n"); continue; - } fputs("

",stdout); - xmlput(0); fputs("

\n",stdout); - } fputs("",stdout); - fputs("",stdout); + } html("

"); xmlput(0); html("

\n"); + } html(""); html(""); } -- cgit v1.2.3