chiark
/
gitweb
/
~ianmdlvl
/
secnet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Syntax: only some directives' RHS should be &-expanded
[secnet.git]
/
generate
diff --git
a/generate
b/generate
index dd6df29451ba1327f63055f57945c007a73aa566..e1efc06a95bf11186df3f92c2d10cabf5d5552d4 100755
(executable)
--- a/
generate
+++ b/
generate
@@
-147,8
+147,14
@@
sub process_input_mk ($$$$$$$$$) {
$pfxmap{$_} = $srcdirmap{$_}.'/' foreach keys %srcdirmap;
while (<$input>) {
$pfxmap{$_} = $srcdirmap{$_}.'/' foreach keys %srcdirmap;
while (<$input>) {
- if (s#^\s*$esc\:##) {
+ if (s#^\s*$esc\:changequote\s+(\S+)\s+$##) {
+ $$esclitr = $1;
+ $set_esc->();
+ next;
+ } elsif (s#^\s*$esc\:(?=(-?)include)##) {
$buffering_output='';
$buffering_output='';
+ } elsif (m#^\s*$esc\:([a-z][-0-9a-z_]*)#) {
+ die "unknown directive $1";
}
for (;;) {
unless (s{^(.*?)$esc}{}) { o $_; last; }
}
for (;;) {
unless (s{^(.*?)$esc}{}) { o $_; last; }
@@
-162,6
+168,7
@@
sub process_input_mk ($$$$$$$$$) {
$targets->{$t} //= [ ];
}
elsif (m{^(?=$caps_re)}) { o $var_prefix }
$targets->{$t} //= [ ];
}
elsif (m{^(?=$caps_re)}) { o $var_prefix }
+ elsif (s{^\$([A-Za-z]\w+)}{}) { o "\$(${var_prefix}$1)" }
elsif (s{^([~^]?)(?=$lc_re)}{}) { o $pfxmap{$1} }
elsif (s{^_}{}) { o $var_prefix }
elsif (s{^=}{}) { o $var_prefix_name }
elsif (s{^([~^]?)(?=$lc_re)}{}) { o $pfxmap{$1} }
elsif (s{^_}{}) { o $var_prefix }
elsif (s{^=}{}) { o $var_prefix_name }
@@
-193,11
+200,8
@@
sub process_input_mk ($$$$$$$$$) {
$var_prefix, $var_prefix_name, $targets,
$subf, $esclitr, $1);
o "\n";
$var_prefix, $var_prefix_name, $targets,
$subf, $esclitr, $1);
o "\n";
- } elsif (m#^changequote\s+(\S+)\s+$#) {
- $$esclitr = $1;
- $set_esc->();
} else {
} else {
- die "
unknown
directive $_ ";
+ die "
internal error buffering
directive $_ ";
}
}
}
}
}
}