… | |
… | |
21 | res/typenumbers.xml |
21 | res/typenumbers.xml |
22 | |
22 | |
23 | See F<res/README> for more info. |
23 | See F<res/README> for more info. |
24 | |
24 | |
25 | =cut |
25 | =cut |
|
|
26 | |
|
|
27 | package Crossfire::Data; |
26 | |
28 | |
27 | EOF |
29 | EOF |
28 | |
30 | |
29 | use Data::Dumper; |
31 | use Data::Dumper; |
30 | use XML::Parser::Grove; |
32 | use XML::Parser::Grove; |
… | |
… | |
107 | } |
109 | } |
108 | |
110 | |
109 | sub parse_type { |
111 | sub parse_type { |
110 | my ($e, $type) = @_; |
112 | my ($e, $type) = @_; |
111 | |
113 | |
|
|
114 | my %main; |
|
|
115 | |
112 | for my $e (grep ref, @{$e->contents}) { |
116 | for my $e (grep ref, @{$e->contents}) { |
113 | if ($e->name eq "required") { |
117 | if ($e->name eq "required") { |
114 | for my $i (grep ref, @{$e->contents}) { |
118 | for my $i (grep ref, @{$e->contents}) { |
115 | $type->{required}{$i->attr ("arch")} = $i->attr ("value"); |
119 | $type->{required}{$i->attr ("arch")} = $i->attr ("value"); |
116 | } |
120 | } |
117 | } elsif ($e->name eq "attribute") { |
121 | } elsif ($e->name eq "attribute") { |
118 | parse_attr $e, $type->{attr}{Main} ||= {}; |
122 | parse_attr $e, $type->{attr} ||= {}; |
119 | } elsif ($e->name eq "ignore") { |
123 | } elsif ($e->name eq "ignore") { |
120 | for my $i (grep ref, @{$e->contents}) { |
124 | for my $i (grep ref, @{$e->contents}) { |
121 | if ($i->name eq "ignore_list") { |
125 | if ($i->name eq "ignore_list") { |
122 | push @{$type->{ignore}}, $ignore_list{$i->attr ("name")} ||= []; |
126 | push @{$type->{ignore}}, $ignore_list{$i->attr ("name")} ||= []; |
123 | } elsif ($i->name eq "attribute") { |
127 | } elsif ($i->name eq "attribute") { |
… | |
… | |
129 | } elsif ($e->name eq "use") { |
133 | } elsif ($e->name eq "use") { |
130 | $type->{use} = string $e; |
134 | $type->{use} = string $e; |
131 | } elsif ($e->name eq "description") { |
135 | } elsif ($e->name eq "description") { |
132 | $type->{desc} = string $e; |
136 | $type->{desc} = string $e; |
133 | } elsif ($e->name eq "section") { |
137 | } elsif ($e->name eq "section") { |
|
|
138 | my %attr; |
134 | for my $i (grep ref, @{$e->contents}) { |
139 | for my $i (grep ref, @{$e->contents}) { |
135 | parse_attr $i, $type->{attr}{$e->attr ("name")} ||= {}; |
140 | parse_attr $i, \%attr; |
136 | } |
141 | } |
|
|
142 | push @{ $type->{section} }, [$e->attr ("name") => \%attr]; |
137 | } else { |
143 | } else { |
138 | warn "unknown types subelement ", $e->name; |
144 | warn "unknown types subelement ", $e->name; |
139 | } |
145 | } |
140 | } |
146 | } |
141 | |
147 | |