ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra/res2pm
(Generate patch)

Comparing deliantra/Deliantra/res2pm (file contents):
Revision 1.3 by root, Wed Feb 22 21:57:29 2006 UTC vs.
Revision 1.8 by root, Sun Mar 12 23:21:11 2006 UTC

21 res/typenumbers.xml 21 res/typenumbers.xml
22 22
23See F<res/README> for more info. 23See F<res/README> for more info.
24 24
25=cut 25=cut
26
27package Crossfire::Data;
26 28
27EOF 29EOF
28 30
29use Data::Dumper; 31use Data::Dumper;
30use XML::Parser::Grove; 32use XML::Parser::Grove;
97 99
98 if ($arch->{type} =~ s/^(bitmask)_(.*)/$1/) { 100 if ($arch->{type} =~ s/^(bitmask)_(.*)/$1/) {
99 $arch->{value} = $bitmask{$2} ||= {}; 101 $arch->{value} = $bitmask{$2} ||= {};
100 } elsif ($arch->{type} =~ s/^(list)_(.*)/$1/) { 102 } elsif ($arch->{type} =~ s/^(list)_(.*)/$1/) {
101 $arch->{value} = $list{$2} ||= {}; 103 $arch->{value} = $list{$2} ||= {};
104 } elsif ($arch->{type} eq "fixed") {
105 $arch->{value} = $e->attr ("value");
102 } elsif ($arch->{type} =~ s/^bool_special$/bool/) { 106 } elsif ($arch->{type} =~ s/^bool_special$/bool/) {
103 $arch->{value} = [$e->attr ("false"), $e->attr ("true")]; 107 $arch->{value} = [$e->attr ("false"), $e->attr ("true")];
104 } 108 }
105 109
106 $sect->{$e->attr ("arch") || $e->attr("arch_begin")} = $arch; 110 push @$sect, [$e->attr ("arch") || $e->attr("arch_begin"), $arch];
107} 111}
108 112
109sub parse_type { 113sub parse_type {
110 my ($e, $type) = @_; 114 my ($e, $type) = @_;
115
116 my %main;
111 117
112 for my $e (grep ref, @{$e->contents}) { 118 for my $e (grep ref, @{$e->contents}) {
113 if ($e->name eq "required") { 119 if ($e->name eq "required") {
114 for my $i (grep ref, @{$e->contents}) { 120 for my $i (grep ref, @{$e->contents}) {
115 $type->{required}{$i->attr ("arch")} = $i->attr ("value"); 121 $type->{required}{$i->attr ("arch")} = $i->attr ("value");
116 } 122 }
117 } elsif ($e->name eq "attribute") { 123 } elsif ($e->name eq "attribute") {
118 parse_attr $e, $type->{attr}{Main} ||= {}; 124 parse_attr $e, $type->{attr} ||= [];
119 } elsif ($e->name eq "ignore") { 125 } elsif ($e->name eq "ignore") {
120 for my $i (grep ref, @{$e->contents}) { 126 for my $i (grep ref, @{$e->contents}) {
121 if ($i->name eq "ignore_list") { 127 if ($i->name eq "ignore_list") {
122 push @{$type->{ignore}}, $ignore_list{$i->attr ("name")} ||= []; 128 push @{$type->{ignore}}, $ignore_list{$i->attr ("name")} ||= [];
123 } elsif ($i->name eq "attribute") { 129 } elsif ($i->name eq "attribute") {
129 } elsif ($e->name eq "use") { 135 } elsif ($e->name eq "use") {
130 $type->{use} = string $e; 136 $type->{use} = string $e;
131 } elsif ($e->name eq "description") { 137 } elsif ($e->name eq "description") {
132 $type->{desc} = string $e; 138 $type->{desc} = string $e;
133 } elsif ($e->name eq "section") { 139 } elsif ($e->name eq "section") {
140 my @attr;
134 for my $i (grep ref, @{$e->contents}) { 141 for my $i (grep ref, @{$e->contents}) {
135 parse_attr $i, $type->{attr}{$e->attr ("name")} ||= {}; 142 parse_attr $i, \@attr;
136 } 143 }
137# $type->{desc} = string $e; 144 push @{ $type->{section} }, [$e->attr ("name") => \@attr];
138 } else { 145 } else {
139 warn "unknown types subelement ", $e->name; 146 warn "unknown types subelement ", $e->name;
140 } 147 }
141 } 148 }
142 149
161 } 168 }
162 } elsif ($e->name eq "default_type") { 169 } elsif ($e->name eq "default_type") {
163 parse_type $e, \%default_attr; 170 parse_type $e, \%default_attr;
164 } elsif ($e->name eq "type") { 171 } elsif ($e->name eq "type") {
165 my $type = $type{$e->attr ("name")} ||= {}; 172 my $type = $type{$e->attr ("name")} ||= {};
173
174 $type->{name} = $e->attr ("name");
175
166 parse_type $e, $type; 176 parse_type $e, $type;
167 #unshift @{$type->{import}}, \%default_attr;
168 177
169 if ($e->attr ("number") > 0) { 178 if ($e->attr ("number") > 0) {
170 $attr{$e->attr ("number")} = $type; 179 $attr{$e->attr ("number")} = $type;
171 } elsif ($e->attr ("name") eq "Misc") { 180 } elsif ($e->attr ("name") eq "Misc") {
172 delete $type->{required}; 181 delete $type->{required};

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines