r73120 - in /branches/upstream/libxml-encoding-perl/current: Changes Encoding.pm MANIFEST META.yml Makefile.PL README lib/ lib/XML/ lib/XML/Encoding.pm t/ t/test.t test.pl

periapt-guest at users.alioth.debian.org periapt-guest at users.alioth.debian.org
Fri Apr 22 18:46:31 UTC 2011


Author: periapt-guest
Date: Fri Apr 22 18:46:14 2011
New Revision: 73120

URL: http://svn.debian.org/wsvn/pkg-perl/?sc=1&rev=73120
Log:
[svn-upgrade] new version libxml-encoding-perl (2.08)

Added:
    branches/upstream/libxml-encoding-perl/current/lib/
    branches/upstream/libxml-encoding-perl/current/lib/XML/
    branches/upstream/libxml-encoding-perl/current/lib/XML/Encoding.pm   (with props)
    branches/upstream/libxml-encoding-perl/current/t/
    branches/upstream/libxml-encoding-perl/current/t/test.t   (with props)
Removed:
    branches/upstream/libxml-encoding-perl/current/Encoding.pm
    branches/upstream/libxml-encoding-perl/current/test.pl
Modified:
    branches/upstream/libxml-encoding-perl/current/Changes
    branches/upstream/libxml-encoding-perl/current/MANIFEST
    branches/upstream/libxml-encoding-perl/current/META.yml
    branches/upstream/libxml-encoding-perl/current/Makefile.PL
    branches/upstream/libxml-encoding-perl/current/README

Modified: branches/upstream/libxml-encoding-perl/current/Changes
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libxml-encoding-perl/current/Changes?rev=73120&op=diff
==============================================================================
--- branches/upstream/libxml-encoding-perl/current/Changes (original)
+++ branches/upstream/libxml-encoding-perl/current/Changes Fri Apr 22 18:46:14 2011
@@ -1,5 +1,9 @@
 Revision history for Perl extension XML::Encoding.
 
