package HTML::Zoom::Producer::BuiltIn; use strictures 1; use base qw(HTML::Zoom::SubObject); sub html_from_stream { my ($self, $stream) = @_; return join '', map $self->event_to_html($_), $self->_zconfig->stream_utils->stream_to_array($stream) } sub html_from_events { my ($self, $events) = @_; join '', map $self->event_to_html($_), @$events; } sub event_to_html { my ($self, $evt) = @_; # big expression if (defined $evt->{raw}) { $evt->{raw} } elsif ($evt->{type} eq 'OPEN') { '<' .$evt->{name} .(defined $evt->{raw_attrs} ? $evt->{raw_attrs} : do { my @names = @{$evt->{attr_names}}; @names ? join(' ', '', map qq{${_}="${\$evt->{attrs}{$_}}"}, @names) : '' } ) .($evt->{is_in_place_close} ? ' /' : '') .'>' } elsif ($evt->{type} eq 'CLOSE') { '{name}.'>' } elsif ($evt->{type} eq 'EMPTY') { '' } else { die "No raw value in event and no special handling for type ".$evt->{type}; } } 1;