From 9bcf8e21bee491b842f337f9d9c879db287aac7f Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Wed, 19 Mar 2025 14:58:51 +0800 Subject: [PATCH] Make this mostly usable for Go --- example/test.htmpl | 13 +++++++++++++ gohtmplgen.c | 5 ++--- parse.y | 27 +++++++++++++-------------- diff --git a/example/test.htmpl b/example/test.htmpl new file mode 100644 index 0000000000000000000000000000000000000000..2894c9b7ea5324f0458b70df3e86291b08e8d82b --- /dev/null +++ b/example/test.htmpl @@ -0,0 +1,13 @@ +{{ define httpHandleIndex(w http.ResponseWriter, r *http.Request) }} +{! + var title = "Index"; +!} + + + + + +

{{ title }}

+ + +{{ end }} diff --git a/gohtmplgen.c b/gohtmplgen.c index 652ebd65f58051fd12171435b852cedb0627a6c9..576bfb2d580a93a4183571e7fb76f5ececf0b011 100644 --- a/gohtmplgen.c +++ b/gohtmplgen.c @@ -63,9 +63,8 @@ if (argc == 0) { if (parse(fp, "/dev/stdin") == -1) goto err; } else { - fputs("use fmt;\n", fp); - fputs("use io;\n", fp); - fputs("use htmpl;\n", fp); + fputs("import \"net/http\"\n", fp); + fputs("import \"fmt\"\n", fp); for (i = 0; i < argc; ++i) if (parse(fp, argv[i]) == -1) goto err; diff --git a/parse.y b/parse.y index 5592fe76769ad0c1eb8faceea305a9abd15ef12b..d22e544e9e24824d66db5cdcbfcad0e0bf608ab6 100644 --- a/parse.y +++ b/parse.y @@ -140,15 +140,15 @@ ; raw : nstring { dbg(); - fprintf(fp, "htmpl::write(handle, "); + fprintf(fp, "fmt.Fprint(w, "); printq($1); - fprintf(fp, ")?;\n"); + fprintf(fp, ")\n"); free($1); } ; block : define body end { - fputs("};\n", fp); + fputs("}\n", fp); in_define = 0; } ; @@ -157,7 +157,7 @@ define : '{' DEFINE string '}' { // TODO: Hare return in_define = 1; dbg(); - fprintf(fp, "fn %s = {\n", $3); + fprintf(fp, "func %s {\n", $3); free($3); } ; @@ -170,16 +170,16 @@ ; special : '{' RENDER string '}' { dbg(); - fprintf(fp, "%s?;\n", $3); + fprintf(fp, "%s\n", $3); free($3); } | printf - | if body endif { fputs("};\n", fp); } + | if body endif { fputs("}\n", fp); } | loop | '{' string '}' { dbg(); fprintf(fp, - "htmpl::write_escape_html(handle, %s)?;\n", + "fmt.Fprint(w, html.EscapeString(%s))\n", $2); // TODO: quoting issues free($2); } @@ -187,11 +187,10 @@ ; printf : '{' PRINTF { dbg(); - fputs("let _htmpl_tmp: str = fmt::asprintf(", fp); + fputs("_htmpl_tmp := fmt.Sprintf(", fp); } printfargs '}' { - fputs(");\n", fp); - fputs("defer free(_htmpl_tmp);", fp); - fputs("htmpl::write_escape_html(handle, _htmpl_tmp)?;\n", fp); + fputs(")\n", fp); + fputs("fmt.Fprint(w, html.EscapeString(_htmpl_tmp))\n", fp); } ; @@ -231,7 +230,7 @@ loop : '{' FOR stringy '}' { fprintf(fp, "for (%s) {\n", $3); free($3); } body end { - fputs("};\n", fp); + fputs("}\n", fp); } | '{' TQFOREACH STRING STRING STRING '}' { fprintf(fp, "TAILQ_FOREACH(%s, %s, %s) {\n", @@ -240,13 +239,13 @@ free($3); free($4); free($5); } body end { - fputs("};\n", fp); + fputs("}\n", fp); } | '{' WHILE stringy '}' { fprintf(fp, "while (%s) {\n", $3); free($3); } body end { - fputs("};\n", fp); + fputs("}\n", fp); } ; -- 2.48.1