Changeset 3395
- Timestamp:
- Mar 9, 2005, 1:44:18 PM (21 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/PS-IPP-Metadata-Config/lib/PS/IPP/Metadata/Config.pm
r3358 r3395 1 1 # Copyright (c) 2005 Joshua Hoblitt 2 2 # 3 # $Id: Config.pm,v 1. 2 2005-03-01 23:45:21jhoblitt Exp $3 # $Id: Config.pm,v 1.3 2005-03-09 23:44:18 jhoblitt Exp $ 4 4 5 5 package PS::IPP::Metadata::Config; … … 18 18 #$::RD_TRACE = 1; 19 19 #$::RD_HINT = 1; 20 #use Data::Dumper; 20 21 21 22 my $grammar = do{ local $/; <DATA> }; … … 40 41 my $tree = $self->{_parser}->startrule( $metadata ); 41 42 43 return undef unless defined $tree; 44 45 #print Dumper($tree); 46 42 47 # remove comment only lines 43 48 $self->_strip_comments( $tree ) or return undef; … … 61 66 my $elem = $tree->[$i]; 62 67 63 if ( $elem->{class} eq "comment_line" ) { 68 # recurse through nested metadata 69 if ( $elem->{class} eq "metadata" ) { 70 $self->_strip_comments( $elem->{value} ); 71 } 72 73 # stop if the prevous pass removed the last element and called redo 74 last unless defined $elem; 75 76 if ( $elem->{class} =~ /comment_line|blank_line/ ) { 64 77 # delete element from array 65 78 splice @$tree, $i, 1; … … 85 98 for (my $i = 0; $i < @{$tree}; $i++) { 86 99 my $elem = $tree->[$i]; 100 101 # recurse through nested metadata 102 if ( $elem->{class} eq "metadata" ) { 103 $self->_merge_multi_symbols( $elem->{value} ); 104 } 105 106 # stop if the prevous pass removed the last element and called redo 107 last unless defined $elem; 87 108 88 109 if ( $elem->{class} eq "multi_symbol" ) { … … 141 162 my $elem = $tree->[$i]; 142 163 164 # recurse through nested metadata 165 if ( $elem->{class} eq "metadata" ) { 166 $self->_merge_duplicates( $elem->{value} ); 167 } 168 143 169 if ( exists $names{ $elem->{name} } ) { 144 170 carp "duplicate element name, ", $elem->{name}, "\n"; … … 164 190 __DATA__ 165 191 166 startrule: 167 statement(s) /\z/ 192 startrule: grammar 193 194 grammar: 195 statement(s) 168 196 { $item[1 .. -1] } 169 197 … … 173 201 | multi_symbol 174 202 | comment_line 175 176 comment_line: 177 comment 178 {{ 179 class => 'comment_line', 180 comment => $item{comment} 181 }} 182 183 comment: 184 '#' end_of_line 185 { $item{end_of_line} } 203 | metadata 204 | blank_line 205 # | { 206 # use Carp qw( croak ); 207 # $text =~ /([^\n]*)/; 208 # croak "Invalid statement at line $thisline near \"$1\""; 209 # } 186 210 187 211 scalar: 188 name type value comment212 <skip:'[ \t\r]*'> name type value comment "\n" 189 213 {{ 190 214 class => 'scalar', … … 194 218 comment => $item{comment} 195 219 }} 196 | name type value220 | <skip:'[ \t\r]*'> name type value "\n" 197 221 {{ 198 222 class => 'scalar', … … 203 227 204 228 vector: 205 vname vtype vvalue comment 206 {{ 229 <skip:'[ \t\r]*'> vname vtype vvalue comment "\n" 230 {{ 231 207 232 class => 'vector', 208 233 name => $item{vname}, … … 211 236 comment => $item{comment} 212 237 }} 213 | vname vtype vvalue238 | <skip:'[ \t\r]*'> vname vtype vvalue "\n" 214 239 {{ 215 240 class => 'vector', … … 220 245 221 246 multi_symbol: 222 name '*' end_of_line247 <skip:'[ \t\r]*'> name '*' to_end_of_line "\n" 223 248 {{ 224 249 class => 'multi_symbol', 225 250 name => $item{name}, 226 comment => $item{ end_of_line},251 comment => $item{to_end_of_line}, 227 252 }} 253 254 comment_line: 255 <skip:'[ \t\r]*'> comment "\n" 256 {{ 257 class => 'comment_line', 258 comment => $item{comment}, 259 }} 260 261 metadata: 262 metadata_name grammar metadata_end 263 {{ 264 class => 'metadata', 265 name => $item{metadata_name}, 266 value => $item{grammar}, 267 }} 268 269 blank_line: 270 <skip:'[ \t\r]*'> "\n" 271 {{ 272 class => 'blank_line', 273 comment => $item{comment}, 274 }} 275 276 metadata_name: 277 <skip:'[ \t\r]*'> name /METADATA/i "\n" 278 { $item{name} } 279 280 metadata_end: 281 <skip:'[ \t\r]*'> /END/i "\n" 282 283 comment: 284 '#' to_end_of_line 285 { $item{to_end_of_line} } 228 286 229 287 name: … … 256 314 257 315 vvalue: 258 vvalue_(s)316 _vvalue(s) 259 317 { [ map { @$_ } @{$item[1]} ] } 260 318 261 319 # backtracking optimization 262 vvalue_:320 _vvalue: 263 321 primitive vector_sep(?) 264 322 { [ $item[1] ] } … … 285 343 /\S[^#\n]*/ 286 344 287 end_of_line:345 to_end_of_line: 288 346 /[^\n]*/
Note:
See TracChangeset
for help on using the changeset viewer.
