ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra/bin/cfmap-fixdialogue
Revision: 1.2
Committed: Wed Aug 9 13:18:55 2006 UTC (17 years, 9 months ago) by elmex
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +0 -0 lines
State: FILE REMOVED
Log Message:
added IPO update script (merged with fixdialogue).

File Contents

# User Rev Content
1 root 1.1 #!/opt/bin/perl
2    
3     # this script checks, fixes and simplifies @match expressions in a map
4    
5     use Crossfire::Map;
6    
7     sub fix($) {
8     my ($msg) = @_;
9    
10     local $_ = $msg;
11    
12     # fx pretty common error of having "* First line of response"
13     my $response = s/^\* (.*)/*/ ? "\n$1" : "";
14    
15     warn "$path ($_) unexpected characters in match \n" if !/^[a-zA-Z\[\]\|\*\!\' 0-9\-\?]+$/;
16    
17     s/\[(.)(.)\]/(lc $1) eq (lc $2) ? lc $1 : "[$1$2]"/ge;
18    
19     my %alt;
20    
21     for my $kw (split /\|/) {
22     $kw =~ s/^\s+//;
23     $kw =~ s/\s+$//;
24    
25     $alt{lc $kw} = $kw;
26     }
27    
28     $_ = join "|", sort keys %alt;
29    
30     $_ .= $response;
31    
32     warn "$path <$msg><$_>\n" if $_ ne $msg;
33     warn "$path ($_) unexpected characters in match\n" if /[\[\]]/;
34    
35     $_
36     }
37    
38     for $path (@ARGV) {
39     eval {
40     open my $fh, "<:raw:perlio:utf8", $path
41     or die "$path: $!\n";
42    
43     <$fh> =~ /^arch map$/
44     or die "$path: not a crossfire map file\n";
45    
46     my $map = new_from_file Crossfire::Map $path
47     or die "$path: file load error\n";
48    
49     my $dirty;
50    
51     for my $a (map @$_, grep $_, map @$_, grep $_, @{ $map->{map} }) {
52     next unless $a->{msg} =~ /^\@match /;
53    
54     my $old = $a->{msg};
55    
56     $a->{msg} =~ s/^(\@match\s+)(.*)$/$1 . fix $2/gme;
57    
58     $dirty ||= $old ne $a->{msg};
59     }
60    
61     $map->write_file ($path)
62     if $dirty;
63    
64     1
65     } or $@ =~ /not a crossfire map/ or warn $@;
66     }
67