IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 3456


Ignore:
Timestamp:
Mar 18, 2005, 2:45:37 PM (21 years ago)
Author:
jhoblitt
Message:

full 'TYPE' support
convert 'TYPE' typdefs into 'metadata's

Location:
trunk/PS-IPP-Metadata-Config
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/PS-IPP-Metadata-Config/lib/PS/IPP/Metadata/Config.pm

    r3454 r3456  
    11# Copyright (c) 2005  Joshua Hoblitt
    22#
    3 # $Id: Config.pm,v 1.6 2005-03-18 23:38:05 jhoblitt Exp $
     3# $Id: Config.pm,v 1.7 2005-03-19 00:45:37 jhoblitt Exp $
    44
    55package PS::IPP::Metadata::Config;
     
    155155
    156156__DATA__
     157
     158{
     159    use strict;
     160    use warnings FATAL => qw( all );
     161
     162    use Carp qw( croak );
     163}
    157164
    158165startrule: grammar
     
    234241        {{
    235242            class   => 'blank_line',
    236             comment => $item{comment},
    237243        }}
    238244
    239245typedef_declare:
    240     <skip:'[ \t\r]*'> 'TYPE' <commit> name name(s) "\n"
     246    <skip:'[ \t\r]*'> 'TYPE' <commit> name name(s) comment(?) "\n"
    241247        {
    242248            use Carp;
    243249
    244             my $len = scalar @{ $item{'name(s)'} };
    245 
    246250            if (defined $thisparser->{local}{typedef}{ $item{name} }) {
    247251                croak "refinition of TYPE $item{name}";   
    248252            }
    249253
    250             $thisparser->{local}{typedef}{ $item{name} } = $len;
    251 
    252             $return = {
     254            my $type = {
    253255                class   => 'typedef_declare',
    254256                name    => $item{name},
    255                 value   => $item{'name(s)'},
     257                fields  => $item{'name(s)'},
     258                length  => scalar @{ $item{'name(s)'} },
    256259            };
    257         }
    258     | <skip:'[ \t\r]*'> 'TYPE' <commit> name name(s) comment "\n"
    259         {{
    260             class   => 'typedef_declare',
    261             name    => $item{name},
    262             value   => $item{'name(s)'},
    263             comment => $item{comment},
    264         }}
     260
     261            $thisparser->{local}{typedef}{ $item{name} } = $type;
     262
     263            # don't return anything in the parse tree
     264            $return = { class => 'blank_line' };
     265        }
    265266
    266267typedef:
    267     <skip:'[ \t\r]*'> name typedef_type name(s) "\n"
     268    <skip:'[ \t\r]*'> name typedef_type name(s) comment(?) "\n"
    268269        {
     270            my $type = $thisparser->{local}{typedef}{ $item{typedef_type} };
     271
     272            unless ( scalar @{ $item{'name(s)'} } == $type->{length} ) {
     273                croak "\"$item{name} $item{typedef_type}\""
     274                    . " does not have enough fields";
     275            }
     276
     277            my @md;
     278            my $i = 0;
     279            foreach my $name ( @{ $type->{fields} } ) {
     280                push @md, {
     281                    name    => $name,
     282                    class   => 'scalar',
     283                    type    => 'STR',
     284                    value   => $item{'name(s)'}[$i],
     285                };
     286
     287                $i++;
     288            }
     289
    269290            $return = {
    270                 class   => 'typedef',
     291                class   => 'metadata',
    271292                name    => $item{name},
    272                 type    => $item{typedef_type},
    273                 value   => $item{'name(s)'},
     293                value   => \@md,
    274294            };
    275295        }
  • trunk/PS-IPP-Metadata-Config/t/09_sdrs_type_example.t

    r3421 r3456  
    33# Copyright (C) 2005  Joshua Hoblitt
    44#
    5 # $Id: 09_sdrs_type_example.t,v 1.1 2005-03-15 04:41:44 jhoblitt Exp $
     5# $Id: 09_sdrs_type_example.t,v 1.2 2005-03-19 00:45:37 jhoblitt Exp $
    66
    77use strict;
     
    1212#$::RD_TRACE = 1;
    1313
    14 use Test::More tests => 3;
     14use Test::More tests => 5;
    1515use PS::IPP::Metadata::Config;
    1616
     
    2222
    2323{
    24     my $pt = $config_parser->parse( $example[0] );
     24    my $pt = $config_parser->parse( shift @example );
     25    ok( defined( $pt ), "valid parase tree");
     26}
     27
     28{
     29    my $pt = $config_parser->parse( shift @example );
    2530    ok( defined( $pt ), "valid parase tree");
    2631}
    2732
    2833eval {
    29     my $pt = $config_parser->parse( $example[1] );
     34    my $pt = $config_parser->parse( shift @example );
     35};
     36like( $@, qr/does not have enough fields/, "missing fields");
     37
     38eval {
     39    my $pt = $config_parser->parse( shift @example );
    3040};
    3141like( $@, qr/refinition of TYPE/, "TYPE redefinition");
    3242
    3343eval {
    34     my $pt = $config_parser->parse( $example[2] );
     44    my $pt = $config_parser->parse( shift @example );
    3545};
    3646like( $@, qr/missing TYPE defintion/, "missing TYPE defnition");
     
    3949TYPE      CELL   EXTNAME   BIASSEC  CHIP
    4050CELL.00   CELL   CCD00     BSEC-00  CHIP.00
     51CELL.01   CELL   CCD01     BSEC-01  CHIP.00
     52%
     53TYPE      CELL   EXTNAME   BIASSEC  CHIP    # comment
     54CELL.00   CELL   CCD00     BSEC-00  CHIP.00 # foo
     55CELL.01   CELL   CCD01     BSEC-01  CHIP.00 #
     56%
     57TYPE      CELL   EXTNAME   BIASSEC  CHIP
     58CELL.00   CELL   CCD00     BSEC-00
    4159CELL.01   CELL   CCD01     BSEC-01  CHIP.00
    4260%
Note: See TracChangeset for help on using the changeset viewer.