Skip Menu |
 
rt.cpan.org will be shut down on March 1st, 2021.

This queue is for tickets about the Excel-Template CPAN distribution.

Report information
The Basics
Id: 77647
Status: new
Priority: 0/
Queue: Excel-Template

People
Owner: Nobody in particular
Requestors: eflitman [...] gmail.com
Cc:
AdminCc:

Bug Information
Severity: Wishlist
Broken in:
  • 0.31
  • 0.31_1
  • 0.32
  • 0.33
  • 0.34
Fixed in: (no value)



Subject: Non-Unicode encoding support (patches included)
Download (untitled) / with headers
text/plain 1.6k
Proposal for non-Unicode encoding support (included patches for v.0.31..0.34). If we need to use non-Unicode/non-Latin encodings, we have to support it in 2 ways: 1) Template file in non-Unicode encoding - this is easily achieved by proper heading in XML file, e.g.: <?xml version='1.0' encoding='windows-1251'?> This requires no code changes, it is handled by XML parser transparently. 2) Support for variable substitution if variables contain strings in non-Unicode encodings. To solve this task the patches are proposed: Var.pm.patch - to support variable substitution <VAR NAME='param'/> if it contains text in specific encoding Context.pm - to similarly handle implicit substitution like <WORKSHEET NAME='$VaraibleName'/> To use new functionality, we need to specify attribute VAR_ENC='<encoding-name>' somewhere within the current context (from this variable up to entire worksheet). I personally work with Cyrillic windows-1251 encoding both in template files and variables, so my typical template starts with: <?xml version='1.0' encoding='windows-1251'?> <workbook> <worksheet name='SomeExcelTable' var_enc='windows-1251'> ...... The attribute name is not too pretty but reminds of what is actually encoded. The patch for Var.pm is tested and works for me. The patch for Context.pm probably needs some testing (I'm not sure I've tested it). Decoding itself is performed by Encode, so I suppose Perl versions 5.6+ and probably earlier should support it. The 'use Encode' line should probably be placed somewhere else and made dependent of Perl version (the patches are actually just a quick hack to minimize patching). Would be great to include this support into next release.
Subject: Var.pm.patch
Download Var.pm.patch
text/x-diff 880b
12c12,22 < sub resolve { ($_[1])->param($_[1]->resolve($_[0], 'NAME')) } --- > sub resolve { # - support for VAR value encoding > my $self = shift ; # > my ($context) = @_ ; # > my $val = $context->param($context->resolve($self, 'NAME')); # > my $enc = $context->get($self, "VAR_ENC") ; # > if ($enc) { # > require Encode ; # > $val = Encode::decode( $enc, $val ) ; # > } # > return $val ; # > } #
Subject: Context.pm.patch
Download Context.pm.patch
text/x-diff 766b
100,101c100,107 < $obj_val = $self->param($1) < if $obj_val =~ /^\$(\S+)$/o; --- > if ($obj_val =~ /^\$(\S+)$/o) { # - to support variable substitution > $obj_val = $self->param($1) ; # - in constructions like this: > my $enc = $self->get($obj, "VAR_ENC") ; # <var name="$SomeParam"/> > if ($enc) { # - (in case the variable contains text in non-Unicode encoding) > require Encode ; # > $obj_val = Encode::decode( $enc, $obj_val ) ; # > } # > } #


This service is sponsored and maintained by Best Practical Solutions and runs on Perl.org infrastructure.

Please report any issues with rt.cpan.org to rt-cpan-admin@bestpractical.com.