Index: /trunk/PS-IPP-Metadata-Config/Changes
===================================================================
--- /trunk/PS-IPP-Metadata-Config/Changes	(revision 8887)
+++ /trunk/PS-IPP-Metadata-Config/Changes	(revision 8888)
@@ -1,3 +1,6 @@
 Revision history for Perl module PS::IPP::Metadata::Config
+
+0.03
+    - add float nan/inf support
 
 0.02 Thu Aug 24 17:08:14 HST 2006
Index: /trunk/PS-IPP-Metadata-Config/MANIFEST
===================================================================
--- /trunk/PS-IPP-Metadata-Config/MANIFEST	(revision 8887)
+++ /trunk/PS-IPP-Metadata-Config/MANIFEST	(revision 8888)
@@ -19,2 +19,3 @@
 t/05_time.t
 t/06_multi.t
+t/07_float.t
Index: /trunk/PS-IPP-Metadata-Config/config_grammar.txt
===================================================================
--- /trunk/PS-IPP-Metadata-Config/config_grammar.txt	(revision 8887)
+++ /trunk/PS-IPP-Metadata-Config/config_grammar.txt	(revision 8888)
@@ -1,5 +1,5 @@
 # Copyright (c) 2005  Joshua Hoblitt
 #
-# $Id: config_grammar.txt,v 1.1 2006-08-25 03:08:56 jhoblitt Exp $
+# $Id: config_grammar.txt,v 1.2 2006-09-23 00:26:50 jhoblitt Exp $
 
 {
@@ -289,7 +289,22 @@
     /(?:(?:[+-]?)(?:[0-9]+))/
 
+    # based on $RE{num}{real} from Regexp::Common::number
 float:
-    # based on $RE{num}{real} from Regexp::Common::number
     /(?:(?i)(?:[+-]?)(?:(?=[0-9]|[.])(?:[0-9]*)(?:(?:[.])(?:[0-9]{0,}))?)(?:(?:[Ee])(?:(?:[+-]?)(?:[0-9]+))|))/
+    | inf
+    | nan
+
+inf:
+    /[+-]?inf(?:inity)?/i
+        {
+            if ($item[1] =~ /^-/) {
+                $return = "-inf";
+            } else {
+                $return = "+inf";
+            }
+        }
+nan:
+    /[+-]?nan(?:\(\S*?\))?/i
+        { $return = "nan" }
 
 bool:
Index: /trunk/PS-IPP-Metadata-Config/t/07_floats.t
===================================================================
--- /trunk/PS-IPP-Metadata-Config/t/07_floats.t	(revision 8888)
+++ /trunk/PS-IPP-Metadata-Config/t/07_floats.t	(revision 8888)
@@ -0,0 +1,209 @@
+#!/usr/bin/perl
+
+# Copyright (C) 2005  Joshua Hoblitt
+#
+# $Id: 07_floats.t,v 1.1 2006-09-23 00:26:50 jhoblitt Exp $
+
+use strict;
+use warnings FATAL => qw( all );
+
+use lib qw( ./lib );
+
+#$::RD_TRACE = 1;
+
+use Test::More tests => 12;
+use PS::IPP::Metadata::Config;
+
+my $config_parser = PS::IPP::Metadata::Config->new;
+
+{
+my $example =<<END;
+mynan   MULTI
+mynan   F32     nan
+mynan   F32     NaN
+mynan   F32     nAn
+mynan   F32     NAN
+END
+
+    my $config = $config_parser->parse( $example );
+    ok( defined( $config ), "F32 nans parsed");
+
+    my $tree = [
+        {
+            name    => 'mynan',
+            class   => 'scalar',
+            type    => 'F32',
+            value   => 'nan',
+        },
+        {
+            name    => 'mynan',
+            class   => 'scalar',
+            type    => 'F32',
+            value   => 'nan',
+        },
+        {
+            name    => 'mynan',
+            class   => 'scalar',
+            type    => 'F32',
+            value   => 'nan',
+        },
+        {
+            name    => 'mynan',
+            class   => 'scalar',
+            type    => 'F32',
+            value   => 'nan',
+        },
+    ];
+
+    is_deeply( $config, $tree, "F32 nans structure" );
+}
+
+{
+my $example =<<END;
+mynan   MULTI
+mynan   F64     nan
+mynan   F64     NaN
+mynan   F64     nAn
+mynan   F64     NAN
+END
+
+    my $config = $config_parser->parse( $example );
+    ok( defined( $config ), "F64 nans parsed");
+
+    my $tree = [
+        {
+            name    => 'mynan',
+            class   => 'scalar',
+            type    => 'F64',
+            value   => 'nan',
+        },
+        {
+            name    => 'mynan',
+            class   => 'scalar',
+            type    => 'F64',
+            value   => 'nan',
+        },
+        {
+            name    => 'mynan',
+            class   => 'scalar',
+            type    => 'F64',
+            value   => 'nan',
+        },
+        {
+            name    => 'mynan',
+            class   => 'scalar',
+            type    => 'F64',
+            value   => 'nan',
+        },
+    ];
+
+    is_deeply( $config, $tree, "F64 nans structure" );
+}
+
+my $inftree = [
+    # inf
+    {
+        name    => 'myinf',
+        class   => 'scalar',
+        type    => 'F32',
+        value   => '+inf',
+    },
+    {
+        name    => 'myinf',
+        class   => 'scalar',
+        type    => 'F32',
+        value   => '+inf',
+    },
+    {
+        name    => 'myinf',
+        class   => 'scalar',
+        type    => 'F32',
+        value   => '-inf',
+    },
+    {
+        name    => 'myinf',
+        class   => 'scalar',
+        type    => 'F32',
+        value   => '+inf',
+    },
+    {
+        name    => 'myinf',
+        class   => 'scalar',
+        type    => 'F32',
+        value   => '+inf',
+    },
+    {
+        name    => 'myinf',
+        class   => 'scalar',
+        type    => 'F32',
+        value   => '-inf',
+    },
+];
+
+{
+my $example =<<END;
+myinf   MULTI
+myinf   F32     inf
+myinf   F32     +inf
+myinf   F32     -inf
+myinf   F32     infinity
+myinf   F32     +infinity
+myinf   F32     -infinity
+END
+
+    my $config = $config_parser->parse( $example );
+    ok( defined( $config ), "F32 infs parsed");
+
+    is_deeply( $config, $inftree, "F32 infs structure" );
+}
+
+{
+my $example =<<END;
+myinf   MULTI
+myinf   F32     InF
+myinf   F32     +InF
+myinf   F32     -InF
+myinf   F32     InFinity
+myinf   F32     +InFinity
+myinf   F32     -InFinity
+END
+
+    my $config = $config_parser->parse( $example );
+    ok( defined( $config ), "F32 InFs parsed");
+
+    is_deeply( $config, $inftree, "F32 InFs structure" );
+}
+
+{
+my $example =<<END;
+myinf   MULTI
+myinf   F32     iNf
+myinf   F32     +iNf
+myinf   F32     -iNf
+myinf   F32     iNfinity
+myinf   F32     +iNfinity
+myinf   F32     -iNfinity
+END
+
+    my $config = $config_parser->parse( $example );
+    ok( defined( $config ), "F32 iNfs parsed");
+
+    is_deeply( $config, $inftree, "F32 iNfs structure" );
+}
+
+{
+my $example =<<END;
+myinf   MULTI
+myinf   F32     INF
+myinf   F32     +INF
+myinf   F32     -INF
+myinf   F32     INFINITY
+myinf   F32     +INFINITY
+myinf   F32     -INFINITY
+END
+
+    my $config = $config_parser->parse( $example );
+    ok( defined( $config ), "F32 INFs parsed");
+
+    is_deeply( $config, $inftree, "F32 INFs structure" );
+}
