WindowsXP-SP1/tools/sp/infparse.pm

49 lines
1.0 KiB
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;