# <<====deeper=nesting====
#
+# gpt - a generic preprocessing tool
+#
+# This file is
+# Copyright (C) 2001 Ian Jackson <ian@davenant.greenend.org.uk>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
package GenericPrepTemplate;
#BEGIN {
sub process_input () {
my ($esc,$top,$want,$fh,$value,$wasyes);
while (length $l) {
- print DEBUG "L $fn:$lno:",join('',@oplist),
- ":`$l' e\`$expr' s\`$substr'\n";
+ print DEBUG "L $fn:${lno}_",join('',@oplist),
+ "_`$l' e\`$expr' s\`$substr'\n";
if (@oplist & 1) { # scanning perl
if ($l =~ m/^()\@\@/ || $l =~ m/([^\000])\@\@/) {
($to,$op,$esc,$l) = ($`,$1,$&,$');
add_perl($to);
if ($op =~ m/[ \t\n0-9a-zA-Z_\;\)\}?]/ || $op eq '') {
$top= pop @oplist;
+ if ($top eq '?') {
+ $op eq '?' or err("expected ?\@\@, got \@\@");
+ } else {
+ $op ne '?' or err("found ?\@\@ not after \@\@?");
+ }
if (!@oplist) {
# And evaluate.
- $expr.= $op unless $op =~ m/[?]/;
+ $expr.= $op unless $op eq '?';
$value= eval_expr();
if ($top eq '<') {
process_file($value);