+2.08 20 Sep 2010
+	- Changed test script to use Test::More, renamed it to test.t and moved
+	  it into the t/ folder. (Fixes [cpan #61369].)
+	- Moved the perl module into the lib/ folder.
 2.07 29 Jan 2009
 	- Minor correction to POD from Daniel Leidert <daniel.leidert at wgdd.de>.
 2.06 20 Jan 2009

Modified: branches/upstream/libxml-encoding-perl/current/MANIFEST
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libxml-encoding-perl/current/MANIFEST?rev=73120&op=diff
==============================================================================
--- branches/upstream/libxml-encoding-perl/current/MANIFEST (original)
+++ branches/upstream/libxml-encoding-perl/current/MANIFEST Fri Apr 22 18:46:14 2011
@@ -1,5 +1,4 @@
 Changes					Change log
-Encoding.pm				XML::Encoding module
 MANIFEST				This file
 Makefile.PL				ExtUtils::MakeMaker script
 META.yml                                Module meta-data (added by MakeMaker)
@@ -7,6 +6,7 @@
 bin/compile_encoding			script to make foo.enc from foo.xml
 bin/make_encmap				script to generate foo.xml
 encoding.h				Header file describing foo.enc format
+lib/XML/Encoding.pm			XML::Encoding module
 maps/IANA-assigned-character-sets	The name describes it
 maps/Japanese_Encodings.msg		Message about Japanese encodings
 maps/README				A word about how maps were generated
@@ -48,4 +48,4 @@
 maps/x-sjis-jdk117.xml			x-sjis-jdk117 encoding map
 maps/x-sjis-jisx0221.xml		x-sjis-jisx0221 encoding map
 maps/x-sjis-unicode.xml			x-sjis-unicode encoding map
-test.pl					Test script
+t/test.t				Test script

Modified: branches/upstream/libxml-encoding-perl/current/META.yml
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libxml-encoding-perl/current/META.yml?rev=73120&op=diff
==============================================================================
--- branches/upstream/libxml-encoding-perl/current/META.yml (original)
+++ branches/upstream/libxml-encoding-perl/current/META.yml Fri Apr 22 18:46:14 2011
@@ -1,14 +1,22 @@
 --- #YAML:1.0
-name:                XML-Encoding
-version:             2.07
-abstract:            A perl module for parsing XML encoding maps.
-license:             perl
-author:              
+name:               XML-Encoding
+version:            2.08
+abstract:           A perl module for parsing XML encoding maps.
+author:
     - Clark Cooper (coopercc at netheaven.com), Steve Hay (shay at cpan.org)
-generated_by:        ExtUtils::MakeMaker version 6.42
-distribution_type:   module
-requires:     
-    XML::Parser:                   2.18
+license:            perl
+distribution_type:  module
+configure_requires:
+    ExtUtils::MakeMaker:  0
+build_requires:
+    ExtUtils::MakeMaker:  0
+requires:
+    XML::Parser:  2.18
+no_index:
+    directory:
+        - t
+        - inc
+generated_by:       ExtUtils::MakeMaker version 6.55_02
 meta-spec:
-    url:     http://module-build.sourceforge.net/META-spec-v1.3.html
-    version: 1.3
+    url:      http://module-build.sourceforge.net/META-spec-v1.4.html
+    version:  1.4

Modified: branches/upstream/libxml-encoding-perl/current/Makefile.PL
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libxml-encoding-perl/current/Makefile.PL?rev=73120&op=diff
==============================================================================
--- branches/upstream/libxml-encoding-perl/current/Makefile.PL (original)
+++ branches/upstream/libxml-encoding-perl/current/Makefile.PL Fri Apr 22 18:46:14 2011
@@ -3,7 +3,7 @@
 @extras = ();
 
 push(@extras,
-     ABSTRACT_FROM => 'Encoding.pm',
+     ABSTRACT_FROM => 'lib/XML/Encoding.pm',
      AUTHOR        => 'Clark Cooper (coopercc at netheaven.com), Steve Hay (shay at cpan.org)')
     if ($ExtUtils::MakeMaker::VERSION >= 5.4301);
      
@@ -14,7 +14,7 @@
 WriteMakefile(
               NAME	   => 'XML::Encoding',
               dist         => {COMPRESS => 'gzip', SUFFIX => '.gz'},
-	      VERSION_FROM => 'Encoding.pm',
+	      VERSION_FROM => 'lib/XML/Encoding.pm',
 	      PREREQ_PM    => {XML::Parser => 2.18},
 	      EXE_FILES    => [qw(bin/compile_encoding bin/make_encmap)],
 	      @extras

Modified: branches/upstream/libxml-encoding-perl/current/README
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libxml-encoding-perl/current/README?rev=73120&op=diff
==============================================================================
--- branches/upstream/libxml-encoding-perl/current/README (original)
+++ branches/upstream/libxml-encoding-perl/current/README Fri Apr 22 18:46:14 2011
@@ -1,7 +1,7 @@
 			XML::Encoding
 
 Version 1.x Copyright (c) 1998 Clark Cooper <coopercc at netheaven.com>
-Changes in Version 2.00 onwards Copyright (C) 2007-2009 Steve Hay
+Changes in Version 2.00 onwards Copyright (C) 2007-2010 Steve Hay
 All rights reserved.
 This program is free software; you can redistribute it and/or modify it
 under the same terms as Perl itself. 

Added: branches/upstream/libxml-encoding-perl/current/lib/XML/Encoding.pm
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libxml-encoding-perl/current/lib/XML/Encoding.pm?rev=73120&op=file
==============================================================================
--- branches/upstream/libxml-encoding-perl/current/lib/XML/Encoding.pm (added)
+++ branches/upstream/libxml-encoding-perl/current/lib/XML/Encoding.pm Fri Apr 22 18:46:14 2011
@@ -1,0 +1,274 @@
+################################################################
+# XML::Encoding
+#
+# Version 1.x Copyright 1998 Clark Cooper <coopercc at netheaven.com>
+# Changes in Version 2.00 onwards Copyright (C) 2007-2010 Steve Hay
+# All rights reserved.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+#
+# See pod documentation at the end of the file
+#
+
+package XML::Encoding;
+
+use XML::Parser;
+
+use strict;
+use vars qw(@ISA $VERSION);
+
+ at ISA = qw(XML::Parser);
+$VERSION = '2.08';
+
+sub new {
+  my $class = shift;
+  my $self = $class->SUPER::new(@_);
+
+  # Maybe require setting of PushPrefixFcn, PopPrefixFcn, and RangeSetFcn
+
+  $self->setHandlers(Start => \&start, End => \&end, Final => \&fini);
+  return $self;
+}
+
+sub start {
+  my ($exp, $el, %attr) = @_;
+
+  return if $exp->{EN_Skip};
+
+  $exp->xpcroak("Root element must be encmap")
+    if ($exp->depth == 0 and $el ne 'encmap');
+
+  my $xpmode = $exp->{EN_ExpatMode};
+
+  if ($el eq 'ch'
+      or $el eq 'range')
+    {
+      my $byte = $attr{byte};
+      $exp->xpcroak("Missing required byte attribute")
+	unless defined($byte);
+
+      $byte = cnvnumatt($exp, $byte, 'byte');
+      $exp->xpcroak("byte attribute > 255") if $byte > 255;
+
+      my $uni = $attr{uni};
+      $exp->xpcroak("Missing required uni attribute")
+	unless defined($uni);
+
+      $uni = cnvnumatt($exp, $uni, 'uni');
+      $exp->xpcroak("uni attribute > 0xFFFF") if $uni > 0xFFFF;
+
+      my $len = 1;
+
+      if ($el eq 'range') {
+	$len = $attr{len};
+	$exp->xpcroak("Missing required len attribute")
+	  unless defined($len);
+
+	$len = cnvnumatt($exp, $len, 'len');
+	$exp->xpcroak("Len plus byte > 256") if ($len + $byte) > 256;
+      }
+
+      check_range($exp, $byte, $len, $uni)
+	if ($xpmode
+	    and $byte < 128
+	    and $byte != $uni
+	    and not $exp->in_element('prefix'));
+
+      my $range_set_fcn = $exp->{RangeSetFcn};
+      if (defined $range_set_fcn) {
+	my $result = &$range_set_fcn($byte, $uni, $len);
+	$exp->xpcroak($result)
+	  if ($xpmode and $result);
+      }
+    }
+  elsif ($el eq 'prefix') {
+    $exp->xpcroak("prefix nested too deep")
+      if ($xpmode and $exp->within_element('prefix') >= 3);
+
+    my $byte = $attr{byte};
+    $exp->xpcroak("Missing required byte attribute")
+      unless defined($byte);
+
+    $byte = cnvnumatt($exp, $byte, 'byte');
+    $exp->xpcroak("byte attribute > 255") if $byte > 255;
+    my $push_pfx_fcn = $exp->{PushPrefixFcn};
+    if (defined $push_pfx_fcn) {
+      my $result = &$push_pfx_fcn($byte);
+      $exp->xpcroak($result)
+	if ($xpmode and $result);
+    }
+  }
+  elsif ($el eq 'encmap') {
+    my $name = $attr{name};
+
+    $exp->xpcroak("Missing required name attribute")
+      unless defined($name);
+
+    $exp->{EN_Name} = $name;
+
+    my $expat = $attr{expat};
+    if (defined($expat)) {
+      $exp->xpcroak("Value of expat attribute should be yes or no")
+	unless ($expat eq 'yes' or $expat eq 'no');
+      $exp->{EN_ExpatMode} = $expat eq 'yes';
+    }
+    else {
+      $exp->{EN_ExpatMode} = 0;
+    }
+    $exp->xpcroak("Not an expat mode encmap")
+      if ($exp->{ExpatRequired} and ! $exp->{EN_ExpatMode});
+  }
+  else {
+    my $depth = $exp->depth;
+    $exp->xpcroak($exp, "Root element isn't encmap")
+      unless $depth;
+
+    $exp->xpcarp("Skipping unrecognized element '$el'\n");
+    $exp->{EN_Skip} = $depth;
+  }
+
+}  # End start
+
+sub end {
+  my ($exp, $el) = @_;
+
+  if ($exp->{EN_Skip}) {
+    $exp->{EN_Skip} = 0
+      if $exp->{EN_Skip} == $exp->depth;
+  }
+  elsif ($el eq 'prefix') {
+    my $xpmode = $exp->{EN_ExpatMode};
+
+    my $pop_pfx_fcn = $exp->{PopPrefixFcn};
+    if (defined $pop_pfx_fcn) {
+      my $result = &$pop_pfx_fcn();
+      $exp->xpcroak($result)
+	if ($xpmode and $result);
+    }
+  }
+}  # End end
+
+sub fini {
+  my ($exp) = @_;
+  $exp->{EN_Name};
+}  # End fini
+
+sub check_range {
+  my ($exp, $start, $len, $uni) = @_;
+
+  # The following characters are exceptions to the expat rule that characters
+  # in the ascii set (ordinal values < 128) must have the same value in the
+  # source encoding: $@\^`{}~'
+  # The ordinal values for these are 36,92,94,96,123,125,126,39
+  # Any len >= 3 implies you have to be hitting some non-special
+  # For 2 just check start == 125 ('}')
+  # For 1 check individually.
+
+  if ($len == 1) {
+    return if chr($start) =~ /[\$@\\^`{}~']/;
+  }
+  elsif ($len == 2 and $start == 125) {
+    return;
+  }
+
+  $exp->xpcroak("Sets ascii character to non-ascii value");
+}
+
+sub cnvnumatt {
+  my ($exp, $str, $name) = @_;
+
+  $exp->xpcroak("$name attribute is not a decimal or hex value")
+    unless ($str =~ /^(?:(\d+)|x([0-9a-f]+))$/i);
+
+  if (defined($1)) {
+    return $str + 0;
+  }
+  else {
+    return hex($2);
+  }
+}  # End cnvnumatt
+
+1;
+
+__END__
+
+=head1 NAME
+
+XML::Encoding - A perl module for parsing XML encoding maps.
+
+=head1 SYNOPSIS
+
+  use XML::Encoding;
+  my $em_parser = new XML::Encoding(ErrorContext  => 2,
+                                    ExpatRequired => 1,
+                                    PushPrefixFcn => \&push_prefix,
+                                    PopPrefixFcn  => \&pop_prefix,
+                                    RangeSetFcn   => \&range_set);
+
+  my $encmap_name = $em_parser->parsefile($ARGV[0]);
+
+=head1 DESCRIPTION
+
+This module, which is built as a subclass of XML::Parser, provides a parser
+for encoding map files, which are XML files. The file maps/encmap.dtd in the
+distribution describes the structure of these files. Calling a parse method
+returns the name of the encoding map (obtained from the name attribute of
+the root element). The contents of the map are processed through the
+callback functions push_prefix, pop_prefix, and range_set.
+
+=head1 METHODS
+
+This module provides no additional methods to those provided by XML::Parser,
+but it does take the following additional options.
+
+=over 4
+
+=item * ExpatRequired
+
+When this has a true value, then an error occurs unless the encmap
+"expat" attribute is set to "yes". Whether or not the ExpatRequired option
+is given, the parser enters expat mode if this attribute is set. In expat
+mode, the parser checks if the encoding violates expat restrictions.
+
+=item * PushPrefixFcn
+
+The corresponding value should be a code reference to be called when
+a prefix element starts. The single argument to the callback is an integer
+which is the byte value of the prefix. An undef value should be returned
+if successful. If in expat mode, a defined value causes an error and is
+used as the message string.
+
+=item * PopPrefixFcn
+
+The corresponding value should be a code reference to be called when a
+prefix element ends. No arguments are passed to this function. An undef
+value should be returned if successful. If in expat mode, a defined value
+causes an error and is used as the message string.
+
+=item * RangeSetFcn
+
+The corresponding value should be a code reference to be called when a
+"range" or "ch" element is seen. The 3 arguments passed to this function are:
+(byte, unicode_scalar, length)
+The byte is the starting byte of a range or the byte being mapped by a
+"ch" element. The unicode_scalar is the Unicode value that this byte (with
+the current prefix) maps to. The length of the range is the last argument.
+This will be 1 for the "ch" element. An undef value should be returned if
+successful. If in expat mode, a defined value causes an error and is used
+as the message string.
+
+=back
+
+=head1 AUTHOR
+
+Clark Cooper <F<coopercc at netheaven.com>>
+
+Steve Hay <F<shay at cpan.org>> is now maintaining XML::Encoding
+as of version 2.00
+
+=head1 SEE ALSO
+
+XML::Parser
+
+=cut

Propchange: branches/upstream/libxml-encoding-perl/current/lib/XML/Encoding.pm
------------------------------------------------------------------------------
    svn:executable = *

Added: branches/upstream/libxml-encoding-perl/current/t/test.t
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libxml-encoding-perl/current/t/test.t?rev=73120&op=file
==============================================================================
--- branches/upstream/libxml-encoding-perl/current/t/test.t (added)
+++ branches/upstream/libxml-encoding-perl/current/t/test.t Fri Apr 22 18:46:14 2011
@@ -1,0 +1,76 @@
+# Before `make install' is performed this script should be runnable with
+# `make test'. After `make install' it should work as `perl test.pl'
+
+use strict;
+use warnings;
+
+use Test::More tests => 15;
+
+BEGIN {
+  use_ok('XML::Encoding');
+}
+
+my @prefixes = ();
+my $pops = 0;
+my @rnginfo = ();
+
+sub pushpfx {
+  my ($byte) = @_;
+
+  push(@prefixes, $byte);
+  undef;
+}
+
+sub poppfx {
+  $pops++;
+  undef;
+}
+
+sub range {
+  my ($byte, $uni, $len) = @_;
+
+  push(@rnginfo, @_);
+  undef;
+}
+
+my $doc =<<'End_of_doc;';
+<encmap name="foo" expat="yes">
+  <range byte='xa0' uni='x3000' len='6'/>
+  <prefix byte='x81'>
+    <ch byte='x41' uni='x0753'/>
+    <range byte='x50' uni='x0400' len='32'/>
+  </prefix>
+</encmap>
+End_of_doc;
+
+my @exprng = (0xa0, 0x3000, 6, 0x41, 0x0753, 1, 0x50, 0x0400, 32);
+
+my $p = new XML::Encoding(PushPrefixFcn => \&pushpfx,
+			  PopPrefixFcn  => \&poppfx,
+			  RangeSetFcn   => \&range);
+
+my $name = $p->parse($doc);
+
+is($name, 'foo');
+is($prefixes[0], 0x81);
+is($pops, scalar @prefixes);
+cmp_ok(scalar @rnginfo, '<=', @exprng);
+
+foreach (0 .. $#exprng) {
+  is($rnginfo[$_], $exprng[$_]);
+}
+
+$doc =~ s/='32'/='200'/;
+
+# Don't use an eval {} here to trap the parse() error
+# because it causes a crash under perl-5.6.x
+{
+local $SIG{__DIE__} = sub {
+  my $err = $_[0];
+  ok($err and $err =~ /^Len plus byte > 256/);
+  exit;
+};
+$p->parse($doc);
+}
+
+ok(0);

Propchange: branches/upstream/libxml-encoding-perl/current/t/test.t
------------------------------------------------------------------------------
    svn:executable = *




More information about the Pkg-perl-cvs-commits mailing list