From 470fc96361fe47b5b4a72deaa8fb3b736f30a471 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Ankarstr=C3=B6m?= Date: Fri, 17 Sep 2021 01:14:23 +0200 Subject: First commit --- maketpl | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100755 maketpl (limited to 'maketpl') diff --git a/maketpl b/maketpl new file mode 100755 index 0000000..7908f3b --- /dev/null +++ b/maketpl @@ -0,0 +1,55 @@ +#!/usr/bin/env perl + +# `maketpl' translates a template file (.t) to a C program (.tc) +# that prints that template with the desired interpolations. + +use strict; +use warnings; + +my $buf; + +while () { + if (/(.*)\<%=(.+)%\>(.*)/) { + $buf .= $1; + flsh(); + print qq(printf("%s", $2);\n); + if ($3) { + $buf .= "$3\n"; + } + } elsif (/(.*)\<%/) { + my $code; + $buf .= $1; + flsh(); + if (/\<%(.*)%\>(.*)/) { + $code = $1; + $buf .= $2; + $buf .= "\n"; + } else { + /\<%(.*)/; + $code = $1; + while () { + if (/(.*)%\>(.*)/) { + $code .= $1; + $buf .= $2; + $buf .= "\n"; + last; + } + $code .= $_; + } + } + print $code; + } else { + $buf .= $_; + } +} + +flsh(); + +sub flsh { + return if not $buf; + $buf =~ s/\\/\\\\/g; + $buf =~ s/"/\\"/g; + $buf =~ s/\n/\\n/g; + print qq(printf("$buf");\n); + $buf = ''; +} \ No newline at end of file -- cgit v1.2.3