Index: /trunk/PS-IPP-Metadata-Config/lib/PS/IPP/Metadata/Config.pm
===================================================================
--- /trunk/PS-IPP-Metadata-Config/lib/PS/IPP/Metadata/Config.pm	(revision 3455)
+++ /trunk/PS-IPP-Metadata-Config/lib/PS/IPP/Metadata/Config.pm	(revision 3456)
@@ -1,5 +1,5 @@
 # Copyright (c) 2005  Joshua Hoblitt
 #
-# $Id: Config.pm,v 1.6 2005-03-18 23:38:05 jhoblitt Exp $
+# $Id: Config.pm,v 1.7 2005-03-19 00:45:37 jhoblitt Exp $
 
 package PS::IPP::Metadata::Config;
@@ -155,4 +155,11 @@
 
 __DATA__
+
+{
+    use strict;
+    use warnings FATAL => qw( all );
+
+    use Carp qw( croak );
+}
 
 startrule: grammar
@@ -234,42 +241,55 @@
         {{
             class   => 'blank_line',
-            comment => $item{comment},
         }}
 
 typedef_declare:
-    <skip:'[ \t\r]*'> 'TYPE' <commit> name name(s) "\n"
+    <skip:'[ \t\r]*'> 'TYPE' <commit> name name(s) comment(?) "\n"
         {
             use Carp;
 
-            my $len = scalar @{ $item{'name(s)'} };
-
             if (defined $thisparser->{local}{typedef}{ $item{name} }) {
                 croak "refinition of TYPE $item{name}";    
             }
 
-            $thisparser->{local}{typedef}{ $item{name} } = $len;
-
-            $return = {
+            my $type = {
                 class   => 'typedef_declare',
                 name    => $item{name},
-                value   => $item{'name(s)'},
+                fields  => $item{'name(s)'},
+                length  => scalar @{ $item{'name(s)'} },
             };
-        }
-    | <skip:'[ \t\r]*'> 'TYPE' <commit> name name(s) comment "\n"
-        {{
-            class   => 'typedef_declare',
-            name    => $item{name},
-            value   => $item{'name(s)'},
-            comment => $item{comment},
-        }}
+
+            $thisparser->{local}{typedef}{ $item{name} } = $type;
+
+            # don't return anything in the parse tree
+            $return = { class => 'blank_line' };
+        }
 
 typedef:
-    <skip:'[ \t\r]*'> name typedef_type name(s) "\n"
+    <skip:'[ \t\r]*'> name typedef_type name(s) comment(?) "\n"
         {
+            my $type = $thisparser->{local}{typedef}{ $item{typedef_type} };
+
+            unless ( scalar @{ $item{'name(s)'} } == $type->{length} ) {
+                croak "\"$item{name} $item{typedef_type}\""
+                    . " does not have enough fields";
+            }
+
+            my @md;
+            my $i = 0;
+            foreach my $name ( @{ $type->{fields} } ) {
+                push @md, {
+                    name    => $name,
+                    class   => 'scalar',
+                    type    => 'STR',
+                    value   => $item{'name(s)'}[$i],
+                };
+
+                $i++;
+            }
+
             $return = {
-                class   => 'typedef',
+                class   => 'metadata',
                 name    => $item{name},
-                type    => $item{typedef_type},
-                value   => $item{'name(s)'},
+                value   => \@md,
             };
         }
Index: /trunk/PS-IPP-Metadata-Config/t/09_sdrs_type_example.t
===================================================================
--- /trunk/PS-IPP-Metadata-Config/t/09_sdrs_type_example.t	(revision 3455)
+++ /trunk/PS-IPP-Metadata-Config/t/09_sdrs_type_example.t	(revision 3456)
@@ -3,5 +3,5 @@
 # Copyright (C) 2005  Joshua Hoblitt
 #
-# $Id: 09_sdrs_type_example.t,v 1.1 2005-03-15 04:41:44 jhoblitt Exp $
+# $Id: 09_sdrs_type_example.t,v 1.2 2005-03-19 00:45:37 jhoblitt Exp $
 
 use strict;
@@ -12,5 +12,5 @@
 #$::RD_TRACE = 1;
 
-use Test::More tests => 3;
+use Test::More tests => 5;
 use PS::IPP::Metadata::Config;
 
@@ -22,15 +22,25 @@
 
 {
-    my $pt = $config_parser->parse( $example[0] );
+    my $pt = $config_parser->parse( shift @example );
+    ok( defined( $pt ), "valid parase tree");
+}
+
+{
+    my $pt = $config_parser->parse( shift @example );
     ok( defined( $pt ), "valid parase tree");
 }
 
 eval {
-    my $pt = $config_parser->parse( $example[1] );
+    my $pt = $config_parser->parse( shift @example );
+};
+like( $@, qr/does not have enough fields/, "missing fields");
+
+eval {
+    my $pt = $config_parser->parse( shift @example );
 };
 like( $@, qr/refinition of TYPE/, "TYPE redefinition");
 
 eval {
-    my $pt = $config_parser->parse( $example[2] );
+    my $pt = $config_parser->parse( shift @example );
 };
 like( $@, qr/missing TYPE defintion/, "missing TYPE defnition");
@@ -39,4 +49,12 @@
 TYPE      CELL   EXTNAME   BIASSEC  CHIP
 CELL.00   CELL   CCD00     BSEC-00  CHIP.00
+CELL.01   CELL   CCD01     BSEC-01  CHIP.00
+%
+TYPE      CELL   EXTNAME   BIASSEC  CHIP    # comment
+CELL.00   CELL   CCD00     BSEC-00  CHIP.00 # foo
+CELL.01   CELL   CCD01     BSEC-01  CHIP.00 #
+%
+TYPE      CELL   EXTNAME   BIASSEC  CHIP
+CELL.00   CELL   CCD00     BSEC-00
 CELL.01   CELL   CCD01     BSEC-01  CHIP.00
 %
