Changeset 314

Show
Ignore:
Timestamp:
10/18/06 00:32:26 (2 years ago)
Author:
miya
Message:

r342@kenny: miya | 2006-10-17 19:06:13 +0900


Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • library/perl/trunk/HTML-Widget-Kwalify/lib/HTML/Widget/Kwalify.pm

    r313 r314  
    1010use base 'HTML::Widget'; 
    1111use YAML; 
    12 use Scalar::Util qw(blessed); 
    1312use UNIVERSAL; 
    1413 
     
    1918 
    2019    my $self = $class->SUPER::new; 
    21     $self->_parse_kwalify_schema($yaml); 
    22 
    23  
    24 sub dump { 
    25  
     20    return $self->_parse_kwalify_schema($yaml); 
    2621} 
    2722 
     
    3328    my $curry; 
    3429    $curry = sub { 
    35         my ( $stack, $args ) = @_; 
     30        my ( $element, $args ) = @_; 
    3631        my @retval; 
    3732        for my $arg ( @$args ) { 
     
    4136                    do { 
    4237                        if ( grep { $arg eq $_ } ( qw/ str int any / ) ) { 
    43                             push @$stack, $arg
    44                             push @elements, $stack
     38                            $element->type($arg)
     39                            push @elements, $element
    4540                        } 
    4641                    } : 
    4742                isa($arg, 'ARRAY') ? 
    48                     [ $curry->($stack, $arg) ] : 
     43                    [ $curry->($element, $arg) ] : 
    4944                isa($arg, 'HASH') ? 
    5045                    do{ 
     
    5247                        for ( keys %$arg ){ 
    5348                            if ( $_ ne 'name' and $_ ne 'desc' ) { 
    54                                 my @stack_tmp = @$stack; 
    55                                 push @stack_tmp, $_; 
    56                                 $hash->{$_} = $curry->(\@stack_tmp, [ $arg->{$_}]); 
     49                                my $clone = $element->clone; 
     50                                push @{ $clone->stack }, $_; 
     51 
     52 
     53                                if ( $_ eq 'type' and defined $arg->{enum} ) { 
     54                                    push @{ $clone->enum }, @{ $arg->{enum} }; 
     55                                } 
     56                                # TODO: type は陀倖する 
     57                                $hash->{$_} = $curry->($clone, [ $arg->{$_} ]); 
    5758                            } 
    5859                        } 
     
    6566    }; 
    6667 
    67     my @stack
    68     $curry->(\@stack, [ $yaml ]); 
     68    my $element = HTML::Widget::Kwalify::Element->new
     69    $curry->( $element, [ $yaml ] ); 
    6970 
    7071    return $self->_make_elements( @elements ); 
     
    7576 
    7677    for ( @elements ) { 
    77  
     78        use YAML; 
     79        print Dump($_); 
    7880    } 
    7981} 
    8082 
    81 package HML::Widget::Kwalify::Element; 
     83package HTML::Widget::Kwalify::Element; 
     84 
     85use base qw( Class::Accessor::Fast ); 
     86use Storable; 
     87 
     88__PACKAGE__->mk_accessors( qw/ stack type enum / ); 
    8289 
    8390sub new { 
    84  
     91    my $class = shift; 
     92    my $self = { 
     93        stack => [], 
     94        type  => '', 
     95        enum  => [], 
     96    }; 
     97    bless $self, $class; 
     98
     99 
     100sub clone { 
     101    my $self = shift; 
     102    my $clone = Storable::dclone($self); 
     103    $clone; 
    85104} 
    86105