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