Changeset 314
- Timestamp:
- 10/18/06 00:32:26 (2 years ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
library/perl/trunk/HTML-Widget-Kwalify/lib/HTML/Widget/Kwalify.pm
r313 r314 10 10 use base 'HTML::Widget'; 11 11 use YAML; 12 use Scalar::Util qw(blessed);13 12 use UNIVERSAL; 14 13 … … 19 18 20 19 my $self = $class->SUPER::new; 21 $self->_parse_kwalify_schema($yaml); 22 } 23 24 sub dump { 25 20 return $self->_parse_kwalify_schema($yaml); 26 21 } 27 22 … … 33 28 my $curry; 34 29 $curry = sub { 35 my ( $ stack, $args ) = @_;30 my ( $element, $args ) = @_; 36 31 my @retval; 37 32 for my $arg ( @$args ) { … … 41 36 do { 42 37 if ( grep { $arg eq $_ } ( qw/ str int any / ) ) { 43 push @$stack, $arg;44 push @elements, $ stack;38 $element->type($arg); 39 push @elements, $element; 45 40 } 46 41 } : 47 42 isa($arg, 'ARRAY') ? 48 [ $curry->($ stack, $arg) ] :43 [ $curry->($element, $arg) ] : 49 44 isa($arg, 'HASH') ? 50 45 do{ … … 52 47 for ( keys %$arg ){ 53 48 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->{$_} ]); 57 58 } 58 59 } … … 65 66 }; 66 67 67 my @stack;68 $curry->( \@stack, [ $yaml ]);68 my $element = HTML::Widget::Kwalify::Element->new; 69 $curry->( $element, [ $yaml ] ); 69 70 70 71 return $self->_make_elements( @elements ); … … 75 76 76 77 for ( @elements ) { 77 78 use YAML; 79 print Dump($_); 78 80 } 79 81 } 80 82 81 package HML::Widget::Kwalify::Element; 83 package HTML::Widget::Kwalify::Element; 84 85 use base qw( Class::Accessor::Fast ); 86 use Storable; 87 88 __PACKAGE__->mk_accessors( qw/ stack type enum / ); 82 89 83 90 sub new { 84 91 my $class = shift; 92 my $self = { 93 stack => [], 94 type => '', 95 enum => [], 96 }; 97 bless $self, $class; 98 } 99 100 sub clone { 101 my $self = shift; 102 my $clone = Storable::dclone($self); 103 $clone; 85 104 } 86 105
