r173 - in packages: . libi18n-acceptlanguage-perl libi18n-acceptlanguage-perl/branches libi18n-acceptlanguage-perl/branches/upstream libi18n-acceptlanguage-perl/branches/upstream/current libi18n-acceptlanguage-perl/branches/upstream/current/lib libi18n-acceptlanguage-perl/branches/upstream/current/lib/I18N libi18n-acceptlanguage-perl/branches/upstream/current/t
Allard Hoeve
hoeve-guest@haydn.debian.org
Thu, 10 Jun 2004 09:27:53 -0600
Author: hoeve-guest
Date: 2004-06-10 09:27:50 -0600 (Thu, 10 Jun 2004)
New Revision: 173
Added:
packages/libi18n-acceptlanguage-perl/
packages/libi18n-acceptlanguage-perl/branches/
packages/libi18n-acceptlanguage-perl/branches/upstream/
packages/libi18n-acceptlanguage-perl/branches/upstream/current/
packages/libi18n-acceptlanguage-perl/branches/upstream/current/Changes
packages/libi18n-acceptlanguage-perl/branches/upstream/current/MANIFEST
packages/libi18n-acceptlanguage-perl/branches/upstream/current/META.yml
packages/libi18n-acceptlanguage-perl/branches/upstream/current/Makefile.PL
packages/libi18n-acceptlanguage-perl/branches/upstream/current/lib/
packages/libi18n-acceptlanguage-perl/branches/upstream/current/lib/I18N/
packages/libi18n-acceptlanguage-perl/branches/upstream/current/lib/I18N/AcceptLanguage.pm
packages/libi18n-acceptlanguage-perl/branches/upstream/current/t/
packages/libi18n-acceptlanguage-perl/branches/upstream/current/t/00load.t
packages/libi18n-acceptlanguage-perl/branches/upstream/current/t/01simple.t
packages/libi18n-acceptlanguage-perl/branches/upstream/current/t/02quality.t
packages/libi18n-acceptlanguage-perl/branches/upstream/current/t/03wildcard.t
packages/libi18n-acceptlanguage-perl/branches/upstream/current/t/04case.t
packages/libi18n-acceptlanguage-perl/tags/
Log:
[svn-inject] Installing original source of libi18n-acceptlanguage-perl
Added: packages/libi18n-acceptlanguage-perl/branches/upstream/current/Changes
===================================================================
--- packages/libi18n-acceptlanguage-perl/branches/upstream/current/Changes 2004-06-10 15:26:59 UTC (rev 172)
+++ packages/libi18n-acceptlanguage-perl/branches/upstream/current/Changes 2004-06-10 15:27:50 UTC (rev 173)
@@ -0,0 +1,33 @@
+2004-02-11 Christian Gilmore <cag@us.ibm.com>
+
+ o Now return defaultLanguage from accepts method when input is
+ insufficient. Change suggested by Morbus Iff
+ <morbus@disobey.com>.
+ o Made release 1.02.
+
+2003-11-19 Christian Gilmore <cag@us.ibm.com>
+
+ o Corrected typo in documented. Reported by Florian
+ Helmberger <fh@laudatio.com>.
+ o Made release 1.01.
+
+2003-01-01 Christian Gilmore <cag@us.ibm.com>
+
+ o Corrected typo in documentation. Reported by Gordon Rowell
+ <gordon_rowell@mitel.com>.
+ o Made release 1.00.
+
+2002-10-17 Christian Gilmore <cag@us.ibm.com>
+
+ o Added strict conformance option.
+ o Made matching case-insensitive.
+ o Made release 0.03.
+
+2002-10-02 Christian Gilmore <cag@us.ibm.com>
+
+ o Reduced perl version required to 5.6.1.
+ o Made release 0.02.
+
+2002-09-26 Christian Gilmore <cag@us.ibm.com>
+
+ o Made first public release 0.01.
Added: packages/libi18n-acceptlanguage-perl/branches/upstream/current/MANIFEST
===================================================================
--- packages/libi18n-acceptlanguage-perl/branches/upstream/current/MANIFEST 2004-06-10 15:26:59 UTC (rev 172)
+++ packages/libi18n-acceptlanguage-perl/branches/upstream/current/MANIFEST 2004-06-10 15:27:50 UTC (rev 173)
@@ -0,0 +1,10 @@
+Changes
+lib/I18N/AcceptLanguage.pm
+Makefile.PL
+MANIFEST
+t/00load.t
+t/01simple.t
+t/02quality.t
+t/03wildcard.t
+t/04case.t
+META.yml Module meta-data (added by MakeMaker)
Added: packages/libi18n-acceptlanguage-perl/branches/upstream/current/META.yml
===================================================================
--- packages/libi18n-acceptlanguage-perl/branches/upstream/current/META.yml 2004-06-10 15:26:59 UTC (rev 172)
+++ packages/libi18n-acceptlanguage-perl/branches/upstream/current/META.yml 2004-06-10 15:27:50 UTC (rev 173)
@@ -0,0 +1,11 @@
+# http://module-build.sourceforge.net/META-spec.html
+#XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX#
+name: I18N-AcceptLanguage
+version: 1.02
+version_from: lib/I18N/AcceptLanguage.pm
+installdirs: site
+requires:
+ Test::More: 0.45
+
+distribution_type: module
+generated_by: ExtUtils::MakeMaker version 6.17
Added: packages/libi18n-acceptlanguage-perl/branches/upstream/current/Makefile.PL
===================================================================
--- packages/libi18n-acceptlanguage-perl/branches/upstream/current/Makefile.PL 2004-06-10 15:26:59 UTC (rev 172)
+++ packages/libi18n-acceptlanguage-perl/branches/upstream/current/Makefile.PL 2004-06-10 15:27:50 UTC (rev 173)
@@ -0,0 +1,20 @@
+use ExtUtils::MakeMaker;
+
+($ABTRACT = <<"EOT") =~ s/\n/\\n/g;
+I18N::AcceptLanguage matches language preference to available
+languages.
+EOT
+
+if ($] < 5.006001) {
+ die "Perl version 5.6.1 or higher required.\n";
+}
+
+WriteMakefile(
+ 'NAME' => 'I18N::AcceptLanguage',
+ 'VERSION_FROM' => 'lib/I18N/AcceptLanguage.pm',
+ 'PREREQ_PM' => { 'Test::More' => 0.45 },
+ 'dist' => { 'COMPRESS' => 'gzip -9f',
+ 'SUFFIX' => 'gz', },
+ ABSTRACT => $ABSTRACT,
+ AUTHOR => 'Christian Gilmore <cag@us.ibm.com>',
+);
Added: packages/libi18n-acceptlanguage-perl/branches/upstream/current/lib/I18N/AcceptLanguage.pm
===================================================================
--- packages/libi18n-acceptlanguage-perl/branches/upstream/current/lib/I18N/AcceptLanguage.pm 2004-06-10 15:26:59 UTC (rev 172)
+++ packages/libi18n-acceptlanguage-perl/branches/upstream/current/lib/I18N/AcceptLanguage.pm 2004-06-10 15:27:50 UTC (rev 173)
@@ -0,0 +1,572 @@
+# $Id: AcceptLanguage.pm,v 1.7 2004/02/11 20:51:02 cgilmore Exp $
+#
+# Author : Christian Gilmore
+# Created On : Wed Sep 25 17:10:19 CDT 2002
+#
+# PURPOSE
+# Matches language preference to available languages.
+#
+###############################################################################
+#
+# IBM Public License Version 1.0
+#
+# THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS IBM
+# PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR
+# DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF
+# THIS AGREEMENT.
+#
+# 1. DEFINITIONS
+#
+# "Contribution" means:
+#
+# a) in the case of International Business Machines Corporation
+# ("IBM"), the Original Program, and
+#
+# b) in the case of each Contributor,
+#
+# i) changes to the Program, and
+#
+# ii) additions to the Program;
+#
+# where such changes and/or additions to the Program originate from
+# and are distributed by that particular Contributor. A Contribution
+# 'originates' from a Contributor if it was added to the Program by
+# such Contributor itself or anyone acting on such Contributor's
+# behalf. Contributions do not include additions to the Program
+# which: (i) are separate modules of software distributed in
+# conjunction with the Program under their own license agreement,
+# and (ii) are not derivative works of the Program.
+#
+# "Contributor" means IBM and any other entity that distributes the
+# Program.
+#
+# "Licensed Patents " mean patent claims licensable by a Contributor
+# which are necessarily infringed by the use or sale of its
+# Contribution alone or when combined with the Program.
+#
+# "Original Program" means the original version of the software
+# accompanying this Agreement as released by IBM, including source
+# code, object code and documentation, if any.
+#
+# "Program" means the Original Program and Contributions.
+#
+# "Recipient" means anyone who receives the Program under this
+# Agreement, including all Contributors.
+#
+# 2. GRANT OF RIGHTS
+#
+# a) Subject to the terms of this Agreement, each Contributor hereby
+# grants Recipient a non-exclusive, worldwide, royalty-free
+# copyright license to reproduce, prepare derivative works of,
+# publicly display, publicly perform, distribute and sublicense the
+# Contribution of such Contributor, if any, and such derivative
+# works, in source code and object code form.
+#
+# b) Subject to the terms of this Agreement, each Contributor hereby
+# grants Recipient a non-exclusive, worldwide, royalty-free patent
+# license under Licensed Patents to make, use, sell, offer to sell,
+# import and otherwise transfer the Contribution of such
+# Contributor, if any, in source code and object code form. This
+# patent license shall apply to the combination of the Contribution
+# and the Program if, at the time the Contribution is added by the
+# Contributor, such addition of the Contribution causes such
+# combination to be covered by the Licensed Patents. The patent
+# license shall not apply to any other combinations which include
+# the Contribution. No hardware per se is licensed hereunder.
+#
+# c) Recipient understands that although each Contributor grants the
+# licenses to its Contributions set forth herein, no assurances are
+# provided by any Contributor that the Program does not infringe the
+# patent or other intellectual property rights of any other entity.
+# Each Contributor disclaims any liability to Recipient for claims
+# brought by any other entity based on infringement of intellectual
+# property rights or otherwise. As a condition to exercising the
+# rights and licenses granted hereunder, each Recipient hereby
+# assumes sole responsibility to secure any other intellectual
+# property rights needed, if any. For example, if a third party
+# patent license is required to allow Recipient to distribute the
+# Program, it is Recipient's responsibility to acquire that license
+# before distributing the Program.
+#
+# d) Each Contributor represents that to its knowledge it has
+# sufficient copyright rights in its Contribution, if any, to grant
+# the copyright license set forth in this Agreement.
+#
+# 3. REQUIREMENTS
+#
+# A Contributor may choose to distribute the Program in object code
+# form under its own license agreement, provided that:
+#
+# a) it complies with the terms and conditions of this Agreement;
+#
+# and
+#
+# b) its license agreement:
+#
+# i) effectively disclaims on behalf of all Contributors all
+# warranties and conditions, express and implied, including
+# warranties or conditions of title and non-infringement, and
+# implied warranties or conditions of merchantability and fitness
+# for a particular purpose;
+#
+# ii) effectively excludes on behalf of all Contributors all
+# liability for damages, including direct, indirect, special,
+# incidental and consequential damages, such as lost profits;
+# iii) states that any provisions which differ from this Agreement
+# are offered by that Contributor alone and not by any other party;
+# and
+#
+# iv) states that source code for the Program is available from such
+# Contributor, and informs licensees how to obtain it in a
+# reasonable manner on or through a medium customarily used for
+# software exchange.
+#
+# When the Program is made available in source code form:
+#
+# a) it must be made available under this Agreement; and
+#
+# b) a copy of this Agreement must be included with each copy of the
+# Program.
+#
+# Each Contributor must include the following in a conspicuous
+# location in the Program:
+#
+# Copyright © {date here}, International Business Machines
+# Corporation and others. All Rights Reserved.
+#
+# In addition, each Contributor must identify itself as the originator
+# of its Contribution, if any, in a manner that reasonably allows
+# subsequent Recipients to identify the originator of the
+# Contribution.
+#
+# 4. COMMERCIAL DISTRIBUTION
+#
+# Commercial distributors of software may accept certain
+# responsibilities with respect to end users, business partners and
+# the like. While this license is intended to facilitate the
+# commercial use of the Program, the Contributor who includes the
+# Program in a commercial product offering should do so in a manner
+# which does not create potential liability for other Contributors.
+# Therefore, if a Contributor includes the Program in a commercial
+# product offering, such Contributor ("Commercial Contributor") hereby
+# agrees to defend and indemnify every other Contributor ("Indemnified
+# Contributor") against any losses, damages and costs (collectively
+# "Losses") arising from claims, lawsuits and other legal actions
+# brought by a third party against the Indemnified Contributor to the
+# extent caused by the acts or omissions of such Commercial
+# Contributor in connection with its distribution of the Program in a
+# commercial product offering. The obligations in this section do not
+# apply to any claims or Losses relating to any actual or alleged
+# intellectual property infringement. In order to qualify, an
+# Indemnified Contributor must: a) promptly notify the Commercial
+# Contributor in writing of such claim, and b) allow the Commercial
+# Contributor to control, and cooperate with the Commercial
+# Contributor in, the defense and any related settlement negotiations.
+# The Indemnified Contributor may participate in any such claim at its
+# own expense.
+#
+# For example, a Contributor might include the Program in a commercial
+# product offering, Product X. That Contributor is then a Commercial
+# Contributor. If that Commercial Contributor then makes performance
+# claims, or offers warranties related to Product X, those performance
+# claims and warranties are such Commercial Contributor's
+# responsibility alone. Under this section, the Commercial Contributor
+# would have to defend claims against the other Contributors related
+# to those performance claims and warranties, and if a court requires
+# any other Contributor to pay any damages as a result, the Commercial
+# Contributor must pay those damages.
+#
+# 5. NO WARRANTY
+#
+# EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+# PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
+# ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+# ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient
+# is solely responsible for determining the appropriateness of using
+# and distributing the Program and assumes all risks associated with
+# its exercise of rights under this Agreement, including but not
+# limited to the risks and costs of program errors, compliance with
+# applicable laws, damage to or loss of data, programs or equipment,
+# and unavailability or interruption of operations.
+#
+# 6. DISCLAIMER OF LIABILITY
+#
+# EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+# NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+# THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+# GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+# DAMAGES.
+#
+# 7. GENERAL
+#
+# If any provision of this Agreement is invalid or unenforceable under
+# applicable law, it shall not affect the validity or enforceability
+# of the remainder of the terms of this Agreement, and without further
+# action by the parties hereto, such provision shall be reformed to
+# the minimum extent necessary to make such provision valid and
+# enforceable.
+#
+# If Recipient institutes patent litigation against a Contributor with
+# respect to a patent applicable to software (including a cross-claim
+# or counterclaim in a lawsuit), then any patent licenses granted by
+# that Contributor to such Recipient under this Agreement shall
+# terminate as of the date such litigation is filed. In addition, If
+# Recipient institutes patent litigation against any entity (including
+# a cross-claim or counterclaim in a lawsuit) alleging that the
+# Program itself (excluding combinations of the Program with other
+# software or hardware) infringes such Recipient's patent(s), then
+# such Recipient's rights granted under Section 2(b) shall terminate
+# as of the date such litigation is filed.
+#
+# All Recipient's rights under this Agreement shall terminate if it
+# fails to comply with any of the material terms or conditions of this
+# Agreement and does not cure such failure in a reasonable period of
+# time after becoming aware of such noncompliance. If all Recipient's
+# rights under this Agreement terminate, Recipient agrees to cease use
+# and distribution of the Program as soon as reasonably practicable.
+# However, Recipient's obligations under this Agreement and any
+# licenses granted by Recipient relating to the Program shall continue
+# and survive.
+#
+# IBM may publish new versions (including revisions) of this Agreement
+# from time to time. Each new version of the Agreement will be given a
+# distinguishing version number. The Program (including Contributions)
+# may always be distributed subject to the version of the Agreement
+# under which it was received. In addition, after a new version of the
+# Agreement is published, Contributor may elect to distribute the
+# Program (including its Contributions) under the new version. No one
+# other than IBM has the right to modify this Agreement. Except as
+# expressly stated in Sections 2(a) and 2(b) above, Recipient receives
+# no rights or licenses to the intellectual property of any
+# Contributor under this Agreement, whether expressly, by implication,
+# estoppel or otherwise. All rights in the Program not expressly
+# granted under this Agreement are reserved.
+#
+# This Agreement is governed by the laws of the State of New York and
+# the intellectual property laws of the United States of America. No
+# party to this Agreement will bring a legal action under this
+# Agreement more than one year after the cause of action arose. Each
+# party waives its rights to a jury trial in any resulting litigation.
+#
+###############################################################################
+
+
+# Package name
+package I18N::AcceptLanguage;
+
+
+# Required packages
+use 5.006001;
+use strict;
+use warnings;
+use vars qw($VERSION);
+
+
+# Global variables
+$VERSION = '1.02';
+
+
+###############################################################################
+###############################################################################
+# new: class object initialization
+###############################################################################
+###############################################################################
+sub new {
+ my $self = shift;
+ my $type = ref($self) || $self;
+ my $obj = bless {}, $type;
+ my %arg = @_;
+
+ $obj->debug($arg{debug} || 0);
+ $obj->defaultLanguage($arg{defaultLanguage} || '');
+ defined $arg{strict} ? $obj->strict($arg{strict}) : $obj->strict(1);
+
+ return $obj;
+}
+
+###############################################################################
+###############################################################################
+# debug: get/set method for debug messages
+###############################################################################
+###############################################################################
+sub debug {
+ my $acceptor = shift;
+
+ $acceptor->{debug} = shift if @_;
+ return $acceptor->{debug};
+}
+
+###############################################################################
+###############################################################################
+# defaultLanguage: get/set method for the server default language
+###############################################################################
+###############################################################################
+sub defaultLanguage {
+ my $acceptor = shift;
+
+ $acceptor->{defaultLanguage} = shift if @_;
+ return $acceptor->{defaultLanguage};
+}
+
+###############################################################################
+###############################################################################
+# strict: get/set method for strict protocol conformance
+###############################################################################
+###############################################################################
+sub strict {
+ my $acceptor = shift;
+
+ $acceptor->{strict} = shift if @_;
+ return $acceptor->{strict};
+}
+
+###############################################################################
+###############################################################################
+# accepts: determines what the highest priority commonly known language
+# between client and server is.
+###############################################################################
+###############################################################################
+sub accepts {
+ my ($acceptor, $clientPreferences, $supportedLanguages) = @_;
+
+ # Basic sanity check
+ if (not $clientPreferences or ref($supportedLanguages) ne 'ARRAY') {
+ return $acceptor->defaultLanguage();
+ }
+
+ # There should be no whitespace anways, but a cleanliness/sanity check
+ $clientPreferences =~ s/\s//g;
+ print "Client preferences are $clientPreferences\n" if $acceptor->debug();
+
+ # Prepare the list of client-acceptable languages
+ my @languages = ();
+ foreach my $tag (split(/,/, $clientPreferences)) {
+ my ($language, $quality) = split(/\;/, $tag);
+ $quality =~ s/^q=//i if $quality;
+ $quality = 1 unless $quality;
+ next if $quality <= 0;
+ # We want to force the wildcard to be last
+ $quality = 0 if ($language eq '*');
+ # Pushing lowercase language here saves processing later
+ push(@languages, { quality => $quality,
+ language => $language,
+ lclanguage => lc($language) });
+ }
+
+ # Prepare the list of server-supported languages
+ my %supportedLanguages = ();
+ my %secondaryLanguages = ();
+ foreach my $language (@$supportedLanguages) {
+ print "Added language $language (lower-cased) to supported hash\n"
+ if $acceptor->debug();
+ $supportedLanguages{lc($language)} = $language;
+ if ($language =~ /^([^-]+)-/) {
+ print "Added language $1 (lower-cased) to secondary hash\n"
+ if $acceptor->debug();
+ $secondaryLanguages{lc($1)} = $language;
+ }
+ }
+
+ # Reverse sort the list, making best quality at the front of the array
+ @languages = sort { $b->{quality} <=> $a->{quality} } @languages;
+
+ my $secondaryMatch = '';
+ foreach my $tag (@languages) {
+ print "Matching ", $tag->{lclanguage}, "\n" if $acceptor->debug();
+ if (exists($supportedLanguages{$tag->{lclanguage}})) {
+ # Client en-us eq server en-us
+ print "Returning language ", $supportedLanguages{$tag->{language}}, "\n"
+ if $acceptor->debug();
+ return $supportedLanguages{$tag->{language}}
+ if exists($supportedLanguages{$tag->{language}});
+ return $supportedLanguages{$tag->{lclanguage}};
+ } elsif (exists($secondaryLanguages{$tag->{lclanguage}})) {
+ # Client en eq server en-us
+ print "Returning language ", $secondaryLanguages{$tag->{language}}, "\n"
+ if $acceptor->debug();
+ return $secondaryLanguages{$tag->{language}}
+ if exists($secondaryLanguages{$tag->{language}});
+ return $supportedLanguages{$tag->{lclanguage}};
+ } elsif (!($acceptor->strict()) &&
+ $tag->{lclanguage} =~ /^([^-]+)-/ &&
+ exists($secondaryLanguages{$1})) {
+ # Client en-gb eq server en-us
+ print "Setting supported secondaryMatch of $1 for ", $tag->{lclanguage}, "\n"
+ if $acceptor->debug();
+ $secondaryMatch = $secondaryLanguages{$1};
+ } elsif ($tag->{lclanguage} =~ /^([^-]+)-/ &&
+ exists($supportedLanguages{$1})) {
+ # Client en-us eq server en
+ print "Setting secondary secondaryMatch of $1 for ", $tag->{lclanguage}, "\n"
+ if $acceptor->debug();
+ $secondaryMatch = $supportedLanguages{$1};
+ } elsif ($tag->{lclanguage} eq '*') {
+ # * matches every language not already specified.
+ # It doesn't care which we pick, so let's pick the default,
+ # if available, then the first in the array.
+ print "Setting default for *\n" if $acceptor->debug();
+ return $acceptor->defaultLanguage() if $acceptor->defaultLanguage();
+ return $supportedLanguages->[0];
+ }
+ }
+
+ # No primary matches. Secondary? (ie, en-us requested and en supported)
+ print "Testing for secondaryMatch\n" if $acceptor->debug();
+ return $secondaryMatch if $secondaryMatch;
+
+ # No matches. Let's return the default, if set.
+ print "Returning default, if any\n" if $acceptor->debug();
+ return $acceptor->defaultLanguage();
+}
+
+1;
+
+__END__
+
+###############################################################################
+###############################################################################
+# Documentation - try 'pod2text AcceptLanguage.pm'
+###############################################################################
+###############################################################################
+
+=head1 NAME
+
+I18N::AcceptLanguage - Matches language preference to available
+languages
+
+=head1 SYNOPSIS
+
+ use I18N::AcceptLanguage;
+
+ my $supportedLanguages = [( 'en-us', 'fr' )];
+
+ my $acceptor = I18N::AcceptLanguage->new();
+ my $language = $acceptor->accepts($ENV{HTTP_ACCEPT_LANGUAGE},
+ $supportedLanguages);
+
+=head1 DESCRIPTION
+
+B<I18N::AcceptLanguage> matches language preference to available
+languages per rules defined in RFC 2616, section 14.4: HTTP/1.1 -
+Header Field Definitions - Accept-Language.
+
+=head1 PUBLIC METHODS
+
+=over 2
+
+=item accepts( CLIENT_PREFERENCES, SUPPORTED_LANGUAGES )
+
+Returns the highest priority common language between client and
+server. If no common language is found, the defaultLanguage is
+returned. If defaultLanuage is also not set, an empty string is
+returned. The method expects two arguments:
+
+=over 2
+
+=item CLIENT_PREFERENCES
+
+A string in the same format defined in RFC 2616, quoted here:
+
+ 1#( ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) | "*" ) [ "'" "q" "=" qvalue ] )
+
+Examples:
+
+ da, en-gb;q=0.8, en;q=0.7
+
+ en-us, ja, *
+
+=item SUPPORTED_LANGUAGES
+
+A reference to a list of language ranges supported by the server.
+
+=back
+
+=item new( [ OPTIONS ] )
+
+Returns a new I18N::AcceptLanguage object. The method accepts the
+following key/value pair options:
+
+=over 2
+
+=item debug
+
+A boolean set to either 0 or 1. When set to 1, debug messages will be
+printed to STDOUT. The value of debug defaults to 0.
+
+=item defaultLanguage
+
+A string representing the server's default language choice. The value
+of defaultLanguage defaults to an empty string.
+
+=item strict
+
+A boolean set to either 0 or 1. When set to 1, the software strictly
+conforms to the protocol specification. When set to 0, the software
+will perform a secondary, aggressive language match regardless of
+country (ie, a client asking for only en-gb will get back en-us if the
+server does not accept en-gb or en but does accept en-us). The value
+of strict defaults to 1.
+
+=back
+
+=back
+
+=head1 PRIVATE METHODS
+
+=over 2
+
+=item debug( [ BOOLEAN ] )
+
+A get/set method that returns the value of debug, set by the optional
+method argument.
+
+=item defaultLanguage( [ LANGUAGE ] )
+
+A get/set method that returns the value of defaultLanguage, set by the
+optional method argument.
+
+=item strict( [ BOOLEAN ] )
+
+A get/set method that returns the value of strict, set by the optional
+method argument.
+
+=back
+
+=head1 NOTES
+
+=over 2
+
+=item Case Sensitivity
+
+Language matches are done in a case-insensitive manner but results are
+case-sensitive to the value found in the SUPPORTED_LANGUAGES list.
+
+=back
+
+=head1 AVAILABILITY
+
+This module is available on CPAN worldwide and requires perl version
+5.6.1 or higher be installed.
+
+=head1 AUTHORS
+
+Christian Gilmore <cag@us.ibm.com>
+
+=head1 SEE ALSO
+
+RFC 2616
+
+=head1 COPYRIGHT
+
+Copyright (C) 2003, 2004 International Business Machines Corporation
+and others. All Rights Reserved.
+
+This module is free software; you can redistribute it and/or
+modify it under the terms of the IBM Public License.
+
+=cut
Added: packages/libi18n-acceptlanguage-perl/branches/upstream/current/t/00load.t
===================================================================
--- packages/libi18n-acceptlanguage-perl/branches/upstream/current/t/00load.t 2004-06-10 15:26:59 UTC (rev 172)
+++ packages/libi18n-acceptlanguage-perl/branches/upstream/current/t/00load.t 2004-06-10 15:27:50 UTC (rev 173)
@@ -0,0 +1,7 @@
+# $Id: 00load.t,v 1.1 2002/09/26 22:23:33 cgilmore Exp $
+
+use Test::More qw(no_plan);
+
+# Check to see if it loads
+
+BEGIN{ use_ok( 'I18N::AcceptLanguage' ); }
Added: packages/libi18n-acceptlanguage-perl/branches/upstream/current/t/01simple.t
===================================================================
--- packages/libi18n-acceptlanguage-perl/branches/upstream/current/t/01simple.t 2004-06-10 15:26:59 UTC (rev 172)
+++ packages/libi18n-acceptlanguage-perl/branches/upstream/current/t/01simple.t 2004-06-10 15:27:50 UTC (rev 173)
@@ -0,0 +1,40 @@
+# $Id: 01simple.t,v 1.3 2004/02/11 20:50:10 cgilmore Exp $
+
+use Test::More qw(no_plan);
+
+# Check to see if it loads
+
+BEGIN{ use_ok( 'I18N::AcceptLanguage' ); }
+
+###############################################################################
+# Basic tests
+###############################################################################
+
+my $t1 = I18N::AcceptLanguage->new();
+ok( $t1->accepts('en', [( 'en' )]) eq 'en' );
+ok( $t1->accepts('en-us', [( 'en' )]) eq 'en' );
+ok( $t1->accepts('en', [( 'en-us' )]) eq 'en-us' );
+ok( $t1->accepts('en-gb', [( 'en-us' )]) eq '' );
+ok( $t1->accepts('ja', [( 'en' )]) eq '' );
+
+###############################################################################
+# Basic tests with default language
+###############################################################################
+
+my $t2 = I18N::AcceptLanguage->new(defaultLanguage => 'ja');
+ok( $t2->accepts('en', [( 'en' )]) eq 'en' );
+ok( $t2->accepts('en-us', [( 'en' )]) eq 'en' );
+ok( $t2->accepts('en', [( 'en-us' )]) eq 'en-us' );
+ok( $t2->accepts('en-gb', [( 'en-us' )]) eq 'ja' );
+ok( $t2->accepts('ja', [( 'en' )]) eq 'ja' );
+ok( $t2->accepts('', [( 'en' )]) eq 'ja' );
+ok( $t2->accepts('', [ ]) eq 'ja' );
+
+###############################################################################
+# Basic tests without default language
+###############################################################################
+
+my $t3 = I18N::AcceptLanguage->new(strict => 0);
+ok( $t3->accepts('en-gb', [( 'en-us' )]) eq 'en-us' );
+ok( $t3->accepts('', [( 'en' )]) eq '' );
+ok( $t3->accepts('', [ ]) eq '' );
Added: packages/libi18n-acceptlanguage-perl/branches/upstream/current/t/02quality.t
===================================================================
--- packages/libi18n-acceptlanguage-perl/branches/upstream/current/t/02quality.t 2004-06-10 15:26:59 UTC (rev 172)
+++ packages/libi18n-acceptlanguage-perl/branches/upstream/current/t/02quality.t 2004-06-10 15:27:50 UTC (rev 173)
@@ -0,0 +1,18 @@
+# $Id: 02quality.t,v 1.2 2002/10/02 21:28:35 cgilmore Exp $
+
+use Test::More qw(no_plan);
+
+# Check to see if it loads
+
+BEGIN{ use_ok( 'I18N::AcceptLanguage' ); }
+
+###############################################################################
+# Quality tests
+###############################################################################
+
+my $t1 = I18N::AcceptLanguage->new();
+ok( $t1->accepts('en-us,en;q=0.2', [( 'en-us', 'en' )]) eq 'en-us' );
+ok( $t1->accepts('en-us;q=0.2, ja;q=0.9', [( 'en-us', 'ja' )]) eq 'ja' );
+ok( $t1->accepts('en-gb;q=1,en;q=0.2', [( 'en-us', 'en-gb' )]) eq 'en-gb' );
+ok( $t1->accepts('en-gb;q=1,en;q=0.2', [( 'en-us', 'en' )]) eq 'en' );
+ok( $t1->accepts('en-gb;q=1,en;q=0.9,ja;q=0.8', [( 'en-us', 'ja' )]) eq 'en-us' );
Added: packages/libi18n-acceptlanguage-perl/branches/upstream/current/t/03wildcard.t
===================================================================
--- packages/libi18n-acceptlanguage-perl/branches/upstream/current/t/03wildcard.t 2004-06-10 15:26:59 UTC (rev 172)
+++ packages/libi18n-acceptlanguage-perl/branches/upstream/current/t/03wildcard.t 2004-06-10 15:27:50 UTC (rev 173)
@@ -0,0 +1,18 @@
+# $Id: 03wildcard.t,v 1.1 2002/09/26 22:23:33 cgilmore Exp $
+
+use Test::More qw(no_plan);
+
+# Check to see if it loads
+
+BEGIN{ use_ok( 'I18N::AcceptLanguage' ); }
+
+###############################################################################
+# Wildcard tests
+###############################################################################
+
+my $t1 = I18N::AcceptLanguage->new();
+ok( $t1->accepts('en,*', [( 'en', 'fr' )]) eq 'en' );
+ok( $t1->accepts('en-us,*', [( 'en', 'fr' )]) eq 'en' );
+ok( $t1->accepts('en,*', [( 'en-us' )]) eq 'en-us' );
+ok( $t1->accepts('en-gb,*', [( 'en-us' )]) eq 'en-us' );
+ok( $t1->accepts('ja,*', [( 'en' )]) eq 'en' );
Added: packages/libi18n-acceptlanguage-perl/branches/upstream/current/t/04case.t
===================================================================
--- packages/libi18n-acceptlanguage-perl/branches/upstream/current/t/04case.t 2004-06-10 15:26:59 UTC (rev 172)
+++ packages/libi18n-acceptlanguage-perl/branches/upstream/current/t/04case.t 2004-06-10 15:27:50 UTC (rev 173)
@@ -0,0 +1,15 @@
+# $Id: 04case.t,v 1.1 2002/11/14 16:57:43 cgilmore Exp $
+
+use Test::More qw(no_plan);
+
+# Check to see if it loads
+
+BEGIN{ use_ok( 'I18N::AcceptLanguage' ); }
+
+###############################################################################
+# Basic tests
+###############################################################################
+
+my $t1 = I18N::AcceptLanguage->new();
+ok( $t1->accepts('en-US', [( 'en-us' )]) eq 'en-us' );
+ok( $t1->accepts('en-us', [( 'en-US' )]) eq 'en-US' );