forked from oreillymedia/svg-essentials-examples
-
Notifications
You must be signed in to change notification settings - Fork 0
/
fill_template.pl
75 lines (67 loc) · 1.03 KB
/
fill_template.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/usr/bin/perl
use strict;
my %vars;
my $varname;
my $buf;
my $data;
my $temp;
while ($data = <STDIN>)
{
chomp $data;
if (($temp) = $data =~ m/^(\w+)::/)
{
closebuf();
$buf = $data;
$buf =~ s/^\w+::\s*//;
$varname = $temp;
}
elsif ($data =~ m/^!fill/)
{
closebuf();
fill_template();
}
elsif ($data =~ m/^\s*#/)
{
# do nothing
}
else
{
$buf .= "\n" . $data;
}
}
sub closebuf
{
if ($buf && $varname)
{
$vars{$varname} = encode($buf);
$varname = "";
}
}
sub fill_template
{
my $data;
my $fill_var;
open TEMPLATEFILE, $vars{'template'};
open OUTFILE, '>', $vars{'output'};
while ($data = <TEMPLATEFILE>)
{
while (($fill_var) = $data =~ m/\$(\w+)/)
{
$data =~ s/\$$fill_var/$vars{$fill_var}/;
}
print OUTFILE $data;
}
close OUTFILE;
close TEMPLATEFILE;
}
sub encode
{
my $buf = shift;
$buf =~ s/^\s+//;
$buf =~ s/&/\&/g;
$buf =~ s/</\</g;
$buf =~ s/>/\>/g;
$buf =~ s/\{\{/</g;
$buf =~ s/\}\}/>/g;
return $buf;
}