# # # package MY; sub postamble { return <<'ENDE'; patch_blib: pm_to_blib test "$(PERLRUN_VERSION_GE_58)" && ( cd blib; $(PATCH) -V never -Elp1 <../patch_file.diff ) @$(TOUCH) $@ ENDE } sub tools_other { my $t = shift->SUPER::tools_other(@_); $t .= "PATCH = patch\n"; $t .= "PERLRUN_VERSION_GE_58 = " . ( $] >= 5.008 ) . "\n"; $t; } sub top_targets { my $t = shift->SUPER::top_targets(@_); if ( $] >= 5.008 ) { $t =~ s!pure_all :: config pm_to_blib!pure_all :: config patch_blib!; } $t; } 1; # # write the diff. so it can be easy removed from cvs one day. # package main; open FH, ">patch_file.diff" || die $!; print FH <<'__THIS_IS_THE_END__'; diff -Nur a/lib/Apache/PageKit/Content.pm b/lib/Apache/PageKit/Content.pm --- a/lib/Apache/PageKit/Content.pm 2005-01-01 20:42:57.099137592 +0100 +++ b/lib/Apache/PageKit/Content.pm 2005-01-01 19:33:16.000000000 +0100 @@ -103,8 +103,7 @@ # this pattern is not very accurate, but only as quick check if a run of XPathTemplate is needed my $content_pattern = ( $content->{relaxed_parser} eq 'yes' ) ? '<(?:!--)?\s*CONTENT_(VAR|LOOP|IF|UNLESS)\s+' : 'new( default_lang => $content->{default_lang}, @@ -126,7 +125,7 @@ } else { $lang_tmpl->{$content->{default_lang}} = $template_ref; } - return wantarray ? ( $lang_tmpl, $skip_xpath_content ) : $lang_tmpl; + return $lang_tmpl; } sub _rel2abs { diff -Nur a/lib/Apache/PageKit/Edit.pm b/lib/Apache/PageKit/Edit.pm --- a/lib/Apache/PageKit/Edit.pm 2005-01-01 20:42:57.117134856 +0100 +++ b/lib/Apache/PageKit/Edit.pm 2005-01-01 19:33:16.000000000 +0100 @@ -44,14 +44,15 @@ $model->output( read_only => 1 ) if ( ! -w $file ); - open FILE, "$file" or die $!; - binmode FILE; - local $/ = undef; + my $default_input_charset = $model->{pkit_pk}->{view}->{default_input_charset}; + open my $fh, $file or die $!; + binmode $fh, ":encoding($default_input_charset)"; + local $/; # we need to escape HTML tags to avoid # my $content = Apache::Util::escape_html( || ""); - my $content = ; - close FILE; + my $content = <$fh>; + close $fh; # we need to escape all & chars so that for example   is #   and not ' ' @@ -76,10 +77,11 @@ my $pkit_done = $model->input('pkit_done'); my $content = $model->input('content'); - open FILE, ">$file" or die $!; - binmode FILE; - print FILE $content; - close FILE; + my $default_input_charset = $model->{pkit_pk}->{view}->{default_input_charset}; + open my $fh, ">$file" or die $!; + binmode $fh, ":encoding($default_input_charset)"; + print $fh $content; + close $fh; if($pkit_done){ $model->pkit_redirect($pkit_done); diff -Nur a/lib/Apache/PageKit/Model.pm b/lib/Apache/PageKit/Model.pm --- a/lib/Apache/PageKit/Model.pm 2005-01-01 20:42:57.138131664 +0100 +++ b/lib/Apache/PageKit/Model.pm 2005-01-01 19:33:16.000000000 +0100 @@ -204,15 +204,8 @@ # translate from default_input_charset to default_output_charset if needed my $view = $model->{pkit_pk}->{view}; my $input_charset = $view->{default_input_charset}; - my $default_output_charset = $view->{default_output_charset}; - if ($input_charset ne $default_output_charset) { - my $converter = eval { Text::Iconv->new($input_charset, $default_output_charset) }; - if ($@) { - die "Charset $input_charset or $default_output_charset not supported by Text::Iconv"; - } - $message = $converter->convert($message) || die "Can not convert page from $input_charset to $default_output_charset" if $message; - } - + $message = Encode::decode($input_charset, $message ); + my $default_error_str = $model->pkit_get_config_attr( GLOBAL => 'default_errorstr' ) || "#ff0000"; $message =~ s/<(!--)?\s*PKIT_ERRORSTR\s*(?(1)--)>/$default_error_str/gi; @@ -290,7 +283,12 @@ } sub fillinform { - return shift->{pkit_pk}->{fillinform_object}->param(@_); + my $model = shift; + my @params = @_; + for ( @params ) { + Encode::_utf8_off( $_ ) unless ref $_; + } + return $model->{pkit_pk}->{fillinform_object}->param(@params); } sub ignore_fillinform_fields { @@ -313,17 +311,7 @@ my ($model, %p) = @_; my $view = $model->{pkit_pk}->{view}; my $input_charset = exists $p{input_charset} ? $p{input_charset} : $view->{default_input_charset}; - my $default_output_charset = $view->{default_output_charset}; - if ($input_charset ne $default_output_charset) { - my $converter; - eval { - $converter = Text::Iconv->new($input_charset, $default_output_charset); - }; - if ($@) { - die "Charset $input_charset or $default_output_charset not supported by Text::Iconv"; - } - &_change_params($converter, $p{output} ? %{$p{output}} : %p ); - } + &_change_params($input_charset, $p{output} ? %{$p{output}} : %p ); $model->output( $p{output} || %p ); } @@ -492,41 +480,41 @@ sub _change_params { sub _change_array { - my ($converter, $aref) = @_; + my ($charset, $aref) = @_; foreach (@$aref) { my $type = ref $_; if ( $type eq 'HASH' ) { - _change_hash( $converter, $_ ); + _change_hash( $charset, $_ ); } elsif ( $type eq 'ARRAY' ) { - _change_array( $converter, $_ ); + _change_array( $charset, $_ ); } else { - $_ = $converter->convert($_) || die "Can not convert from default_input_charset to default_output_charset" if $_; + $_ = Encode::decode($charset, $_); } } } sub _change_hash { - my ($converter, $href) = @_; + my ($charset, $href) = @_; foreach ( values %$href ) { my $type = ref $_; if ( $type eq 'HASH' ) { - _change_hash( $converter, $_ ); + _change_hash( $charset, $_ ); } elsif ( $type eq 'ARRAY' ) { - _change_array( $converter, $_ ); + _change_array( $charset, $_ ); } else { - $_ = $converter->convert($_) || die "Can not convert from default_input_charset to default_output_charset" if $_; + $_ = Encode::decode($charset, $_); } } } - my $converter = shift; + my $charset = shift; for ( my $i = 1 ; $i <= $#_ ; $i += 2 ) { my $type = ref $_[$i]; if ( $type eq 'HASH' ) { - _change_hash( $converter, $_[$i] ); + _change_hash( $charset, $_[$i] ); } elsif ( $type eq 'ARRAY' ) { - _change_array( $converter, $_[$i] ); + _change_array( $charset, $_[$i] ); } else { - $_[$i] = $converter->convert($_[$i]) || die "Can not convert from default_input_charset to default_output_charset" if $_[$i]; + $_[$i] = Encode::decode($charset, $_[$i]); } } } diff -Nur a/lib/Apache/PageKit/View.pm b/lib/Apache/PageKit/View.pm --- a/lib/Apache/PageKit/View.pm 2005-01-01 20:42:57.141131208 +0100 +++ b/lib/Apache/PageKit/View.pm 2005-01-01 19:51:50.980258512 +0100 @@ -182,11 +182,13 @@ my $fif; if(@{$view->{fillinform_objects}}){ $view->{pkit_pk}->{browser_cache} = 'no'; + Encode::_utf8_off($output); $fif = HTML::FillInForm->new(); $output = $fif->fill(scalarref => \$output, fobject => $view->{fillinform_objects}, ignore_fields => $view->{ignore_fillinform_fields} ); + Encode::_utf8_on($output); } } if($view->{can_edit} eq 'yes'){ @@ -206,15 +208,15 @@ # is the cache entry valid or changed on disc? if(-f "$gzipped_filename"){ - open FH, "<$gzipped_filename" or return undef; - binmode FH; + open my $fh, "<$gzipped_filename" or return undef; + binmode $fh; # read mtime from first line chomp($gzip_mtime = ); # read rest of gzipped content - local $/ = undef; - $gzipped_content = ; - close FH; + local $/; + $gzipped_content = <$fh>; + close $fh; if($view->{reload} ne 'no'){ # is the cache entry valid or changed on disc? my $mtime = ( stat($filename) )[9]; @@ -285,11 +287,11 @@ # creates gzipped file sub _create_static_zip { my ($view, $filename, $gzipped_filename) = @_; - local $/ = undef; - open FH, "<$filename" or return undef; - binmode FH; - my $content = ; - close FH; + local $/; + open my $fh, "<$filename" or return undef; + binmode $fh; + my $content = <$fh>; + close $fh; $view->_html_clean(\$content); @@ -301,11 +303,11 @@ if ($gzipped_content) { my $mtime = (stat($filename))[9]; - if ( open GZIP, ">$gzipped_filename" ) { - binmode GZIP; - print GZIP "$mtime\n"; - print GZIP $gzipped_content; - close GZIP; + if ( open my $gzip_fh, ">$gzipped_filename" ) { + binmode $gzip_fh; + print $gzip_fh "$mtime\n"; + print $gzip_fh $gzipped_content; + close $gzip_fh; } else { warn "can not create gzip cache file $view->{cache_dir}/$gzipped_filename: $!"; } @@ -457,12 +459,13 @@ # currently only XML::LibXSLT is supported $template_ref = $view->{content}->generate_template($page_id, $component_id, $pkit_view, $view->{input_param_object}, $component_params); } else { - open TEMPLATE, "<$template_file" or die "can not read $template_file"; - binmode TEMPLATE; - local($/) = undef; - my $template =