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;
|
||
|
|