r8073 - in /trunk/libmarc-lint-perl: Changes MANIFEST README debian/changelog lib/MARC/Lint.pm lib/MARC/Lint/CodeData.pm t/check245.t t/test880and6.t

gregoa-guest at users.alioth.debian.org gregoa-guest at users.alioth.debian.org
Thu Oct 4 16:24:34 UTC 2007


Author: gregoa-guest
Date: Thu Oct  4 16:24:34 2007
New Revision: 8073

URL: http://svn.debian.org/wsvn/?sc=1&rev=8073
Log:
New upstream release.

Added:
    trunk/libmarc-lint-perl/t/test880and6.t
      - copied unchanged from r8072, branches/upstream/libmarc-lint-perl/current/t/test880and6.t
Modified:
    trunk/libmarc-lint-perl/Changes
    trunk/libmarc-lint-perl/MANIFEST
    trunk/libmarc-lint-perl/README
    trunk/libmarc-lint-perl/debian/changelog
    trunk/libmarc-lint-perl/lib/MARC/Lint.pm
    trunk/libmarc-lint-perl/lib/MARC/Lint/CodeData.pm
    trunk/libmarc-lint-perl/t/check245.t

Modified: trunk/libmarc-lint-perl/Changes
URL: http://svn.debian.org/wsvn/trunk/libmarc-lint-perl/Changes?rev=8073&op=diff
==============================================================================
--- trunk/libmarc-lint-perl/Changes (original)
+++ trunk/libmarc-lint-perl/Changes Thu Oct  4 16:24:34 2007
@@ -1,3 +1,38 @@
+1.43    Wed October 3 19:36:00 CDT 2007
+
+        [THINGS THAT MAY BREAK YOUR CODE]
+
+        - Updated Lint::DATA section with Update No. 7 (Oct. 2006)
+        
+        - MARC::Lint is incompatibile with Business::ISBN versions 2.00-2.02_01.
+        Business::ISBN versions below 2 and 2.02_02 or above should work.
+
+        - Updated check_record's treatment of 880 fields. Now if the tagno is
+        880, check_record attempts to look at subfield 6 for the linked tagno
+        and uses that as the basis for the tagno to be checked.
+
+        - Updated _check_article to account for 880, using subfield 6 linked
+        tagno instead.
+        - Updated _check_article to account for articles followed parentheses,
+        apostrophes and/or quotes. Also related bug fixes for counting
+        punctuation around the article.
+
+        - For subfield 6, it should always be the 1st subfield according to MARC
+        21 specifications, so check_245 has been updated to account for subfield
+        6 being 1st, rather than requiring subfield a to be 1st.
+
+        - Added new test, test880and6.t for 880 field and for subfield 6.
+
+        - Added TODO concerning subfield 9. This subfield is not officially
+        allowed in MARC, since it is locally defined. Some way needs to be made
+        to allow messages/warnings about this subfield to be turned off.
+
+        - Added TODO concerning subfield 8. This subfield could be the 1st or
+        2nd subfield, so the code that checks for the 1st few subfields
+        (check_245, check_250) should take that into account.
+
+        - Updated MARC::Lint::CodeData with most recent version.
+
 1.42    Mon June 19 18:28:00 CDT 2006
 
         [THINGS THAT MAY BREAK YOUR CODE]
@@ -7,7 +42,7 @@
         - Removed META.yml from MANIFEST
         - Updated MARC::Lint::CodeData with most recent version
         - Updated Lint::DATA section with Update No. 6 (Oct. 2005)
-        - Updated etc/ecbdlist.html to Update No. 6 (October 2005)
+        - Updated etc/ecbdlist.html to Update No. 6 (Oct. 2005)
 
 
 1.41    Wed Sept 21 17:49:00 CDT 2005

Modified: trunk/libmarc-lint-perl/MANIFEST
URL: http://svn.debian.org/wsvn/trunk/libmarc-lint-perl/MANIFEST?rev=8073&op=diff
==============================================================================
--- trunk/libmarc-lint-perl/MANIFEST (original)
+++ trunk/libmarc-lint-perl/MANIFEST Thu Oct  4 16:24:34 2007
@@ -12,3 +12,4 @@
 t/check041043.t
 t/check245.t
 t/lint.t
+t/test880and6.t

Modified: trunk/libmarc-lint-perl/README
URL: http://svn.debian.org/wsvn/trunk/libmarc-lint-perl/README?rev=8073&op=diff
==============================================================================
--- trunk/libmarc-lint-perl/README (original)
+++ trunk/libmarc-lint-perl/README Thu Oct  4 16:24:34 2007
@@ -22,7 +22,7 @@
 COPYRIGHT AND LICENCE
 
 This software is free software and may be distributed under the same
-terms as Perl itself .
+terms as Perl itself.
 
-Copyright (C) 2001-2005  Baldus, Lester, Summers
+Copyright (C) 2001-2007  Baldus, Lester, Summers
 

Modified: trunk/libmarc-lint-perl/debian/changelog
URL: http://svn.debian.org/wsvn/trunk/libmarc-lint-perl/debian/changelog?rev=8073&op=diff
==============================================================================
--- trunk/libmarc-lint-perl/debian/changelog (original)
+++ trunk/libmarc-lint-perl/debian/changelog Thu Oct  4 16:24:34 2007
@@ -1,3 +1,9 @@
+libmarc-lint-perl (1.43-1) unstable; urgency=low
+
+  * New upstream release.
+
+ -- gregor herrmann <gregor+debian at comodo.priv.at>  Thu, 04 Oct 2007 18:23:59 +0200
+
 libmarc-lint-perl (1.42-3) unstable; urgency=medium
 
   * Remove empty /usr/lib/perl5 directory from binary package.

Modified: trunk/libmarc-lint-perl/lib/MARC/Lint.pm
URL: http://svn.debian.org/wsvn/trunk/libmarc-lint-perl/lib/MARC/Lint.pm?rev=8073&op=diff
==============================================================================
--- trunk/libmarc-lint-perl/lib/MARC/Lint.pm (original)
+++ trunk/libmarc-lint-perl/lib/MARC/Lint.pm Thu Oct  4 16:24:34 2007
@@ -8,7 +8,7 @@
 
 use MARC::Lint::CodeData qw(%GeogAreaCodes %ObsoleteGeogAreaCodes %LanguageCodes %ObsoleteLanguageCodes);
 
-our $VERSION = 1.42;
+our $VERSION = 1.43;
 
 =head1 NAME
 
