49 lines
1,019 B
Perl
49 lines
1,019 B
Perl
package InfParse;
|
|
use Logmsg;
|
|
|
|
require Exporter;
|
|
@ISA = qw(Exporter);
|
|
@EXPORT = qw(parseSect strSub parseStr);
|
|
|
|
local %strings;
|
|
|
|
# Parse an inf section.
|
|
sub parseSect {
|
|
# Go through each line in a section and call the handler.
|
|
my $handler = $_[0];
|
|
while ( <::INF> ) {
|
|
$_ =~ /^\s*([^\";]*(\"[^\"]*\"|[^\";\s]))*\s*(;.*)?$/; # "
|
|
$_ = $1;
|
|
next if $_ eq "";
|
|
return $_ if /^\[/;
|
|
&$handler($_);
|
|
}
|
|
}
|
|
|
|
# Substitute in stuff from the strings section.
|
|
sub strSub {
|
|
# Check for strings to substitute into a value.
|
|
my ($val) = @_;
|
|
while ( $val =~ /%([^%]*)%/ ) {
|
|
my $key = lc $1;
|
|
my $temp = quotemeta $1;
|
|
if ( exists $strings{$key} ) {
|
|
$val =~ s/%$temp%/$strings{$key}/g;
|
|
} else {
|
|
wrnmsg "Unknown string $key.\n";
|
|
last;
|
|
}
|
|
}
|
|
return $val;
|
|
}
|
|
|
|
# Parse a line from the Strings section.
|
|
sub parseStr {
|
|
my ($name, $str) = split(/\s*=\s*/);
|
|
$str = $1 if $str=~/^\"([^\"]*)\"$/; # "
|
|
$strings{lc $name} = $str;
|
|
}
|
|
|
|
1;
|
|
|