@@ -170,11 +170,33 @@
     my $rules = $self->{_rules};
     for my $field ( $marc->fields ) {
         my $tagno = $field->tag;
-        my $tagrules = $rules->{$tagno} or next;
-
-        if ( ($tagrules->{'repeatable'} && ( $tagrules->{'repeatable'} eq 'NR' )) && $field_seen{$tagno} ) {
-            $self->warn( "$tagno: Field is not repeatable." );
-        }
+
+        my $tagrules = '';
+        #if 880 field, inherit rules from tagno in subfield _6
+        my $is_880 = 0;
+        if ($tagno eq '880') {
+            $is_880 = 1;
+            if ($field->subfield('6')) {
+                my $sub6 = $field->subfield('6');
+                $tagno = substr($sub6, 0, 3);
+
+                $tagrules = $rules->{$tagno} or next;
+                #880 is repeatable, but its linked field may not be
+                if ( ($tagrules->{'repeatable'} && ( $tagrules->{'repeatable'} eq 'NR' )) && $field_seen{'880.'.$tagno} ) {
+                    $self->warn( "$tagno: Field is not repeatable." );
+                } #if repeatability
+            } #if subfield 6 present
+            else {
+                $self->warn( "880: No subfield 6." );
+            } #else no subfield 6 in 880 field
+        } #if this is 880 field
+        else {
+            $tagrules = $rules->{$tagno} or next;
+
+            if ( ($tagrules->{'repeatable'} && ( $tagrules->{'repeatable'} eq 'NR' )) && $field_seen{$tagno} ) {
+                $self->warn( "$tagno: Field is not repeatable." );
+            } #if repeatability
+        } #else not 880
 
         if ( $tagno >= 10 ) {
             for my $ind ( 1..2 ) {
@@ -220,7 +242,12 @@
             $self->$checker( $field );
         }
 
-        ++$field_seen{$tagno};
+        if ($is_880) {
+            ++$field_seen{'880.'.$tagno};
+        } #if 880 field
+        else {
+            ++$field_seen{$tagno};
+        }
     } # for my $fields
 
     return;
@@ -286,7 +313,16 @@
             #otherwise, check 10 and 13 digit checksums for validity
             else {
                 if ((length ($isbnno) == 10)) {
-                    $self->warn( "020: Subfield a has bad checksum, $data.") if (Business::ISBN::is_valid_checksum($isbnno) != 1); 
+
+                    if ($Business::ISBN::VERSION gt '2.02_01') {
+                        $self->warn( "020: Subfield a has bad checksum, $data." ) if (Business::ISBN::valid_isbn_checksum($isbnno) != 1); 
+                    } #if Business::ISBN version higher than 2.02_01
+                    elsif ($Business::ISBN::VERSION lt '2') {
+                        $self->warn( "020: Subfield a has bad checksum, $data." ) if (Business::ISBN::is_valid_checksum($isbnno) != 1); 
+                    } #elsif Business::ISBN version lower than 2
+                    else {
+                        $self->warn( "Business::ISBN version must be below 2 or above 2.02_02." );
+                    } #else Business::ISBN version between 2 and 2.02_02
                 } #if 10 digit ISBN has invalid check digit
                 # do validation check for 13 digit isbn
 #########################################
@@ -497,6 +533,9 @@
 
     my $self = shift;
     my $field = shift;
+
+    #set tagno for reporting
+    my $tagno = '245';
     
     if ( not $field->subfield( "a" ) ) {
         $self->warn( "245: Must have a subfield _a." );
@@ -506,9 +545,12 @@
 
     my @subfields = $field->subfields();
     my @newsubfields = ();
+    my $has_sub_6 = 0;
 
     while (my $subfield = pop(@subfields)) {
         my ($code, $data) = @$subfield;
+        #check for subfield 6 being present
+        $has_sub_6 = 1 if ($code eq '6');
         unshift (@newsubfields, $code, $data);
     } # while
     
@@ -521,10 +563,29 @@
         $self->warn ( "245: MARC21 allows ? or ! as final punctuation but LCRI 1.0C, Nov. 2003, requires period.");
     }
 
-#subfield a should be first subfield
-    if ($newsubfields[0] ne 'a') {
-        $self->warn ( "245: First subfield must be _a, but it is _$newsubfields[0]");
-    }
+    ##Check for first subfield
+    #subfield a should be first subfield (or 2nd if subfield '6' is present)
+    if ($has_sub_6) {
+        #make sure there are at least 2 subfields
+        if ($#newsubfields < 3) {
+            $self->warn ("$tagno: May have too few subfields.");
+        } #if fewer than 2 subfields
+        else {
+            if ($newsubfields[0] ne '6') {
+                $self->warn ( "$tagno: First subfield must be _6, but it is $newsubfields[0]");
+            } #if 1st subfield not '6'
+            if ($newsubfields[2] ne 'a') {
+                $self->warn ( "$tagno: First subfield after subfield _6 must be _a, but it is _$newsubfields[2]");
+            } #if 2nd subfield not 'a'
+        } #else at least 2 subfields
+    } #if has subfield 6
+    else {
+        #1st subfield must be 'a'
+        if ($newsubfields[0] ne 'a') {
+            $self->warn ( "$tagno: First subfield must be _a, but it is _$newsubfields[0]");
+        } #if 2nd subfield not 'a'
+    } #else no subfield _6
+    ##End check for first subfield
     
     #subfield c, if present, must be preceded by /
     #also look for space between initials
@@ -695,6 +756,13 @@
 
     #get tagno to determine which indicator to check and for reporting
     my $tagno = $field->tag();
+    #retrieve tagno from subfield 6 if 880 field
+    if ($tagno eq '880') {
+        if ($field->subfield('6')) {
+            my $sub6 = $field->subfield('6');
+            $tagno = substr($sub6, 0, 3);
+        } #if subfield 6
+    } #if 880 field
 
     #$ind holds nonfiling character indicator value
     my $ind = '';
@@ -729,8 +797,8 @@
         $char1_notalphanum++;
         $title =~ s/^["'\[\(*]//;
     }
-    # split title into first word + rest on space, apostrophe or hyphen
-    my ($firstword,$separator,$etc) = $title =~ /^([^ '\-]+)([ '\-])?(.*)/i;
+    # split title into first word + rest on space, parens, bracket, apostrophe, quote, or hyphen
+    my ($firstword, $separator, $etc) = $title =~ /^([^ \(\)\[\]'"\-]+)([ \(\)\[\]'"\-])?(.*)/i;
         $firstword = '' if ! defined( $firstword );
         $separator = '' if ! defined( $separator );
         $etc = '' if ! defined( $etc );
@@ -752,10 +820,14 @@
 
     #if article then $nonfilingchars should match $ind
     if ($isan_article) {
-        #account for quotes or apostrophes before 2nd word (only checks for 1)
-        if (($separator eq ' ') && ($etc =~ /^['"]/)) {
-            $nonfilingchars++;
-        }
+        #account for quotes, apostrophes, parens, or brackets before 2nd word
+#        if (($separator eq ' ') && ($etc =~ /^['"]/)) {
+        if (($separator) && ($etc =~ /^[ \(\)\[\]'"\-]+/)) {
+            while ($etc =~ /^[ "'\[\]\(\)*]/){
+                $nonfilingchars++;
+                $etc =~ s/^[ "'\[\]\(\)*]//;
+            } #while etc starts with nonfiling chars
+        } #if separator defined and etc starts with nonfiling chars
         #special case for 'en' (unsure why)
         if ($firstword eq 'en') {
             $self->warn ( $tagno, ": First word, , $firstword, may be an article, check $first_or_second indicator ($ind)." ) unless (($ind eq '3') || ($ind eq '0'));
@@ -786,10 +858,23 @@
 
 =over 4
 
+=item * Subfield 6
+
+For subfield 6, it should always be the 1st subfield according to MARC 21 specifications. Perhaps a generic check should be added that warns if subfield 6 is not the 1st subfield.
+
+=item * Subfield 8.
+
+This subfield could be the 1st or 2nd subfield, so the code that checks for the 1st few subfields (check_245, check_250) should take that into account.
+
+=item * Subfield 9
+
+This subfield is not officially allowed in MARC, since it is locally defined. Some way needs to be made to allow messages/warnings about this subfield to be turned off (or otherwise deal with records using/allowing locally defined subfield 9).
+
 =item * ISBN and ISSN checking
 
-We can check the 020 and 022 fields with the C<Business::ISBN> and
-C<Business::ISSN> modules, respectively.
+020 and 022 fields are validated with the C<Business::ISBN> and
+C<Business::ISSN> modules, respectively. Business::ISBN versions between 2 and
+2.02_01 are incompatible with MARC::Lint.
 
 =item * check_041 cleanup
 
@@ -1130,8 +1215,13 @@
 m       NR      Right ascension--eastern limit 
 n       NR      Right ascension--western limit 
 p       NR      Equinox 
+r       NR      Distance from earth
 s       R       G-ring latitude 
 t       R       G-ring longitude 
+x       NR      Beginning date
+y       NR      Ending date
+z       NR      Name of extraterrestrial body
+2       NR      Source
 6       NR      Linkage 
 8       R       Field link and sequence number 
 
@@ -1246,15 +1336,16 @@
 6       NR      Linkage 
 8       R       Field link and sequence number 
 
-047     NR      FORM OF MUSICAL COMPOSITION CODE
-ind1    blank   Undefined
-ind2    blank   Undefined
+047     R       FORM OF MUSICAL COMPOSITION CODE
+ind1    blank   Undefined
+ind2    b7      Source of code
 a       R       Form of musical composition code 
+2       NR      Source of code
 8       R       Field link and sequence number 
 
 048     R       NUMBER OF MUSICAL INSTRUMENTS OR VOICES CODE
 ind1    blank   Undefined
-ind2    b2      Source specified in subfield $2
+ind2    b7      Source specified in subfield $2
 a       R       Performer or ensemble 
 b       R       Soloist 
 2       NR      Source of code
@@ -1444,6 +1535,7 @@
 e       R       Subordinate unit 
 f       NR      Date of a work 
 g       NR      Miscellaneous information 
+j       R       Relator term
 k       R       Form subheading 
 l       NR      Language of a work 
 n       R       Number of part/section/meeting 
@@ -2034,14 +2126,16 @@
 8       R       Field link and sequence number 
 
 506     R       RESTRICTIONS ON ACCESS NOTE
-ind1    blank   Undefined
+ind1    b01     Restriction
 ind2    blank   Undefined
 a       NR      Terms governing access 
 b       R       Jurisdiction 
 c       R       Physical access provisions 
 d       R       Authorized users 
 e       R       Authorization 
+f       R       Standard terminology for access restiction 
 u       R       Uniform Resource Identifier 
+2       NR      Source of term
 3       NR      Materials specified 
 5       NR      Institution to which field applies 
 6       NR      Linkage 
@@ -2581,6 +2675,7 @@
 f       NR      Date of a work 
 g       NR      Miscellaneous information 
 h       NR      Medium 
+j       R       Relator term
 k       R       Form subheading 
 l       NR      Language of a work 
 n       R       Number of part/section/meeting 
@@ -2834,6 +2929,7 @@
 f       NR      Date of a work 
 g       NR      Miscellaneous information 
 h       NR      Medium 
+j       R       Relator term
 k       R       Form subheading 
 l       NR      Language of a work 
 n       R       Number of part/section/meeting 
@@ -3377,6 +3473,7 @@
 f       NR      Date of a work 
 g       NR      Miscellaneous information 
 h       NR      Medium 
+j       R       Relator term
 k       R       Form subheading 
 l       NR      Language of a work 
 n       R       Number of part/section/meeting 
@@ -3447,6 +3544,7 @@
 q       NR      Piece physical condition 
 s       R       Copyright article-fee code 
 t       NR      Copy number 
+u       R       Uniform Resource Identifier
 x       R       Nonpublic note 
 z       R       Public note 
 2       NR      Source of classification or shelving scheme 

Modified: trunk/libmarc-lint-perl/lib/MARC/Lint/CodeData.pm
URL: http://svn.debian.org/wsvn/trunk/libmarc-lint-perl/lib/MARC/Lint/CodeData.pm?rev=8073&op=diff
==============================================================================
--- trunk/libmarc-lint-perl/lib/MARC/Lint/CodeData.pm (original)
+++ trunk/libmarc-lint-perl/lib/MARC/Lint/CodeData.pm Thu Oct  4 16:24:34 2007
@@ -6,7 +6,7 @@
 #declare the necessary variables
 use vars qw($VERSION @EXPORT_OK %GeogAreaCodes %ObsoleteGeogAreaCodes %LanguageCodes %ObsoleteLanguageCodes %CountryCodes %ObsoleteCountryCodes %Sources600_651 %ObsoleteSources600_651 %Sources655 %ObsoleteSources655);
 
-$VERSION = '1.08';
+$VERSION = '1.18';
 
 use base qw(Exporter AutoLoader);
 
@@ -92,6 +92,47 @@
 
 =head1 VERSION HISTORY
 
+Version 1.18: Updated Aug. 14, 2007.
+
+ -Added new source codes from Technical Notice of Aug. 13, 2007.
+
+Version 1.17: Updated July 16, 2007.
+
+ -Added new source codes from Technical Notice of July 13, 2007.
+
+Version 1.16: Updated Apr. 18, 2007.
+
+ -Added new source codes from Technical Notice of Apr. 5, 2007.
+
+Version 1.15: Updated Feb. 28, 2007.
+
+ -Added new country and geographic codes from Technical Notice of Feb. 28, 2007.
+ -Added 'yu ' to list of obsolete codes.
+
+Version 1.14: Updated Jan. 8, 2007.
+
+ -Added new source codes from Technical Notice of Jan. 5, 2007.
+
+Version 1.13: Updated Nov. 19, 2006.
+
+ -Added new source codes from Technical Notice of Nov. 14, 2006.
+
+Version 1.12: Updated Oct. 20, 2006.
+
+ -Added new source code from Technical Notice of Oct. 19, 2006.
+
+Version 1.11: Updated Oct. 18, 2006.
+
+ -Added new source codes from Technical Notice of Oct. 17, 2006.
+
+Version 1.10: Updated Aug. 30, 2006.
+
+ -Added new source codes from Technical Notice of Aug. 29, 2006.
+
+Version 1.09: Updated June 26, 2006.
+
+ -Added new source codes from Technical Notice of June 23, 2006.
+
 Version 1.08: Updated May 30, 2006.
 
  -Added new source codes from Technical Notice of May 26, 2006.
@@ -136,7 +177,7 @@
 
 #fill the valid Geographic Area Codes hash
 
-%GeogAreaCodes = map {($_, 1)} (split "\t", ("a-af---	f------	fc-----	fe-----	fq-----	ff-----	fh-----	fs-----	fb-----	fw-----	n-us-al	n-us-ak	e-aa---	n-cn-ab	f-ae---	ea-----	sa-----	poas---	aa-----	sn-----	e-an---	f-ao---	nwxa---	a-cc-an	t------	nwaq---	nwla---	n-usa--	ma-----	ar-----	au-----	r------	s-ag---	n-us-az	n-us-ar	a-ai---	nwaw---	lsai---	u-ac---	a------	ac-----	as-----	l------	fa-----	u------	u-at---	u-at-ac	e-au---	a-aj---	lnaz---	nwbf---	a-ba---	ed-----	eb-----	a-bg---	nwbb---	a-cc-pe	e-bw---	e-be---	ncbh---	el-----	ab-----	f-dm---	lnbm---	a-bt---	mb-----	a-ccp--	s-bo---	nwbn---	a-bn---	e-bn---	f-bs---	lsbv---	s-bl---	n-cn-bc	i-bi---	nwvb---	a-bx---	e-bu---	f-uv---	a-br---	f-bd---	n-us-ca	a-cb---	f-cm---	n-cn---	nccz---	lnca---	lncv---	cc-----	poci---	ak-----	e-urk--	e-urr--	nwcj---	f-cx---	nc-----	e-urc--	f-cd---	s-cl---	a-cc---	a-cc-cq	i-xa---	i-xb---	q------	s-ck---	n-us-co	b------	i-cq---	f-cf---	f-cg---	fg-----	n-us-ct	pocw---	u-cs---	nccr---	e-ci---	nwcu---	nwco---	a-cy---	e-xr---	e-cs---	f-iv---	eo-----	zd-----	n-us-de	e-dk---	dd-----	d------	f-ft---	nwdq---	nwdr---	x------	n-usr--	ae-----	an-----	a-em---	poea---	xa-----	s-ec---	f-ua---	nces---	e-uk-en	f-eg---	f-ea---	e-er---	f-et---	me-----	e------	ec-----	ee-----	en-----	es-----	ew-----	lsfk---	lnfa---	pofj---	e-fi---	n-us-fl	e-fr---	h------	s-fg---	pofp---	a-cc-fu	f-go---	pogg---	f-gm---	a-cc-ka	awgz---	n-us-ga	a-gs---	e-gx---	e-ge---	e-gw---	f-gh---	e-gi---	e-uk---	e-uk-ui	nl-----	np-----	fr-----	e-gr---	n-gl---	nwgd---	nwgp---	pogu---	a-cc-kn	a-cc-kc	ncgt---	f-gv---	f-pg---	a-cc-kw	s-gy---	a-cc-ha	nwht---	n-us-hi	i-hm---	a-cc-hp	a-cc-he	a-cc-ho	ah-----	nwhi---	ncho---	a-cc-hk	a-cc-hh	n-cnh--	a-cc-hu	e-hu---	e-ic---	n-us-id	n-us-il	a-ii---	i------	n-us-in	ai-----	a-io---	a-cc-im	m------	c------	n-us-ia	a-ir---	a-iq---	e-ie---	a-is---	e-it---	nwjm---	lnjn---	a-ja---	a-cc-ku	a-cc-ki	a-cc-kr	poji---	a-jo---	zju----	n-us-ks	a-kz---	n-us-ky	f-ke---	poki---	pokb---	a-kr---	a-kn---	a-ko---	a-cck--	a-ku---	a-kg---	a-ls---	cl-----	e-lv---	a-le---	nwli---	f-lo---	a-cc-lp	f-lb---	f-ly---	e-lh---	poln---	e-li---	n-us-la	e-lu---	a-cc-mh	e-xn---	f-mg---	lnma---	n-us-me	f-mw---	am-----	a-my---	i-xc---	f-ml---	e-mm---	n-cn-mb	poxd---	n-cnm--	zma----	poxe---	nwmq---	n-us-md	n-us-ma	f-mu---	i-mf---	i-my---	mm-----	ag-----	pome---	zme----	n-mx---	nm-----	n-us-mi	pott---	pomi---	n-usl--	aw-----	n-usc--	poxf---	n-us-mn	n-us-ms	n-usm--	n-us-mo	n-uss--	e-mv---	e-mc---	a-mp---	n-us-mt	nwmj---	zmo----	f-mr---	f-mz---	f-sx---	ponu---	n-us-nb	a-np---	zne----	e-ne---	nwna---	n-us-nv	n-cn-nk	ponl---	n-usn--	a-nw---	n-us-nh	n-us-nj	n-us-nm	u-at-ne	n-us-ny	u-nz---	n-cn-nf	ncnq---	f-ng---	fi-----	f-nr---	fl-----	a-cc-nn	poxh---	n------	ln-----	n-us-nc	n-us-nd	pn-----	n-use--	xb-----	e-uk-ni	u-at-no	n-cn-nt	e-no---	n-cn-ns	n-cn-nu	po-----	n-us-oh	n-uso--	n-us-ok	a-mk---	n-cn-on	n-us-or	zo-----	p------	a-pk---	popl---	ncpn---	a-pp---	aopf---	s-py---	n-us-pa	ap-----	s-pe---	a-ph---	popc---	zpl----	e-pl---	pops---	e-po---	n-cnp--	n-cn-pi	nwpr---	ep-----	a-qa---	a-cc-ts	u-at-qn	n-cn-qu	mr-----	er-----	n-us-ri	sp-----	nr-----	e-rm---	e-ru---	e-ur---	e-urf--	f-rw---	i-re---	nwsd---	fd-----	nweu---	lsxj---	nwxi---	nwxk---	nwst---	n-xl---	nwxm---	pows---	posh---	e-sm---	f-sf---	n-cn-sn	zsa----	a-su---	ev-----	e-uk-st	f-sg---	i-se---	a-cc-ss	a-cc-sp	a-cc-sm	a-cc-sh	e-urs--	e-ure--	e-urw--	a-cc-sz	f-sl---	a-si---	e-xo---	e-xv---	i-xo---	zs-----	pobp---	f-so---	f-sa---	s------	az-----	ls-----	u-at-sa	n-us-sc	ao-----	n-us-sd	lsxs---	ps-----	xc-----	n-usu--	n-ust--	e-urn--	e-sp---	f-sh---	aoxp---	a-ce---	f-sj---	fn-----	fu-----	zsu----	s-sr---	lnsb---	nwsv---	f-sq---	e-sw---	e-sz---	a-sy---	a-ch---	a-ta---	f-tz---	u-at-tm	n-us-tn	i-fs---	n-us-tx	a-th---	af-----	a-cc-tn	a-cc-ti	at-----	f-tg---	potl---	poto---	nwtr---	lstd---	w------	f-ti---	a-tu---	a-tk---	nwtc---	potv---	f-ug---	e-un---	a-ts---	n-us---	nwuc---	poup---	e-uru--	zur----	s-uy---	n-us-ut	a-uz---	ponn---	e-vc---	s-ve---	zve----	n-us-vt	u-at-vi	a-vt---	nwvi---	n-us-va	e-urp--	fv-----	powk---	e-uk-wl	powf---	n-us-dc	n-us-wa	n-usp--	awba---	nw-----	n-us-wv	u-at-we	xd-----	f-ss---	nwwi---	n-us-wi	n-us-wy	a-ccs--	a-cc-su	a-ccg--	a-ccy--	ay-----	a-ye---	e-yu---	n-cn-yk	a-cc-yu	fz-----	f-za---	a-cc-ch	f-rh---	u-atc--	u-ate--	u-atn--"));
+%GeogAreaCodes = map {($_, 1)} (split "\t", ("a-af---	f------	fc-----	fe-----	fq-----	ff-----	fh-----	fs-----	fb-----	fw-----	n-us-al	n-us-ak	e-aa---	n-cn-ab	f-ae---	ea-----	sa-----	poas---	aa-----	sn-----	e-an---	f-ao---	nwxa---	a-cc-an	t------	nwaq---	nwla---	n-usa--	ma-----	ar-----	au-----	r------	s-ag---	n-us-az	n-us-ar	a-ai---	nwaw---	lsai---	u-ac---	a------	ac-----	as-----	l------	fa-----	u------	u-at---	u-at-ac	e-au---	a-aj---	lnaz---	nwbf---	a-ba---	ed-----	eb-----	a-bg---	nwbb---	a-cc-pe	e-bw---	e-be---	ncbh---	el-----	ab-----	f-dm---	lnbm---	a-bt---	mb-----	a-ccp--	s-bo---	nwbn---	a-bn---	e-bn---	f-bs---	lsbv---	s-bl---	n-cn-bc	i-bi---	nwvb---	a-bx---	e-bu---	f-uv---	a-br---	f-bd---	n-us-ca	a-cb---	f-cm---	n-cn---	nccz---	lnca---	lncv---	cc-----	poci---	ak-----	e-urk--	e-urr--	nwcj---	f-cx---	nc-----	e-urc--	f-cd---	s-cl---	a-cc---	a-cc-cq	i-xa---	i-xb---	q------	s-ck---	n-us-co	b------	i-cq---	f-cf---	f-cg---	fg-----	n-us-ct	pocw---	u-cs---	nccr---	e-ci---	nwcu---	nwco---	a-cy---	e-xr---	e-cs---	f-iv---	eo-----	zd-----	n-us-de	e-dk---	dd-----	d------	f-ft---	nwdq---	nwdr---	x------	n-usr--	ae-----	an-----	a-em---	poea---	xa-----	s-ec---	f-ua---	nces---	e-uk-en	f-eg---	f-ea---	e-er---	f-et---	me-----	e------	ec-----	ee-----	en-----	es-----	ew-----	lsfk---	lnfa---	pofj---	e-fi---	n-us-fl	e-fr---	h------	s-fg---	pofp---	a-cc-fu	f-go---	pogg---	f-gm---	a-cc-ka	awgz---	n-us-ga	a-gs---	e-gx---	e-ge---	e-gw---	f-gh---	e-gi---	e-uk---	e-uk-ui	nl-----	np-----	fr-----	e-gr---	n-gl---	nwgd---	nwgp---	pogu---	a-cc-kn	a-cc-kc	ncgt---	f-gv---	f-pg---	a-cc-kw	s-gy---	a-cc-ha	nwht---	n-us-hi	i-hm---	a-cc-hp	a-cc-he	a-cc-ho	ah-----	nwhi---	ncho---	a-cc-hk	a-cc-hh	n-cnh--	a-cc-hu	e-hu---	e-ic---	n-us-id	n-us-il	a-ii---	i------	n-us-in	ai-----	a-io---	a-cc-im	m------	c------	n-us-ia	a-ir---	a-iq---	e-ie---	a-is---	e-it---	nwjm---	lnjn---	a-ja---	a-cc-ku	a-cc-ki	a-cc-kr	poji---	a-jo---	zju----	n-us-ks	a-kz---	n-us-ky	f-ke---	poki---	pokb---	a-kr---	a-kn---	a-ko---	a-cck--	a-ku---	a-kg---	a-ls---	cl-----	e-lv---	a-le---	nwli---	f-lo---	a-cc-lp	f-lb---	f-ly---	e-lh---	poln---	e-li---	n-us-la	e-lu---	a-cc-mh	e-xn---	f-mg---	lnma---	n-us-me	f-mw---	am-----	a-my---	i-xc---	f-ml---	e-mm---	n-cn-mb	poxd---	n-cnm--	zma----	poxe---	nwmq---	n-us-md	n-us-ma	f-mu---	i-mf---	i-my---	mm-----	ag-----	pome---	zme----	n-mx---	nm-----	n-us-mi	pott---	pomi---	n-usl--	aw-----	n-usc--	poxf---	n-us-mn	n-us-ms	n-usm--	n-us-mo	n-uss--	e-mv---	e-mc---	a-mp---	n-us-mt	nwmj---	zmo----	f-mr---	f-mz---	f-sx---	ponu---	n-us-nb	a-np---	zne----	e-ne---	nwna---	n-us-nv	n-cn-nk	ponl---	n-usn--	a-nw---	n-us-nh	n-us-nj	n-us-nm	u-at-ne	n-us-ny	u-nz---	n-cn-nf	ncnq---	f-ng---	fi-----	f-nr---	fl-----	a-cc-nn	poxh---	n------	ln-----	n-us-nc	n-us-nd	pn-----	n-use--	xb-----	e-uk-ni	u-at-no	n-cn-nt	e-no---	n-cn-ns	n-cn-nu	po-----	n-us-oh	n-uso--	n-us-ok	a-mk---	n-cn-on	n-us-or	zo-----	p------	a-pk---	popl---	ncpn---	a-pp---	aopf---	s-py---	n-us-pa	ap-----	s-pe---	a-ph---	popc---	zpl----	e-pl---	pops---	e-po---	n-cnp--	n-cn-pi	nwpr---	ep-----	a-qa---	a-cc-ts	u-at-qn	n-cn-qu	mr-----	er-----	n-us-ri	sp-----	nr-----	e-rm---	e-ru---	e-ur---	e-urf--	f-rw---	i-re---	nwsd---	fd-----	nweu---	lsxj---	nwxi---	nwxk---	nwst---	n-xl---	nwxm---	pows---	posh---	e-sm---	f-sf---	n-cn-sn	zsa----	a-su---	ev-----	e-uk-st	f-sg---	i-se---	a-cc-ss	a-cc-sp	a-cc-sm	a-cc-sh	e-urs--	e-ure--	e-urw--	a-cc-sz	f-sl---	a-si---	e-xo---	e-xv---	i-xo---	zs-----	pobp---	f-so---	f-sa---	s------	az-----	ls-----	u-at-sa	n-us-sc	ao-----	n-us-sd	lsxs---	ps-----	xc-----	n-usu--	n-ust--	e-urn--	e-sp---	f-sh---	aoxp---	a-ce---	f-sj---	fn-----	fu-----	zsu----	s-sr---	lnsb---	nwsv---	f-sq---	e-sw---	e-sz---	a-sy---	a-ch---	a-ta---	f-tz---	u-at-tm	n-us-tn	i-fs---	n-us-tx	a-th---	af-----	a-cc-tn	a-cc-ti	at-----	f-tg---	potl---	poto---	nwtr---	lstd---	w------	f-ti---	a-tu---	a-tk---	nwtc---	potv---	f-ug---	e-un---	a-ts---	n-us---	nwuc---	poup---	e-uru--	zur----	s-uy---	n-us-ut	a-uz---	ponn---	e-vc---	s-ve---	zve----	n-us-vt	u-at-vi	a-vt---	nwvi---	n-us-va	e-urp--	fv-----	powk---	e-uk-wl	powf---	n-us-dc	n-us-wa	n-usp--	awba---	nw-----	n-us-wv	u-at-we	xd-----	f-ss---	nwwi---	n-us-wi	n-us-wy	a-ccs--	a-cc-su	a-ccg--	a-ccy--	ay-----	a-ye---	e-yu---	n-cn-yk	a-cc-yu	fz-----	f-za---	a-cc-ch	f-rh---	u-atc--	u-ate--	u-atn--	e-rb---	e-mo---"));
 
 #fill the obsolete Geographic Area Codes hash
 
@@ -144,7 +185,7 @@
 
 #fill the valid Language Codes hash
 
-%LanguageCodes = map {($_, 1)} (split "\t", ("   	aar	abk	ace	ach	ada	ady	afa	afh	afr	ain	aka	akk	alb	ale	alg	alt	amh	ang	anp	apa	ara	arc	arg	arm	arn	arp	art	arw	asm	ast	ath	aus	ava	ave	awa	aym	aze	bad	bai	bak	bal	bam	ban	baq	bas	bat	bej	bel	bem	ben	ber	bho	bih	bik	bin	bis	bla	bnt	bos	bra	bre	btk	bua	bug	bul	bur	byn	cad	cai	car	cat	cau	ceb	cel	cha	chb	che	chg	chi	chk	chm	chn	cho	chp	chr	chu	chv	chy	cmc	cop	cor	cos	cpe	cpf	cpp	cre	crh	crp	csb	cus	cze	dak	dan	dar	day	del	den	dgr	din	div	doi	dra	dsb	dua	dum	dut	dyu	dzo	efi	egy	eka	elx	eng	enm	epo	est	ewe	ewo	fan	fao	fat	fij	fil	fin	fiu	fon	fre	frm	fro	frr	frs	fry	ful	fur	gaa	gay	gba	gem	geo	ger	gez	gil	gla	gle	glg	glv	gmh	goh	gon	gor	got	grb	grc	gre	grn	gsw	guj	gwi	hai	hat	hau	haw	heb	her	hil	him	hin	hit	hmn	hmo	hsb	hun	hup	iba	ibo	ice	ido	iii	ijo	iku	ile	ilo	ina	inc	ind	ine	inh	ipk	ira	iro	ita	jav	jbo	jpn	jpr	jrb	kaa	kab	kac	kal	kam	kan	kar	kas	kau	kaw	kaz	kbd	kha	khi	khm	kho	kik	kin	kir	kmb	kok	kom	kon	kor	kos	kpe	krc	krl	kro	kru	kua	kum	kur	kut	lad	lah	lam	lao	lat	lav	lez	lim	lin	lit	lol	loz	ltz	lua	lub	lug	lui	lun	luo	lus	mac	mad	mag	mah	mai	mak	mal	man	mao	map	mar	mas	may	mdf	mdr	men	mga	mic	min	mis	mkh	mlg	mlt	mnc	mni	mno	moh	mol	mon	mos	mul	mun	mus	mwl	mwr	myn	myv	nah	nai	nap	nau	nav	nbl	nde	ndo	nds	nep	new	nia	nic	niu	nno	nob	nog	non	nor	nso	nub	nwc	nya	nym	nyn	nyo	nzi	oci	oji	ori	orm	osa	oss	ota	oto	paa	pag	pal	pam	pan	pap	pau	peo	per	phi	phn	pli	pol	pon	por	pra	pro	pus	que	raj	rap	rar	roa	roh	rom	rum	run	rus	sad	sag	sah	sai	sal	sam	san	sas	sat	scc	scn	sco	scr	sel	sem	sga	sgn	shn	sid	sin	sio	sit	sla	slo	slv	sma	sme	smi	smj	smn	smo	sms	sna	snd	snk	sog	som	son	sot	spa	srd	srn	srr	ssa	ssw	suk	sun	sus	sux	swa	swe	syr	tah	tai	tam	tat	tel	tem	ter	tet	tgk	tgl	tha	tib	tig	tir	tiv	tkl	tlh	tli	tmh	tog	ton	tpi	tsi	tsn	tso	tuk	tum	tup	tur	tut	tvl	twi	tyv	udm	uga	uig	ukr	umb	und	urd	uzb	vai	ven	vie	vol	vot	wak	wal	war	was	wel	wen	wln	wol	xal	xho	yao	yap	yid	yor	ypk	zap	zen	zha	znd	zul	zun	zxx"));
+%LanguageCodes = map {($_, 1)} (split "\t", ("   	aar	abk	ace	ach	ada	ady	afa	afh	afr	ain	aka	akk	alb	ale	alg	alt	amh	ang	anp	apa	ara	arc	arg	arm	arn	arp	art	arw	asm	ast	ath	aus	ava	ave	awa	aym	aze	bad	bai	bak	bal	bam	ban	baq	bas	bat	bej	bel	bem	ben	ber	bho	bih	bik	bin	bis	bla	bnt	bos	bra	bre	btk	bua	bug	bul	bur	byn	cad	cai	car	cat	cau	ceb	cel	cha	chb	che	chg	chi	chk	chm	chn	cho	chp	chr	chu	chv	chy	cmc	cop	cor	cos	cpe	cpf	cpp	cre	crh	crp	csb	cus	cze	dak	dan	dar	day	del	den	dgr	din	div	doi	dra	dsb	dua	dum	dut	dyu	dzo	efi	egy	eka	elx	eng	enm	epo	est	ewe	ewo	fan	fao	fat	fij	fil	fin	fiu	fon	fre	frm	fro	frr	frs	fry	ful	fur	gaa	gay	gba	gem	geo	ger	gez	gil	gla	gle	glg	glv	gmh	goh	gon	gor	got	grb	grc	gre	grn	gsw	guj	gwi	hai	hat	hau	haw	heb	her	hil	him	hin	hit	hmn	hmo	hsb	hun	hup	iba	ibo	ice	ido	iii	ijo	iku	ile	ilo	ina	inc	ind	ine	inh	ipk	ira	iro	ita	jav	jbo	jpn	jpr	jrb	kaa	kab	kac	kal	kam	kan	kar	kas	kau	kaw	kaz	kbd	kha	khi	khm	kho	kik	kin	kir	kmb	kok	kom	kon	kor	kos	kpe	krc	krl	kro	kru	kua	kum	kur	kut	lad	lah	lam	lao	lat	lav	lez	lim	lin	lit	lol	loz	ltz	lua	lub	lug	lui	lun	luo	lus	mac	mad	mag	mah	mai	mak	mal	man	mao	map	mar	mas	may	mdf	mdr	men	mga	mic	min	mis	mkh	mlg	mlt	mnc	mni	mno	moh	mol	mon	mos	mul	mun	mus	mwl	mwr	myn	myv	nah	nai	nap	nau	nav	nbl	nde	ndo	nds	nep	new	nia	nic	niu	nno	nob	nog	non	nor	nqo	nso	nub	nwc	nya	nym	nyn	nyo	nzi	oci	oji	ori	orm	osa	oss	ota	oto	paa	pag	pal	pam	pan	pap	pau	peo	per	phi	phn	pli	pol	pon	por	pra	pro	pus	que	raj	rap	rar	roa	roh	rom	rum	run	rus	sad	sag	sah	sai	sal	sam	san	sas	sat	scc	scn	sco	scr	sel	sem	sga	sgn	shn	sid	sin	sio	sit	sla	slo	slv	sma	sme	smi	smj	smn	smo	sms	sna	snd	snk	sog	som	son	sot	spa	srd	srn	srr	ssa	ssw	suk	sun	sus	sux	swa	swe	syr	tah	tai	tam	tat	tel	tem	ter	tet	tgk	tgl	tha	tib	tig	tir	tiv	tkl	tlh	tli	tmh	tog	ton	tpi	tsi	tsn	tso	tuk	tum	tup	tur	tut	tvl	twi	tyv	udm	uga	uig	ukr	umb	und	urd	uzb	vai	ven	vie	vol	vot	wak	wal	war	was	wel	wen	wln	wol	xal	xho	yao	yap	yid	yor	ypk	zap	zen	zha	znd	zul	zun	zxx	zza"));
 
 #fill the obsolete Language Codes hash
 
@@ -152,19 +193,19 @@
 
 #fill the valid Country Codes hash
 
-%CountryCodes = map {($_, 1)} (split "\t", ("aca	af 	alu	aku	aa 	abc	ae 	as 	an 	ao 	am 	ay 	aq 	ag 	azu	aru	ai 	aw 	at 	au 	aj 	bf 	ba 	bg 	bb 	bw 	be 	bh 	dm 	bm 	bt 	bo 	bn 	bs 	bv 	bl 	bcc	bi 	vb 	bx 	bu 	uv 	br 	bd 	cau	cb 	cm 	xxc	cv 	cj 	cx 	cd 	cl 	cc 	ch 	xa 	xb 	ck 	cou	cq 	cf 	cg 	ctu	cw 	cr 	ci 	cu 	cy 	xr 	iv 	deu	dk 	dcu	ft 	dq 	dr 	em 	ec 	ua 	es 	enk	eg 	ea 	er 	et 	fk 	fa 	fj 	fi 	flu	fr 	fg 	fp 	go 	gm 	gz 	gau	gs 	gw 	gh 	gi 	gr 	gl 	gd 	gp 	gu 	gt 	gv 	pg 	gy 	ht 	hiu	hm 	ho 	hu 	ic 	idu	ilu	ii 	inu	io 	iau	ir 	iq 	iy 	ie 	is 	it 	jm 	ja 	ji 	jo 	ksu	kz 	kyu	ke 	gb 	kn 	ko 	ku 	kg 	ls 	lv 	le 	lo 	lb 	ly 	lh 	li 	lau	lu 	xn 	mg 	meu	mw 	my 	xc 	ml 	mm 	mbc	xe 	mq 	mdu	mau	mu 	mf 	ot 	mx 	miu	fm 	xf 	mnu	msu	mou	mv 	mc 	mp 	mtu	mj 	mr 	mz 	sx 	nu 	nbu	np 	ne 	na 	nvu	nkc	nl 	nhu	nju	nmu	nyu	nz 	nfc	nq 	ng 	nr 	xh 	xx 	nx 	ncu	ndu	nik	nw 	ntc	no 	nsc	nuc	ohu	oku	mk 	onc	oru	pk 	pw 	pn 	pp 	pf 	py 	pau	pe 	ph 	pc 	pl 	po 	pic	pr 	qa 	qea	quc	riu	rm 	ru 	rw 	re 	xj 	xd 	xk 	xl 	xm 	ws 	sm 	sf 	snc	su 	stk	sg 	yu 	se 	sl 	si 	xo 	xv 	bp 	so 	sa 	scu	sdu	xs 	sp 	sh 	xp 	ce 	sj 	sr 	sq 	sw 	sz 	sy 	ta 	tz 	tnu	fs 	txu	th 	tg 	tl 	tma	to 	tr 	ti 	tu 	tk 	tc 	tv 	ug 	un 	ts 	xxk	uik	xxu	uc 	up 	uy 	utu	uz 	nn 	vp 	vc 	ve 	vtu	vm 	vi 	vau	vra	wea	wk 	wlk	wf 	wau	wj 	wvu	ss 	wiu	wyu	xga	xna	xoa	xra	ye 	ykc	za 	rh "));
+%CountryCodes = map {($_, 1)} (split "\t", ("aca	af 	alu	aku	aa 	abc	ae 	as 	an 	ao 	am 	ay 	aq 	ag 	azu	aru	ai 	aw 	at 	au 	aj 	bf 	ba 	bg 	bb 	bw 	be 	bh 	dm 	bm 	bt 	bo 	bn 	bs 	bv 	bl 	bcc	bi 	vb 	bx 	bu 	uv 	br 	bd 	cau	cb 	cm 	xxc	cv 	cj 	cx 	cd 	cl 	cc 	ch 	xa 	xb 	ck 	cou	cq 	cf 	cg 	ctu	cw 	cr 	ci 	cu 	cy 	xr 	iv 	deu	dk 	dcu	ft 	dq 	dr 	em 	ec 	ua 	es 	enk	eg 	ea 	er 	et 	fk 	fa 	fj 	fi 	flu	fr 	fg 	fp 	go 	gm 	gz 	gau	gs 	gw 	gh 	gi 	gr 	gl 	gd 	gp 	gu 	gt 	gv 	pg 	gy 	ht 	hiu	hm 	ho 	hu 	ic 	idu	ilu	ii 	inu	io 	iau	ir 	iq 	iy 	ie 	is 	it 	jm 	ja 	ji 	jo 	ksu	kz 	kyu	ke 	gb 	kn 	ko 	ku 	kg 	ls 	lv 	le 	lo 	lb 	ly 	lh 	li 	lau	lu 	xn 	mg 	meu	mw 	my 	xc 	ml 	mm 	mbc	xe 	mq 	mdu	mau	mu 	mf 	ot 	mx 	miu	fm 	xf 	mnu	msu	mou	mv 	mc 	mp 	mtu	mj 	mr 	mz 	sx 	nu 	nbu	np 	ne 	na 	nvu	nkc	nl 	nhu	nju	nmu	nyu	nz 	nfc	nq 	ng 	nr 	xh 	xx 	nx 	ncu	ndu	nik	nw 	ntc	no 	nsc	nuc	ohu	oku	mk 	onc	oru	pk 	pw 	pn 	pp 	pf 	py 	pau	pe 	ph 	pc 	pl 	po 	pic	pr 	qa 	qea	quc	riu	rm 	ru 	rw 	re 	xj 	xd 	xk 	xl 	xm 	ws 	sm 	sf 	snc	su 	stk	sg 	rb 	mo 	se 	sl 	si 	xo 	xv 	bp 	so 	sa 	scu	sdu	xs 	sp 	sh 	xp 	ce 	sj 	sr 	sq 	sw 	sz 	sy 	ta 	tz 	tnu	fs 	txu	th 	tg 	tl 	tma	to 	tr 	ti 	tu 	tk 	tc 	tv 	ug 	un 	ts 	xxk	uik	xxu	uc 	up 	uy 	utu	uz 	nn 	vp 	vc 	ve 	vtu	vm 	vi 	vau	vra	wea	wk 	wlk	wf 	wau	wj 	wvu	ss 	wiu	wyu	xga	xna	xoa	xra	ye 	ykc	za 	rh "));
 
 #fill the obsolete Country Codes hash
 
-%ObsoleteCountryCodes = map {($_, 1)} (split "\t", ("ai 	air	ac 	ajr	bwr	cn 	cz 	cp 	ln 	cs 	err	gsr	ge 	gn 	hk 	iw 	iu 	jn 	kzr	kgr	lvr	lir	mh 	mvr	nm 	pt 	rur	ry 	xi 	sk 	xxr	sb 	sv 	tar	tt 	tkr	unr	uk 	ui 	us 	uzr	vn 	vs 	wb 	ys "));
-
-%Sources600_651 = map {($_, 1)} (split "\t", ("aass	aat	abne	agrifors	agrovoc	agrovocf	agrovocs	albt	allars	amg	apaist	asft	asth	atla	barn	bella	bet	bhammf	bhashe	bicssc	bidex	blmlsh	bt	cabt	cash	cct	ccte	cctf	ceeus	cht	ciesiniv	cilla	csahssa	csalsct	csapa	csh	cstud	dacs	dcs	ddcrit	dissao	dit	drama	dtict	ebfem	eclas	eks	ericd	est	fast	fgtpcm	fire	fmesh	fnhl	francis	galestne	gem	georeft	gtt	hapi	hkcan	helecon	henn	hlasstg	huc	iaat	ica	icpsr	idas	iescs	iest	ilot	ilpt	inist	inspect	ipat	ipsp	isis	itoamc	itrt	jhpb	jhpk	jlabsh	kaa	kao	kaunokki	kdm	kitu	kssbar	kta	ktpt	ktta	kula	kupu	lacnaf	larpcal	lcsh	lcshac	lctgm	lemac	lemb	liv	lnmmbr	local	ltcsh	lua	maaq	mar	masa	mesh	mipfesd	mmm	mpirdes	mtirdes	musa	nal	nalnaf	nasat	ncjt	ndllsh	nicem	nimacsc	nlmnaf	ntcpsc	ntcsd	ntissc	nznb	ogst	opms	pascal	peri	pha	pmbok	pmcsg	poliscit	popinte	precis	prvt	psychit	qrma	qrmak	raam	ram	rasuqam	renib	reo	rero	rerovoc	reveal	rma	rpe	rswk	rugeo	rurkp	rvm	sao	sbiao	scgdst	scisshl	scot	sears	sfit	sgc	sgce	shbe	she	sigle	sipri	sk	slem	smda	sosa	swd	swemesh	taika	taxhs	tbit	test	tgn	thub	tlka	tlsh	toit	trt	trtsa	tsht	ttka	ulan	umitrist	unbisn	unbist	unescot	usaidt	vmj	waqaf	watrest	wgst	wot	wpicsh	ysa"));
+%ObsoleteCountryCodes = map {($_, 1)} (split "\t", ("ai 	air	ac 	ajr	bwr	cn 	cz 	cp 	ln 	cs 	err	gsr	ge 	gn 	hk 	iw 	iu 	jn 	kzr	kgr	lvr	lir	mh 	mvr	nm 	pt 	rur	ry 	xi 	sk 	xxr	sb 	sv 	tar	tt 	tkr	unr	uk 	ui 	us 	uzr	vn 	vs 	wb 	ys 	yu "));
+
+%Sources600_651 = map {($_, 1)} (split "\t", ("aass	aat	abne	agrifors	agrovoc	agrovocf	agrovocs	aktp	albt	allars	amg	apaist	asft	asth	atla	aucsh	barn	bella	bet	bgtchm	bhammf	bhashe	bibalex	biccbmc	bicssc	bidex	blmlsh	bt	cabt	cash	cct	ccte	cctf	ceeus	cht	ciesiniv	cilla	conorsi	csahssa	csalsct	csapa	csh	csht	cstud	czenas	dacs	dcs	ddcrit	dissao	dit	drama	dtict	ebfem	eclas	eks	ericd	est	fast	fgtpcm	finmesh	fire	fmesh	fnhl	francis	galestne	gem	georeft	gst	gtt	hapi	hkcan	helecon	henn	hlasstg	hoidokki	huc	iaat	ica	icpsr	idas	iescs	iest	ilot	ilpt	inist	inspect	ipat	ipsp	isis	itglit	itoamc	itrt	jhpb	jhpk	jlabsh	kaa	kao	kaunokki	kdm	kitu	kkts	kssbar	kta	ktpt	ktta	kula	kupu	lacnaf	larpcal	lcsh	lcshac	lcstt	lctgm	lemac	lemb	liv	lnmmbr	local	ltcsh	lua	maaq	mar	masa	mesh	mipfesd	mmm	mpirdes	mtirdes	musa	muzeukc	muzeukn	muzeukv	nal	nalnaf	nasat	ncjt	ndllsh	nicem	nimacsc	nlgaf	nlgkk	nlgsh	nlmnaf	ntcpsc	ntcsd	ntissc	nznb	ogst	onet	opms	pascal	peri	pha	pmbok	pmcsg	poliscit	popinte	precis	prvt	psychit	qrma	qrmak	qtglit	raam	ram	rasuqam	renib	reo	rero	rerovoc	reveal	rma	rpe	rswk	rugeo	rurkp	rvm	sao	sbiao	scgdst	scisshl	scot	sears	sfit	sgc	sgce	shbe	she	sigle	sipri	sk	slem	smda	snt	socio	sosa	spines	swd	swemesh	taika	taxhs	tbit	tesa	test	tgn	tho	thub	tlka	tlsh	toit	trt	trtsa	tsht	ttka	ulan	umitrist	unbisn	unbist	unescot	usaidt	vmj	waqaf	watrest	wgst	wot	wpicsh	ysa"));
 
 #The codes cash, lcsh, lcshac, mesh, nal, and rvm are covered by 2nd indicators in 600-655
 #they are only used when indicators are not available
 %ObsoleteSources600_651 = map {($_, 1)} (split "\t", ("cash	lcsh	lcshac	mesh	nal	reroa	rvm"));
 
-%Sources655 = map {($_, 1)} (split "\t", ("	aat	amg	asth	barn	bt	cash	cct	dacs	dcs	dct	ericd	estc	fast	fbg	fire	galestne	gem	gmgpc	gsafd	gtlm	hapi	hkcan	ica	ilot	itrt	jhpb	jhpk	lacnaf	lcsh	lcshac	lctgm	lemac	local	maaq	mar	marcgt	mesh	migfg	mim	nal	nalnaf	ngl	nimafc	nlmnaf	nmc	nznb	opms	pmcsg	qrmak	raam	radfg	rbbin	rbgenr	rbpap	rbpri	rbprov	rbpub	rbtyp	reo	rerovoc	reveal	rma	rugeo	rvm	sao	sears	sgc	sgce	sgp	sipri	swemesh	tbit	thub	toit	tsht	ulan	vmj	waqaf"));
+%Sources655 = map {($_, 1)} (split "\t", ("aat	aktp	amg	asth	aucsh	barn	bibalex	biccbmc	bgtchm	bt	cash	cct	conorsi	csht	czenas	dacs	dcs	dct	ericd	estc	fast	fbg	finmesh	fire	galestne	gem	gmgpc	gsafd	gst	gtlm	hapi	hkcan	hoidokki	ica	ilot	itglit	itrt	jhpb	jhpk	kkts	lacnaf	lcsh	lcshac	lcstt	lctgm	lemac	local	maaq	mar	marcgt	mesh	migfg	mim	muzeukc	muzeukn	muzeukv	nal	nalnaf	ngl	nimafc	nlgaf	nlgkk	nlgsh	nlmnaf	nmc	nznb	onet	opms	pmcsg	qrmak	qtglit	raam	radfg	rbbin	rbgenr	rbpap	rbpri	rbprov	rbpub	rbtyp	reo	rerovoc	reveal	rma	rugeo	rvm	sao	sears	sgc	sgce	sgp	sipri	snt	socio	spines	swemesh	tbit	tesa	tho	thub	toit	tsht	ulan	vmj	waqaf"));
 
 #The codes cash, lcsh, lcshac, mesh, nal, and rvm are covered by 2nd indicators in 600-655
 #they are only used when indicators are not available
@@ -184,7 +225,7 @@
 Bryan Baldus
 eijabb at cpan.org
 
-Copyright (c) 2004-2006.
+Copyright (c) 2004-2007.
 
 =cut
 

Modified: trunk/libmarc-lint-perl/t/check245.t
URL: http://svn.debian.org/wsvn/trunk/libmarc-lint-perl/t/check245.t?rev=8073&op=diff
==============================================================================
--- trunk/libmarc-lint-perl/t/check245.t (original)
+++ trunk/libmarc-lint-perl/t/check245.t Thu Oct  4 16:24:34 2007
@@ -5,7 +5,7 @@
 
 use strict;
 use warnings;
-use Test::More tests=>55;
+use Test::More tests=>60;
 
 BEGIN { use_ok( 'MARC::Field' ); }
 BEGIN { use_ok( 'MARC::Lint' ); }
@@ -44,6 +44,11 @@
     [245, '0', '2', 'a', 'An article.'],
     [245, '0', '0', 'a', "L\'article."],
     [245, '0', '2', 'a', 'A la mode.'],
+    [245, '0', '5', 'a', 'The "quoted article".'],
+    [245, '0', '5', 'a', 'The (parenthetical article).'],
+    [245, '0', '6', 'a', '(The) article in parentheses).'],
+    [245, '0', '9', 'a', "\"(The)\" \'article\' in quotes and parentheses)."],
+    [245, '0', '5', 'a', '[The supplied title].'],
 
 
 );




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