From 74c0af57bcb19df854a502be60227f3d132c68c5 Mon Sep 17 00:00:00 2001 From: Gabriel Farrell Date: Tue, 19 Feb 2008 16:17:16 -0500 Subject: [PATCH] got rid of trunk, branches, and tags --- trunk/Changes => Changes | 0 tags/rel-0.6/MANIFEST.in => MANIFEST.in | 0 tags/rel-1.4/README => README | 0 tags/rel-0.9/ez_setup.py => ez_setup.py | 0 {trunk/pymarc => pymarc}/__init__.py | 0 {trunk/pymarc => pymarc}/constants.py | 0 {trunk/pymarc => pymarc}/exceptions.py | 0 {trunk/pymarc => pymarc}/field.py | 0 {trunk/pymarc => pymarc}/marc8.py | 0 {trunk/pymarc => pymarc}/marc8_mapping.py | 0 {trunk/pymarc => pymarc}/marcxml.py | 0 {trunk/pymarc => pymarc}/reader.py | 0 {trunk/pymarc => pymarc}/record.py | 0 {trunk/pymarc => pymarc}/writer.py | 0 trunk/setup.py => setup.py | 0 tags/rel-0.6/Changes | 28 - tags/rel-0.6/README | 30 - tags/rel-0.6/pymarc/__init__.py | 71 - tags/rel-0.6/pymarc/constants.py | 7 - tags/rel-0.6/pymarc/exceptions.py | 30 - tags/rel-0.6/pymarc/field.py | 118 -- tags/rel-0.6/pymarc/reader.py | 58 - tags/rel-0.6/pymarc/record.py | 255 ---- tags/rel-0.6/pymarc/writer.py | 46 - tags/rel-0.6/setup.py | 35 - tags/rel-0.6/test.py | 19 - tags/rel-0.6/test/__init__.py | 3 - tags/rel-0.6/test/encode.py | 25 - tags/rel-0.6/test/field.py | 68 - tags/rel-0.6/test/reader.py | 44 - tags/rel-0.6/test/record.py | 99 -- tags/rel-0.6/test/util.py | 4 - tags/rel-0.6/test/writer.py | 27 - tags/rel-0.7/Changes | 31 - tags/rel-0.7/MANIFEST.in | 3 - tags/rel-0.7/README | 30 - tags/rel-0.7/pymarc/__init__.py | 71 - tags/rel-0.7/pymarc/constants.py | 7 - tags/rel-0.7/pymarc/exceptions.py | 30 - tags/rel-0.7/pymarc/field.py | 127 -- tags/rel-0.7/pymarc/reader.py | 58 - tags/rel-0.7/pymarc/record.py | 255 ---- tags/rel-0.7/pymarc/writer.py | 46 - tags/rel-0.7/setup.py | 35 - tags/rel-0.7/test.py | 19 - tags/rel-0.7/test/__init__.py | 3 - tags/rel-0.7/test/encode.py | 25 - tags/rel-0.7/test/field.py | 73 - tags/rel-0.7/test/marc.dat | 1 - tags/rel-0.7/test/one.dat | 1 - tags/rel-0.7/test/reader.py | 44 - tags/rel-0.7/test/record.py | 99 -- tags/rel-0.7/test/test.dat | 1 - tags/rel-0.7/test/util.py | 4 - tags/rel-0.7/test/writer.py | 27 - tags/rel-0.8/Changes | 46 - tags/rel-0.8/MANIFEST.in | 3 - tags/rel-0.8/README | 30 - tags/rel-0.8/pymarc/__init__.py | 71 - tags/rel-0.8/pymarc/constants.py | 7 - tags/rel-0.8/pymarc/exceptions.py | 30 - tags/rel-0.8/pymarc/field.py | 127 -- tags/rel-0.8/pymarc/reader.py | 56 - tags/rel-0.8/pymarc/record.py | 255 ---- tags/rel-0.8/pymarc/writer.py | 49 - tags/rel-0.8/setup.py | 35 - tags/rel-0.8/test.py | 19 - tags/rel-0.8/test/__init__.py | 3 - tags/rel-0.8/test/encode.py | 25 - tags/rel-0.8/test/field.py | 73 - tags/rel-0.8/test/marc.dat | 1 - tags/rel-0.8/test/one.dat | 1 - tags/rel-0.8/test/reader.py | 45 - tags/rel-0.8/test/record.py | 99 -- tags/rel-0.8/test/test.dat | 1 - tags/rel-0.8/test/util.py | 4 - tags/rel-0.8/test/writer.py | 27 - tags/rel-0.81/Changes | 50 - tags/rel-0.81/MANIFEST.in | 3 - tags/rel-0.81/README | 30 - tags/rel-0.81/pymarc/__init__.py | 71 - tags/rel-0.81/pymarc/constants.py | 7 - tags/rel-0.81/pymarc/exceptions.py | 30 - tags/rel-0.81/pymarc/field.py | 127 -- tags/rel-0.81/pymarc/reader.py | 56 - tags/rel-0.81/pymarc/record.py | 258 ---- tags/rel-0.81/pymarc/writer.py | 49 - tags/rel-0.81/setup.py | 35 - tags/rel-0.81/test.py | 19 - tags/rel-0.81/test/__init__.py | 3 - tags/rel-0.81/test/encode.py | 25 - tags/rel-0.81/test/field.py | 73 - tags/rel-0.81/test/marc.dat | 1 - tags/rel-0.81/test/one.dat | 1 - tags/rel-0.81/test/reader.py | 45 - tags/rel-0.81/test/record.py | 101 -- tags/rel-0.81/test/test.dat | 1 - tags/rel-0.81/test/util.py | 4 - tags/rel-0.81/test/writer.py | 27 - tags/rel-0.85/Changes | 54 - tags/rel-0.85/MANIFEST.in | 3 - tags/rel-0.85/README | 30 - tags/rel-0.85/pymarc/__init__.py | 71 - tags/rel-0.85/pymarc/constants.py | 7 - tags/rel-0.85/pymarc/exceptions.py | 30 - tags/rel-0.85/pymarc/field.py | 127 -- tags/rel-0.85/pymarc/reader.py | 56 - tags/rel-0.85/pymarc/record.py | 258 ---- tags/rel-0.85/pymarc/writer.py | 49 - tags/rel-0.85/setup.py | 35 - tags/rel-0.85/test.py | 19 - tags/rel-0.85/test/__init__.py | 3 - tags/rel-0.85/test/encode.py | 25 - tags/rel-0.85/test/field.py | 73 - tags/rel-0.85/test/marc.dat | 1 - tags/rel-0.85/test/one.dat | 1 - tags/rel-0.85/test/reader.py | 45 - tags/rel-0.85/test/record.py | 101 -- tags/rel-0.85/test/test.dat | 1 - tags/rel-0.85/test/util.py | 4 - tags/rel-0.85/test/writer.py | 27 - tags/rel-0.9/Changes | 58 - tags/rel-0.9/MANIFEST.in | 3 - tags/rel-0.9/README | 30 - tags/rel-0.9/pymarc/__init__.py | 71 - tags/rel-0.9/pymarc/constants.py | 7 - tags/rel-0.9/pymarc/exceptions.py | 30 - tags/rel-0.9/pymarc/field.py | 127 -- tags/rel-0.9/pymarc/reader.py | 56 - tags/rel-0.9/pymarc/record.py | 253 ---- tags/rel-0.9/pymarc/writer.py | 49 - tags/rel-0.9/setup.py | 40 - tags/rel-0.9/test.py | 19 - tags/rel-0.9/test/__init__.py | 3 - tags/rel-0.9/test/encode.py | 25 - tags/rel-0.9/test/field.py | 73 - tags/rel-0.9/test/marc.dat | 1 - tags/rel-0.9/test/one.dat | 1 - tags/rel-0.9/test/reader.py | 45 - tags/rel-0.9/test/record.py | 101 -- tags/rel-0.9/test/test.dat | 1 - tags/rel-0.9/test/util.py | 4 - tags/rel-0.9/test/writer.py | 31 - tags/rel-1.1/Changes | 80 -- tags/rel-1.1/MANIFEST.in | 3 - tags/rel-1.1/README | 29 - tags/rel-1.1/ez_setup.py | 228 --- tags/rel-1.1/pymarc/__init__.py | 72 - tags/rel-1.1/pymarc/constants.py | 7 - tags/rel-1.1/pymarc/exceptions.py | 30 - tags/rel-1.1/pymarc/field.py | 162 --- tags/rel-1.1/pymarc/marc8.py | 101 -- tags/rel-1.1/pymarc/marc8_mapping.py | 0 tags/rel-1.1/pymarc/reader.py | 56 - tags/rel-1.1/pymarc/record.py | 289 ---- tags/rel-1.1/pymarc/writer.py | 49 - tags/rel-1.1/setup.py | 39 - tags/rel-1.1/test.py | 19 - tags/rel-1.1/test/bad.dat | 191 --- tags/rel-1.1/test/encode.py | 25 - tags/rel-1.1/test/field.py | 103 -- tags/rel-1.1/test/marc.dat | 1 - tags/rel-1.1/test/marc8.py | 20 - tags/rel-1.1/test/one.dat | 1 - tags/rel-1.1/test/reader.py | 45 - tags/rel-1.1/test/record.py | 178 --- tags/rel-1.1/test/test.dat | 1 - tags/rel-1.1/test/util.py | 4 - tags/rel-1.1/test/writer.py | 31 - tags/rel-1.2/Changes | 90 -- tags/rel-1.2/MANIFEST.in | 3 - tags/rel-1.2/README | 29 - tags/rel-1.2/ez_setup.py | 228 --- tags/rel-1.2/pymarc/__init__.py | 73 - tags/rel-1.2/pymarc/constants.py | 7 - tags/rel-1.2/pymarc/exceptions.py | 30 - tags/rel-1.2/pymarc/field.py | 167 --- tags/rel-1.2/pymarc/marc8.py | 101 -- tags/rel-1.2/pymarc/marc8_mapping.py | 0 tags/rel-1.2/pymarc/marcxml.py | 84 -- tags/rel-1.2/pymarc/reader.py | 56 - tags/rel-1.2/pymarc/record.py | 289 ---- tags/rel-1.2/pymarc/writer.py | 49 - tags/rel-1.2/setup.py | 39 - tags/rel-1.2/test.py | 19 - tags/rel-1.2/test/__init__.py | 4 - tags/rel-1.2/test/bad.dat | 191 --- tags/rel-1.2/test/encode.py | 25 - tags/rel-1.2/test/field.py | 103 -- tags/rel-1.2/test/marc.dat | 1 - tags/rel-1.2/test/marc8.py | 20 - tags/rel-1.2/test/one.dat | 1 - tags/rel-1.2/test/reader.py | 45 - tags/rel-1.2/test/record.py | 178 --- tags/rel-1.2/test/test.dat | 1 - tags/rel-1.2/test/test_marc8.txt | 1514 -------------------- tags/rel-1.2/test/test_utf8.txt | 1514 -------------------- tags/rel-1.2/test/util.py | 4 - tags/rel-1.2/test/writer.py | 31 - tags/rel-1.2/test/xml_test.py | 28 - tags/rel-1.4/Changes | 96 -- tags/rel-1.4/MANIFEST.in | 3 - tags/rel-1.4/ez_setup.py | 228 --- tags/rel-1.4/pymarc/__init__.py | 73 - tags/rel-1.4/pymarc/constants.py | 7 - tags/rel-1.4/pymarc/exceptions.py | 30 - tags/rel-1.4/pymarc/field.py | 167 --- tags/rel-1.4/pymarc/marc8.py | 101 -- tags/rel-1.4/pymarc/marc8_mapping.py | 0 tags/rel-1.4/pymarc/marcxml.py | 100 -- tags/rel-1.4/pymarc/reader.py | 56 - tags/rel-1.4/pymarc/record.py | 289 ---- tags/rel-1.4/pymarc/writer.py | 49 - tags/rel-1.4/setup.py | 39 - tags/rel-1.4/test.py | 19 - tags/rel-1.4/test/__init__.py | 4 - tags/rel-1.4/test/bad.dat | 191 --- tags/rel-1.4/test/batch.xml | 157 -- tags/rel-1.4/test/encode.py | 25 - tags/rel-1.4/test/field.py | 103 -- tags/rel-1.4/test/marc.dat | 1 - tags/rel-1.4/test/marc8.py | 20 - tags/rel-1.4/test/one.dat | 1 - tags/rel-1.4/test/reader.py | 45 - tags/rel-1.4/test/record.py | 178 --- tags/rel-1.4/test/test.dat | 1 - tags/rel-1.4/test/test_marc8.txt | 1514 -------------------- tags/rel-1.4/test/test_utf8.txt | 1514 -------------------- tags/rel-1.4/test/util.py | 4 - tags/rel-1.4/test/writer.py | 31 - tags/rel-1.4/test/xml_test.py | 40 - tags/rel-1.5/Changes | 100 -- tags/rel-1.5/MANIFEST.in | 3 - tags/rel-1.5/README | 30 - tags/rel-1.5/ez_setup.py | 228 --- tags/rel-1.5/pymarc/__init__.py | 73 - tags/rel-1.5/pymarc/constants.py | 7 - tags/rel-1.5/pymarc/exceptions.py | 30 - tags/rel-1.5/pymarc/field.py | 167 --- tags/rel-1.5/pymarc/marc8.py | 101 -- tags/rel-1.5/pymarc/marc8_mapping.py | 0 tags/rel-1.5/pymarc/marcxml.py | 136 -- tags/rel-1.5/pymarc/reader.py | 56 - tags/rel-1.5/pymarc/record.py | 289 ---- tags/rel-1.5/pymarc/writer.py | 49 - tags/rel-1.5/setup.py | 39 - tags/rel-1.5/test.py | 19 - tags/rel-1.5/test/__init__.py | 4 - tags/rel-1.5/test/bad.dat | 191 --- tags/rel-1.5/test/batch.xml | 157 -- tags/rel-1.5/test/encode.py | 25 - tags/rel-1.5/test/field.py | 103 -- tags/rel-1.5/test/marc.dat | 1 - tags/rel-1.5/test/marc8.py | 20 - tags/rel-1.5/test/one.dat | 1 - tags/rel-1.5/test/reader.py | 45 - tags/rel-1.5/test/record.py | 178 --- tags/rel-1.5/test/test.dat | 1 - tags/rel-1.5/test/test_marc8.txt | 1514 -------------------- tags/rel-1.5/test/test_utf8.txt | 1514 -------------------- tags/rel-1.5/test/util.py | 4 - tags/rel-1.5/test/writer.py | 31 - tags/rel-1.5/test/xml_test.py | 66 - tags/rel-1.6/Changes | 103 -- tags/rel-1.6/MANIFEST.in | 3 - tags/rel-1.6/README | 30 - tags/rel-1.6/ez_setup.py | 228 --- tags/rel-1.6/pymarc/__init__.py | 73 - tags/rel-1.6/pymarc/constants.py | 7 - tags/rel-1.6/pymarc/exceptions.py | 30 - tags/rel-1.6/pymarc/field.py | 167 --- tags/rel-1.6/pymarc/marc8.py | 103 -- tags/rel-1.6/pymarc/marc8_mapping.py | 0 tags/rel-1.6/pymarc/marcxml.py | 136 -- tags/rel-1.6/pymarc/reader.py | 56 - tags/rel-1.6/pymarc/record.py | 289 ---- tags/rel-1.6/pymarc/writer.py | 49 - tags/rel-1.6/setup.py | 39 - tags/rel-1.6/test.py | 19 - tags/rel-1.6/test/__init__.py | 4 - tags/rel-1.6/test/bad.dat | 191 --- tags/rel-1.6/test/batch.xml | 157 -- tags/rel-1.6/test/encode.py | 25 - tags/rel-1.6/test/field.py | 103 -- tags/rel-1.6/test/marc.dat | 1 - tags/rel-1.6/test/marc8.py | 20 - tags/rel-1.6/test/one.dat | 1 - tags/rel-1.6/test/reader.py | 45 - tags/rel-1.6/test/record.py | 178 --- tags/rel-1.6/test/test.dat | 1 - tags/rel-1.6/test/test_marc8.txt | 1514 -------------------- tags/rel-1.6/test/test_utf8.txt | 1514 -------------------- tags/rel-1.6/test/util.py | 4 - tags/rel-1.6/test/writer.py | 31 - tags/rel-1.6/test/xml_test.py | 66 - tags/rel-1.7/Changes | 108 -- tags/rel-1.7/MANIFEST.in | 3 - tags/rel-1.7/README | 30 - tags/rel-1.7/ez_setup.py | 228 --- tags/rel-1.7/pymarc/__init__.py | 75 - tags/rel-1.7/pymarc/constants.py | 7 - tags/rel-1.7/pymarc/exceptions.py | 30 - tags/rel-1.7/pymarc/field.py | 167 --- tags/rel-1.7/pymarc/marc8.py | 112 -- tags/rel-1.7/pymarc/marc8_mapping.py | 0 tags/rel-1.7/pymarc/marcxml.py | 136 -- tags/rel-1.7/pymarc/reader.py | 56 - tags/rel-1.7/pymarc/record.py | 289 ---- tags/rel-1.7/pymarc/writer.py | 49 - tags/rel-1.7/setup.py | 28 - tags/rel-1.7/test.py | 19 - tags/rel-1.7/test/__init__.py | 4 - tags/rel-1.7/test/bad.dat | 191 --- tags/rel-1.7/test/batch.xml | 157 -- tags/rel-1.7/test/encode.py | 25 - tags/rel-1.7/test/field.py | 103 -- tags/rel-1.7/test/marc.dat | 1 - tags/rel-1.7/test/marc8.py | 20 - tags/rel-1.7/test/one.dat | 1 - tags/rel-1.7/test/reader.py | 45 - tags/rel-1.7/test/record.py | 178 --- tags/rel-1.7/test/test.dat | 1 - tags/rel-1.7/test/test_marc8.txt | 1514 -------------------- tags/rel-1.7/test/test_utf8.txt | 1514 -------------------- tags/rel-1.7/test/util.py | 4 - tags/rel-1.7/test/writer.py | 31 - tags/rel-1.7/test/xml_test.py | 66 - trunk/test.py => test.py | 0 {tags/rel-1.1/test => test}/__init__.py | 0 {tags/rel-0.9/test => test}/bad.dat | 0 {tags/rel-1.2/test => test}/batch.xml | 0 {trunk/test => test}/encode.py | 0 {trunk/test => test}/field.py | 0 {tags/rel-0.6/test => test}/marc.dat | 0 {trunk/test => test}/marc8.py | 0 {tags/rel-0.6/test => test}/one.dat | 0 {trunk/test => test}/reader.py | 0 {trunk/test => test}/record.py | 0 {tags/rel-0.6/test => test}/test.dat | 0 {tags/rel-1.1/test => test}/test_marc8.txt | 0 {tags/rel-1.1/test => test}/test_utf8.txt | 0 {trunk/test => test}/util.py | 0 {trunk/test => test}/writer.py | 0 {trunk/test => test}/xml_test.py | 0 trunk/MANIFEST.in | 3 - trunk/README | 30 - trunk/ez_setup.py | 228 --- trunk/test/__init__.py | 4 - trunk/test/bad.dat | 191 --- trunk/test/batch.xml | 157 -- trunk/test/marc.dat | 1 - trunk/test/one.dat | 1 - trunk/test/test.dat | 1 - trunk/test/test_marc8.txt | 1514 -------------------- trunk/test/test_utf8.txt | 1514 -------------------- 355 files changed, 37007 deletions(-) rename trunk/Changes => Changes (100%) rename tags/rel-0.6/MANIFEST.in => MANIFEST.in (100%) rename tags/rel-1.4/README => README (100%) rename tags/rel-0.9/ez_setup.py => ez_setup.py (100%) rename {trunk/pymarc => pymarc}/__init__.py (100%) rename {trunk/pymarc => pymarc}/constants.py (100%) rename {trunk/pymarc => pymarc}/exceptions.py (100%) rename {trunk/pymarc => pymarc}/field.py (100%) rename {trunk/pymarc => pymarc}/marc8.py (100%) rename {trunk/pymarc => pymarc}/marc8_mapping.py (100%) rename {trunk/pymarc => pymarc}/marcxml.py (100%) rename {trunk/pymarc => pymarc}/reader.py (100%) rename {trunk/pymarc => pymarc}/record.py (100%) rename {trunk/pymarc => pymarc}/writer.py (100%) rename trunk/setup.py => setup.py (100%) delete mode 100644 tags/rel-0.6/Changes delete mode 100644 tags/rel-0.6/README delete mode 100644 tags/rel-0.6/pymarc/__init__.py delete mode 100644 tags/rel-0.6/pymarc/constants.py delete mode 100644 tags/rel-0.6/pymarc/exceptions.py delete mode 100644 tags/rel-0.6/pymarc/field.py delete mode 100644 tags/rel-0.6/pymarc/reader.py delete mode 100644 tags/rel-0.6/pymarc/record.py delete mode 100644 tags/rel-0.6/pymarc/writer.py delete mode 100644 tags/rel-0.6/setup.py delete mode 100644 tags/rel-0.6/test.py delete mode 100644 tags/rel-0.6/test/__init__.py delete mode 100644 tags/rel-0.6/test/encode.py delete mode 100644 tags/rel-0.6/test/field.py delete mode 100644 tags/rel-0.6/test/reader.py delete mode 100644 tags/rel-0.6/test/record.py delete mode 100644 tags/rel-0.6/test/util.py delete mode 100644 tags/rel-0.6/test/writer.py delete mode 100644 tags/rel-0.7/Changes delete mode 100644 tags/rel-0.7/MANIFEST.in delete mode 100644 tags/rel-0.7/README delete mode 100644 tags/rel-0.7/pymarc/__init__.py delete mode 100644 tags/rel-0.7/pymarc/constants.py delete mode 100644 tags/rel-0.7/pymarc/exceptions.py delete mode 100644 tags/rel-0.7/pymarc/field.py delete mode 100644 tags/rel-0.7/pymarc/reader.py delete mode 100644 tags/rel-0.7/pymarc/record.py delete mode 100644 tags/rel-0.7/pymarc/writer.py delete mode 100644 tags/rel-0.7/setup.py delete mode 100644 tags/rel-0.7/test.py delete mode 100644 tags/rel-0.7/test/__init__.py delete mode 100644 tags/rel-0.7/test/encode.py delete mode 100644 tags/rel-0.7/test/field.py delete mode 100644 tags/rel-0.7/test/marc.dat delete mode 100644 tags/rel-0.7/test/one.dat delete mode 100644 tags/rel-0.7/test/reader.py delete mode 100644 tags/rel-0.7/test/record.py delete mode 100644 tags/rel-0.7/test/test.dat delete mode 100644 tags/rel-0.7/test/util.py delete mode 100644 tags/rel-0.7/test/writer.py delete mode 100644 tags/rel-0.8/Changes delete mode 100644 tags/rel-0.8/MANIFEST.in delete mode 100644 tags/rel-0.8/README delete mode 100644 tags/rel-0.8/pymarc/__init__.py delete mode 100644 tags/rel-0.8/pymarc/constants.py delete mode 100644 tags/rel-0.8/pymarc/exceptions.py delete mode 100644 tags/rel-0.8/pymarc/field.py delete mode 100644 tags/rel-0.8/pymarc/reader.py delete mode 100644 tags/rel-0.8/pymarc/record.py delete mode 100644 tags/rel-0.8/pymarc/writer.py delete mode 100644 tags/rel-0.8/setup.py delete mode 100644 tags/rel-0.8/test.py delete mode 100644 tags/rel-0.8/test/__init__.py delete mode 100644 tags/rel-0.8/test/encode.py delete mode 100644 tags/rel-0.8/test/field.py delete mode 100644 tags/rel-0.8/test/marc.dat delete mode 100644 tags/rel-0.8/test/one.dat delete mode 100644 tags/rel-0.8/test/reader.py delete mode 100644 tags/rel-0.8/test/record.py delete mode 100644 tags/rel-0.8/test/test.dat delete mode 100644 tags/rel-0.8/test/util.py delete mode 100644 tags/rel-0.8/test/writer.py delete mode 100644 tags/rel-0.81/Changes delete mode 100644 tags/rel-0.81/MANIFEST.in delete mode 100644 tags/rel-0.81/README delete mode 100644 tags/rel-0.81/pymarc/__init__.py delete mode 100644 tags/rel-0.81/pymarc/constants.py delete mode 100644 tags/rel-0.81/pymarc/exceptions.py delete mode 100644 tags/rel-0.81/pymarc/field.py delete mode 100644 tags/rel-0.81/pymarc/reader.py delete mode 100644 tags/rel-0.81/pymarc/record.py delete mode 100644 tags/rel-0.81/pymarc/writer.py delete mode 100644 tags/rel-0.81/setup.py delete mode 100644 tags/rel-0.81/test.py delete mode 100644 tags/rel-0.81/test/__init__.py delete mode 100644 tags/rel-0.81/test/encode.py delete mode 100644 tags/rel-0.81/test/field.py delete mode 100644 tags/rel-0.81/test/marc.dat delete mode 100644 tags/rel-0.81/test/one.dat delete mode 100644 tags/rel-0.81/test/reader.py delete mode 100644 tags/rel-0.81/test/record.py delete mode 100644 tags/rel-0.81/test/test.dat delete mode 100644 tags/rel-0.81/test/util.py delete mode 100644 tags/rel-0.81/test/writer.py delete mode 100644 tags/rel-0.85/Changes delete mode 100644 tags/rel-0.85/MANIFEST.in delete mode 100644 tags/rel-0.85/README delete mode 100644 tags/rel-0.85/pymarc/__init__.py delete mode 100644 tags/rel-0.85/pymarc/constants.py delete mode 100644 tags/rel-0.85/pymarc/exceptions.py delete mode 100644 tags/rel-0.85/pymarc/field.py delete mode 100644 tags/rel-0.85/pymarc/reader.py delete mode 100644 tags/rel-0.85/pymarc/record.py delete mode 100644 tags/rel-0.85/pymarc/writer.py delete mode 100644 tags/rel-0.85/setup.py delete mode 100644 tags/rel-0.85/test.py delete mode 100644 tags/rel-0.85/test/__init__.py delete mode 100644 tags/rel-0.85/test/encode.py delete mode 100644 tags/rel-0.85/test/field.py delete mode 100644 tags/rel-0.85/test/marc.dat delete mode 100644 tags/rel-0.85/test/one.dat delete mode 100644 tags/rel-0.85/test/reader.py delete mode 100644 tags/rel-0.85/test/record.py delete mode 100644 tags/rel-0.85/test/test.dat delete mode 100644 tags/rel-0.85/test/util.py delete mode 100644 tags/rel-0.85/test/writer.py delete mode 100644 tags/rel-0.9/Changes delete mode 100644 tags/rel-0.9/MANIFEST.in delete mode 100644 tags/rel-0.9/README delete mode 100644 tags/rel-0.9/pymarc/__init__.py delete mode 100644 tags/rel-0.9/pymarc/constants.py delete mode 100644 tags/rel-0.9/pymarc/exceptions.py delete mode 100644 tags/rel-0.9/pymarc/field.py delete mode 100644 tags/rel-0.9/pymarc/reader.py delete mode 100644 tags/rel-0.9/pymarc/record.py delete mode 100644 tags/rel-0.9/pymarc/writer.py delete mode 100644 tags/rel-0.9/setup.py delete mode 100644 tags/rel-0.9/test.py delete mode 100644 tags/rel-0.9/test/__init__.py delete mode 100644 tags/rel-0.9/test/encode.py delete mode 100644 tags/rel-0.9/test/field.py delete mode 100644 tags/rel-0.9/test/marc.dat delete mode 100644 tags/rel-0.9/test/one.dat delete mode 100644 tags/rel-0.9/test/reader.py delete mode 100644 tags/rel-0.9/test/record.py delete mode 100644 tags/rel-0.9/test/test.dat delete mode 100644 tags/rel-0.9/test/util.py delete mode 100644 tags/rel-0.9/test/writer.py delete mode 100644 tags/rel-1.1/Changes delete mode 100644 tags/rel-1.1/MANIFEST.in delete mode 100644 tags/rel-1.1/README delete mode 100644 tags/rel-1.1/ez_setup.py delete mode 100644 tags/rel-1.1/pymarc/__init__.py delete mode 100644 tags/rel-1.1/pymarc/constants.py delete mode 100644 tags/rel-1.1/pymarc/exceptions.py delete mode 100644 tags/rel-1.1/pymarc/field.py delete mode 100644 tags/rel-1.1/pymarc/marc8.py delete mode 100644 tags/rel-1.1/pymarc/marc8_mapping.py delete mode 100644 tags/rel-1.1/pymarc/reader.py delete mode 100644 tags/rel-1.1/pymarc/record.py delete mode 100644 tags/rel-1.1/pymarc/writer.py delete mode 100644 tags/rel-1.1/setup.py delete mode 100644 tags/rel-1.1/test.py delete mode 100644 tags/rel-1.1/test/bad.dat delete mode 100644 tags/rel-1.1/test/encode.py delete mode 100644 tags/rel-1.1/test/field.py delete mode 100644 tags/rel-1.1/test/marc.dat delete mode 100644 tags/rel-1.1/test/marc8.py delete mode 100644 tags/rel-1.1/test/one.dat delete mode 100644 tags/rel-1.1/test/reader.py delete mode 100644 tags/rel-1.1/test/record.py delete mode 100644 tags/rel-1.1/test/test.dat delete mode 100644 tags/rel-1.1/test/util.py delete mode 100644 tags/rel-1.1/test/writer.py delete mode 100644 tags/rel-1.2/Changes delete mode 100644 tags/rel-1.2/MANIFEST.in delete mode 100644 tags/rel-1.2/README delete mode 100644 tags/rel-1.2/ez_setup.py delete mode 100644 tags/rel-1.2/pymarc/__init__.py delete mode 100644 tags/rel-1.2/pymarc/constants.py delete mode 100644 tags/rel-1.2/pymarc/exceptions.py delete mode 100644 tags/rel-1.2/pymarc/field.py delete mode 100644 tags/rel-1.2/pymarc/marc8.py delete mode 100644 tags/rel-1.2/pymarc/marc8_mapping.py delete mode 100644 tags/rel-1.2/pymarc/marcxml.py delete mode 100644 tags/rel-1.2/pymarc/reader.py delete mode 100644 tags/rel-1.2/pymarc/record.py delete mode 100644 tags/rel-1.2/pymarc/writer.py delete mode 100644 tags/rel-1.2/setup.py delete mode 100644 tags/rel-1.2/test.py delete mode 100644 tags/rel-1.2/test/__init__.py delete mode 100644 tags/rel-1.2/test/bad.dat delete mode 100644 tags/rel-1.2/test/encode.py delete mode 100644 tags/rel-1.2/test/field.py delete mode 100644 tags/rel-1.2/test/marc.dat delete mode 100644 tags/rel-1.2/test/marc8.py delete mode 100644 tags/rel-1.2/test/one.dat delete mode 100644 tags/rel-1.2/test/reader.py delete mode 100644 tags/rel-1.2/test/record.py delete mode 100644 tags/rel-1.2/test/test.dat delete mode 100644 tags/rel-1.2/test/test_marc8.txt delete mode 100644 tags/rel-1.2/test/test_utf8.txt delete mode 100644 tags/rel-1.2/test/util.py delete mode 100644 tags/rel-1.2/test/writer.py delete mode 100644 tags/rel-1.2/test/xml_test.py delete mode 100644 tags/rel-1.4/Changes delete mode 100644 tags/rel-1.4/MANIFEST.in delete mode 100644 tags/rel-1.4/ez_setup.py delete mode 100644 tags/rel-1.4/pymarc/__init__.py delete mode 100644 tags/rel-1.4/pymarc/constants.py delete mode 100644 tags/rel-1.4/pymarc/exceptions.py delete mode 100644 tags/rel-1.4/pymarc/field.py delete mode 100644 tags/rel-1.4/pymarc/marc8.py delete mode 100644 tags/rel-1.4/pymarc/marc8_mapping.py delete mode 100644 tags/rel-1.4/pymarc/marcxml.py delete mode 100644 tags/rel-1.4/pymarc/reader.py delete mode 100644 tags/rel-1.4/pymarc/record.py delete mode 100644 tags/rel-1.4/pymarc/writer.py delete mode 100644 tags/rel-1.4/setup.py delete mode 100644 tags/rel-1.4/test.py delete mode 100644 tags/rel-1.4/test/__init__.py delete mode 100644 tags/rel-1.4/test/bad.dat delete mode 100644 tags/rel-1.4/test/batch.xml delete mode 100644 tags/rel-1.4/test/encode.py delete mode 100644 tags/rel-1.4/test/field.py delete mode 100644 tags/rel-1.4/test/marc.dat delete mode 100644 tags/rel-1.4/test/marc8.py delete mode 100644 tags/rel-1.4/test/one.dat delete mode 100644 tags/rel-1.4/test/reader.py delete mode 100644 tags/rel-1.4/test/record.py delete mode 100644 tags/rel-1.4/test/test.dat delete mode 100644 tags/rel-1.4/test/test_marc8.txt delete mode 100644 tags/rel-1.4/test/test_utf8.txt delete mode 100644 tags/rel-1.4/test/util.py delete mode 100644 tags/rel-1.4/test/writer.py delete mode 100644 tags/rel-1.4/test/xml_test.py delete mode 100644 tags/rel-1.5/Changes delete mode 100644 tags/rel-1.5/MANIFEST.in delete mode 100644 tags/rel-1.5/README delete mode 100644 tags/rel-1.5/ez_setup.py delete mode 100644 tags/rel-1.5/pymarc/__init__.py delete mode 100644 tags/rel-1.5/pymarc/constants.py delete mode 100644 tags/rel-1.5/pymarc/exceptions.py delete mode 100644 tags/rel-1.5/pymarc/field.py delete mode 100644 tags/rel-1.5/pymarc/marc8.py delete mode 100644 tags/rel-1.5/pymarc/marc8_mapping.py delete mode 100644 tags/rel-1.5/pymarc/marcxml.py delete mode 100644 tags/rel-1.5/pymarc/reader.py delete mode 100644 tags/rel-1.5/pymarc/record.py delete mode 100644 tags/rel-1.5/pymarc/writer.py delete mode 100644 tags/rel-1.5/setup.py delete mode 100644 tags/rel-1.5/test.py delete mode 100644 tags/rel-1.5/test/__init__.py delete mode 100644 tags/rel-1.5/test/bad.dat delete mode 100644 tags/rel-1.5/test/batch.xml delete mode 100644 tags/rel-1.5/test/encode.py delete mode 100644 tags/rel-1.5/test/field.py delete mode 100644 tags/rel-1.5/test/marc.dat delete mode 100644 tags/rel-1.5/test/marc8.py delete mode 100644 tags/rel-1.5/test/one.dat delete mode 100644 tags/rel-1.5/test/reader.py delete mode 100644 tags/rel-1.5/test/record.py delete mode 100644 tags/rel-1.5/test/test.dat delete mode 100644 tags/rel-1.5/test/test_marc8.txt delete mode 100644 tags/rel-1.5/test/test_utf8.txt delete mode 100644 tags/rel-1.5/test/util.py delete mode 100644 tags/rel-1.5/test/writer.py delete mode 100644 tags/rel-1.5/test/xml_test.py delete mode 100644 tags/rel-1.6/Changes delete mode 100644 tags/rel-1.6/MANIFEST.in delete mode 100644 tags/rel-1.6/README delete mode 100644 tags/rel-1.6/ez_setup.py delete mode 100644 tags/rel-1.6/pymarc/__init__.py delete mode 100644 tags/rel-1.6/pymarc/constants.py delete mode 100644 tags/rel-1.6/pymarc/exceptions.py delete mode 100644 tags/rel-1.6/pymarc/field.py delete mode 100644 tags/rel-1.6/pymarc/marc8.py delete mode 100644 tags/rel-1.6/pymarc/marc8_mapping.py delete mode 100644 tags/rel-1.6/pymarc/marcxml.py delete mode 100644 tags/rel-1.6/pymarc/reader.py delete mode 100644 tags/rel-1.6/pymarc/record.py delete mode 100644 tags/rel-1.6/pymarc/writer.py delete mode 100644 tags/rel-1.6/setup.py delete mode 100644 tags/rel-1.6/test.py delete mode 100644 tags/rel-1.6/test/__init__.py delete mode 100644 tags/rel-1.6/test/bad.dat delete mode 100644 tags/rel-1.6/test/batch.xml delete mode 100644 tags/rel-1.6/test/encode.py delete mode 100644 tags/rel-1.6/test/field.py delete mode 100644 tags/rel-1.6/test/marc.dat delete mode 100644 tags/rel-1.6/test/marc8.py delete mode 100644 tags/rel-1.6/test/one.dat delete mode 100644 tags/rel-1.6/test/reader.py delete mode 100644 tags/rel-1.6/test/record.py delete mode 100644 tags/rel-1.6/test/test.dat delete mode 100644 tags/rel-1.6/test/test_marc8.txt delete mode 100644 tags/rel-1.6/test/test_utf8.txt delete mode 100644 tags/rel-1.6/test/util.py delete mode 100644 tags/rel-1.6/test/writer.py delete mode 100644 tags/rel-1.6/test/xml_test.py delete mode 100644 tags/rel-1.7/Changes delete mode 100644 tags/rel-1.7/MANIFEST.in delete mode 100644 tags/rel-1.7/README delete mode 100644 tags/rel-1.7/ez_setup.py delete mode 100644 tags/rel-1.7/pymarc/__init__.py delete mode 100644 tags/rel-1.7/pymarc/constants.py delete mode 100644 tags/rel-1.7/pymarc/exceptions.py delete mode 100644 tags/rel-1.7/pymarc/field.py delete mode 100644 tags/rel-1.7/pymarc/marc8.py delete mode 100644 tags/rel-1.7/pymarc/marc8_mapping.py delete mode 100644 tags/rel-1.7/pymarc/marcxml.py delete mode 100644 tags/rel-1.7/pymarc/reader.py delete mode 100644 tags/rel-1.7/pymarc/record.py delete mode 100644 tags/rel-1.7/pymarc/writer.py delete mode 100644 tags/rel-1.7/setup.py delete mode 100644 tags/rel-1.7/test.py delete mode 100644 tags/rel-1.7/test/__init__.py delete mode 100644 tags/rel-1.7/test/bad.dat delete mode 100644 tags/rel-1.7/test/batch.xml delete mode 100644 tags/rel-1.7/test/encode.py delete mode 100644 tags/rel-1.7/test/field.py delete mode 100644 tags/rel-1.7/test/marc.dat delete mode 100644 tags/rel-1.7/test/marc8.py delete mode 100644 tags/rel-1.7/test/one.dat delete mode 100644 tags/rel-1.7/test/reader.py delete mode 100644 tags/rel-1.7/test/record.py delete mode 100644 tags/rel-1.7/test/test.dat delete mode 100644 tags/rel-1.7/test/test_marc8.txt delete mode 100644 tags/rel-1.7/test/test_utf8.txt delete mode 100644 tags/rel-1.7/test/util.py delete mode 100644 tags/rel-1.7/test/writer.py delete mode 100644 tags/rel-1.7/test/xml_test.py rename trunk/test.py => test.py (100%) rename {tags/rel-1.1/test => test}/__init__.py (100%) rename {tags/rel-0.9/test => test}/bad.dat (100%) rename {tags/rel-1.2/test => test}/batch.xml (100%) rename {trunk/test => test}/encode.py (100%) rename {trunk/test => test}/field.py (100%) rename {tags/rel-0.6/test => test}/marc.dat (100%) rename {trunk/test => test}/marc8.py (100%) rename {tags/rel-0.6/test => test}/one.dat (100%) rename {trunk/test => test}/reader.py (100%) rename {trunk/test => test}/record.py (100%) rename {tags/rel-0.6/test => test}/test.dat (100%) rename {tags/rel-1.1/test => test}/test_marc8.txt (100%) rename {tags/rel-1.1/test => test}/test_utf8.txt (100%) rename {trunk/test => test}/util.py (100%) rename {trunk/test => test}/writer.py (100%) rename {trunk/test => test}/xml_test.py (100%) delete mode 100644 trunk/MANIFEST.in delete mode 100644 trunk/README delete mode 100644 trunk/ez_setup.py delete mode 100644 trunk/test/__init__.py delete mode 100644 trunk/test/bad.dat delete mode 100644 trunk/test/batch.xml delete mode 100644 trunk/test/marc.dat delete mode 100644 trunk/test/one.dat delete mode 100644 trunk/test/test.dat delete mode 100644 trunk/test/test_marc8.txt delete mode 100644 trunk/test/test_utf8.txt diff --git a/trunk/Changes b/Changes similarity index 100% rename from trunk/Changes rename to Changes diff --git a/tags/rel-0.6/MANIFEST.in b/MANIFEST.in similarity index 100% rename from tags/rel-0.6/MANIFEST.in rename to MANIFEST.in diff --git a/tags/rel-1.4/README b/README similarity index 100% rename from tags/rel-1.4/README rename to README diff --git a/tags/rel-0.9/ez_setup.py b/ez_setup.py similarity index 100% rename from tags/rel-0.9/ez_setup.py rename to ez_setup.py diff --git a/trunk/pymarc/__init__.py b/pymarc/__init__.py similarity index 100% rename from trunk/pymarc/__init__.py rename to pymarc/__init__.py diff --git a/trunk/pymarc/constants.py b/pymarc/constants.py similarity index 100% rename from trunk/pymarc/constants.py rename to pymarc/constants.py diff --git a/trunk/pymarc/exceptions.py b/pymarc/exceptions.py similarity index 100% rename from trunk/pymarc/exceptions.py rename to pymarc/exceptions.py diff --git a/trunk/pymarc/field.py b/pymarc/field.py similarity index 100% rename from trunk/pymarc/field.py rename to pymarc/field.py diff --git a/trunk/pymarc/marc8.py b/pymarc/marc8.py similarity index 100% rename from trunk/pymarc/marc8.py rename to pymarc/marc8.py diff --git a/trunk/pymarc/marc8_mapping.py b/pymarc/marc8_mapping.py similarity index 100% rename from trunk/pymarc/marc8_mapping.py rename to pymarc/marc8_mapping.py diff --git a/trunk/pymarc/marcxml.py b/pymarc/marcxml.py similarity index 100% rename from trunk/pymarc/marcxml.py rename to pymarc/marcxml.py diff --git a/trunk/pymarc/reader.py b/pymarc/reader.py similarity index 100% rename from trunk/pymarc/reader.py rename to pymarc/reader.py diff --git a/trunk/pymarc/record.py b/pymarc/record.py similarity index 100% rename from trunk/pymarc/record.py rename to pymarc/record.py diff --git a/trunk/pymarc/writer.py b/pymarc/writer.py similarity index 100% rename from trunk/pymarc/writer.py rename to pymarc/writer.py diff --git a/trunk/setup.py b/setup.py similarity index 100% rename from trunk/setup.py rename to setup.py diff --git a/tags/rel-0.6/Changes b/tags/rel-0.6/Changes deleted file mode 100644 index 8fd6d3a..0000000 --- a/tags/rel-0.6/Changes +++ /dev/null @@ -1,28 +0,0 @@ -v0.6 Tue Nov 29 20:48:31 CST 2005 - - fixed test suite to run under the unittest that ships with python2.3 - - allow non-integer field tags - - fixed MARCWriter and added test (thanks Mikel Larreategi) - -v0.5 Thu Feb 10 10:01:12 CST 2005 - - handle empty subfields - -v0.4 Wed Feb 2 22:29:33 CST 2005 - - fixed directory validation: thanks Aaron Lav - - added iterator for pymarc.Field for iterating through subfields - - added pymarc.Field.value() for getting a field value easily - -v0.3 Wed Jan 5 17:03:37 CST 2005 - - changed mind about accessors (again): - removed getField() must use getFields() - renamed subfield() to getSubfields() and have it return a list - - added doctest support to pymarc/__init__.py - - added a test batch file of python data - -v0.2 Tue Jan 4 21:01:22 CST 2005 - - removed getField() and renamed getFields() to find() - -v0.11 Mon Jan 3 20:42:19 CST 2005 - - fixed test suite execution - -v0.1 Wed Dec 29 19:54:23 CST 2004 - - initial release diff --git a/tags/rel-0.6/README b/tags/rel-0.6/README deleted file mode 100644 index 78d586c..0000000 --- a/tags/rel-0.6/README +++ /dev/null @@ -1,30 +0,0 @@ -DESCRIPTION ------------ - -pymarc is a python library for working with MARC21 bibliographic data -loosely based on the MARC/Perl suite of modules (http://marcpm.sf.net). -More about pymarc can be found at http://www.textualize.com/pymarc - -INSTALLATION ------------- - -Run the pymarc test suite to make sure things are in order with the -distribution: - - python test.py - -And then install: - - python setup.py install - -For typical usage of this library look at the documentation in -pymarc/__init__.py - -TODO ----- - -- marc8/utf8 translation -- marcxml support - -LICENSE: BSD -AUTHOR: Ed Summers diff --git a/tags/rel-0.6/pymarc/__init__.py b/tags/rel-0.6/pymarc/__init__.py deleted file mode 100644 index 8e5e3ac..0000000 --- a/tags/rel-0.6/pymarc/__init__.py +++ /dev/null @@ -1,71 +0,0 @@ -# __init__.py - -r''' - -The pymarc module provides an API for reading, writing and modifying -MARC records. MARC (MAchine Readable Cataloging) is a metadata format for -bibliographic data. More about MARC can be found at the Library of Congress: -http://lcweb.loc.gov/marc - -Below are some common examples of how you might want to use pymarc. If you -run across an example that you think should be here please contribute it -by writing to the author. - -1. Reading a batch of records and printing out the 245 subfield a. If you - are curious this example uses the batch file available in the distribution. - - >>> from pymarc import MARCReader - >>> reader = MARCReader( 'test/marc.dat' ) - >>> for record in reader: - ... print record['245']['a'] - The pragmatic programmer : - Programming Python / - Learning Python / - Python cookbook / - Python programming for the absolute beginner / - Web programming : - Python programming on Win32 / - Python programming : - Python Web programming / - Core python programming / - Python and Tkinter programming / - Game programming with Python, Lua, and Ruby / - Python programming patterns / - Python programming with the Java class libraries : - Learn to program using Python : - Programming with Python / - BSD Sockets programming from a multi-language perspective / - Design patterns : - Introduction to algorithms / - ANSI Common Lisp / - -2. Creating a record and writing it out to a file. - - >>> from pymarc import Record, Field - >>> record = Record() - >>> record.addField( \ - ... Field( \ - ... tag = '245', - ... indicators = ['0','1'], - ... subfields = [ \ - ... 'a', 'The pragmatic programmer : ', - ... 'b', 'from journeyman to master /', - ... 'c', 'Andrew Hunt, David Thomas.' ] ) ) - >>> out = file( 'file.dat', 'w' ) - >>> out.write( record.asMARC21() ) - -''' - -__version__ = '0.11' - -from record import * -from field import * -from exceptions import * -from reader import * -from writer import * -from constants import * - -if __name__ == "__main__": - import doctest - doctest.testmod() - diff --git a/tags/rel-0.6/pymarc/constants.py b/tags/rel-0.6/pymarc/constants.py deleted file mode 100644 index bd148c2..0000000 --- a/tags/rel-0.6/pymarc/constants.py +++ /dev/null @@ -1,7 +0,0 @@ -LEADER_LEN = 24 -DIRECTORY_ENTRY_LEN = 12 -SUBFIELD_INDICATOR = chr( 0x1F ) -END_OF_FIELD = chr( 0x1E ) -END_OF_RECORD = chr( 0x1D ) - - diff --git a/tags/rel-0.6/pymarc/exceptions.py b/tags/rel-0.6/pymarc/exceptions.py deleted file mode 100644 index 4be03df..0000000 --- a/tags/rel-0.6/pymarc/exceptions.py +++ /dev/null @@ -1,30 +0,0 @@ -class pymarcException( Exception ): - pass - -class RecordLengthInvalid( pymarcException): - def __str__( self ): - return( "Invalid record length in first 5 bytes of record" ) - -class RecordLeaderInvalid( pymarcException ): - def __str__ ( self ): - return "Unable to extract record leader" - -class RecordDirectoryInvalid( pymarcException ): - def __str__( self ): - return "Invalid directory" - -class NoFieldsFound( pymarcException ): - def __str__ ( self ): - return "Unable to locate fields in record data" - -class BaseAddressInvalid( pymarcException ): - def __str__ ( self ): - return "Base address exceeds size of record" - -class WriteNeedsRecord( pymarcException ): - def __str__( self ): - return "Write requires a pymarc.Record object as an argument" - -class NoActiveFile( pymarcException ): - def __str__( self ): - return "There is no active file to write to in call to write" diff --git a/tags/rel-0.6/pymarc/field.py b/tags/rel-0.6/pymarc/field.py deleted file mode 100644 index 5bb1b00..0000000 --- a/tags/rel-0.6/pymarc/field.py +++ /dev/null @@ -1,118 +0,0 @@ -from constants import * -from exceptions import * - -class Field( object ): - - def __init__( self, tag, indicators=[], subfields=[], data='' ): - """ - Field() pass in the field tag, indicators and subfields for the tag. - - field = Field( \ - tag = '245', - indicators = ['0','1'], - subfields = [ \ - 'a', 'The pragmatic programmer : ', - 'b', 'from journeyman to master /', - 'c', 'Andrew Hunt, David Thomas.' ] - - If you want to create a control field you don't pas in the indicators - and use a data parameter rather than a subfields parameter: - - field = Field( tag='001', data='fol05731351' ) - - """ - tag = "%03s" % tag - if ( tag < '010' ): - self.tag = tag - self.data = data - else: - self.tag = tag - self.indicator1 = indicators[0] - self.indicator2 = indicators[1] - self.subfields = subfields - - def __iter__(self): - self.__pos = 0 - return self - - def __str__( self ): - """ - A Field object in a string context will return the tag, indicators - and subfield as a string. - """ - if ( self.isControlField() ): - text = "%s %s" % ( self.tag, self.data ) - else: - text = "%s %s%s " % ( self.tag, self.indicator1, self.indicator2 ) - for subfield in self: - text += ("$%s%s" % subfield) - return text - - def __getitem__( self, subfield ): - """ - Retrieve the first subfield with a given subfield code in a field: - - field['a'] - - Handy for quick lookups. - """ - subfields = self.getSubfields( subfield ) - if len(subfields) > 0: return subfields[0] - return None - - def next( self ): - while self.__pos < len(self.subfields): - subfield = ( self.subfields[ self.__pos ], \ - self.subfields[ self.__pos+1 ] ) - self.__pos += 2 - return subfield - raise StopIteration - - def value( self ): - """ - Returns the field as a string without tag, indicators, and - subfield indicators. - """ - if self.isControlField(): - return self.data - string = "" - for subfield in self: - string += subfield[1] - return string - - def getSubfields( self, *codes ): - """ - getSubfields() accepts one or more subfield codes and will return a list - of subfield values. The order of the subfield values in the list - will be the order that they appear in the field. - - print field.getSubfields( 'a' ) - - print field.getSubfields( 'a', 'b', 'z' ) - """ - values = [] - for subfield in self: - if subfield[0] in codes: - values.append( subfield[1] ) - return values - - def isControlField( self ): - """ - returns true or false if the field is considered a control field. - Control fields lack indicators and subfields. - """ - if self.tag < '010': - return True - return False - - def asMARC21( self ): - """ - used during conversion of a field to raw marc - """ - if self.isControlField(): - return self.data + END_OF_FIELD - marc = str(self.indicator1) + str(self.indicator2) - for subfield in self: - marc += SUBFIELD_INDICATOR + subfield[0] + subfield[1] - return marc + END_OF_FIELD - diff --git a/tags/rel-0.6/pymarc/reader.py b/tags/rel-0.6/pymarc/reader.py deleted file mode 100644 index 4201394..0000000 --- a/tags/rel-0.6/pymarc/reader.py +++ /dev/null @@ -1,58 +0,0 @@ -from pymarc import Record, Field -from constants import END_OF_RECORD -from exceptions import * -from types import * -import string - -class Reader( object ): - """ - A base class for all iterating readers in the pymarc package. - """ - def __iter__( self ): - return self - -class MARCReader( Reader ): - """ - An iterator class for reading a file of MARC21 records. - - Simple usage: - - from pymarc import MARCReader - - ## pass in a filename - reader = MARCReader( 'file.dat' ) - for record in reader: - ... - - ## pass in a file object - f = file( 'file.dat' ); - reader = MARCReader( f ) - for record in reader: - ... - - """ - - def __init__( self, f ): - """ - The constructor which you can pass either the full path to a file - you want to read, or a file object. - """ - if ( type( f ) == FileType ): self.fh = f - else: self.fh = file( f, 'r' ) - - def next( self ): - """ - To support iteration. - """ - first5 = self.fh.read( 5 ) - if not first5: - raise StopIteration - if len( first5 ) < 5: - raise RecordLengthInvalid - - length = int( first5 ) - chunk = self.fh.read( length - 5 ) - chunk = first5 + chunk - r = Record( chunk ) - return r - diff --git a/tags/rel-0.6/pymarc/record.py b/tags/rel-0.6/pymarc/record.py deleted file mode 100644 index 671d444..0000000 --- a/tags/rel-0.6/pymarc/record.py +++ /dev/null @@ -1,255 +0,0 @@ -from exceptions import * -from constants import * -from field import * -from types import * -import string -import re - - -class Record( object ): - """ - Record - - A class for representing a MARC record. Each Record object is made up of - multiple Field objects. You'll probably want to look at the docs for Field - to see how to fully use a Record object. - - Basic usage: - - field = Field( \ - tag = '245', - indicators = ['0','1'], - subfields = [ \ - 'a', 'The pragmatic programmer : ', - 'b', 'from journeyman to master /', - 'c', 'Andrew Hunt, David Thomas.' ] - - record.addField( field ) - - Or creating a record from a chunk of MARC in transmission format: - - record = Record( data=chunk ) - - Or getting a record as serialized MARC21. - - raw = record.asMARC21() - - You'll normally want to use a MARCReader object to iterate through - MARC records in a file. - """ - - def __init__( self, data='' ): - self.leader = ' ' * LEADER_LEN - self.fields = list() - self.pos = 0 - if len(data) > 0: - ok = self.decodeMARC( data ) - - def __str__( self ): - """ - In a string context a Record object will return a prettified version - of the record resembling something like this: - """ - # join is significantly faster than concatenation - text = "LDR %s\n" % self.leader - text += string.join( map( str, self.fields ), "\n" ) - return text - - def __getitem__( self, tag ): - """ - Allows a shorthand lookup by tag: - - record["245"] - - """ - fields = self.getFields( tag ) - if len(fields) > 0: return fields[0] - return None - - def __iter__( self ): - self.__pos = 0 - return self - - def next(self): - if self.__pos >= len( self.fields ): - raise StopIteration - self.__pos += 1 - return self.fields[ self.__pos-1 ] - - def addField( self, *fields ): - """ - addField() will add pymarc.Field objects to a Record object. - Optionally you can pass in multiple fields. - """ - for field in fields: - self.fields.append( field ) - - def getFields( self, *args ): - """ - When passed a tag ( '245' ) getFields() will return a list of all the - fields in a record with a given tag. - - title = record.getFields( '245' ) - - If no fields with the specified - tag are found then an empty list is returned. If you are interested - in more than one tag you can pass in a list: - - subjects = record.getFields( '600', '610', '650' ) - - If no tag is passed in to fields() a list of all the fields will be - returned. - """ - found = list() - for field in self.fields: - if field.tag in args: - found.append( field ) - return found - - def decodeMARC( self, marc ): - """ - decodeMARC() accepts a MARC record in transmission format as a - a string argument, and will populate the object based on the data - found. The Record constructor actually uses decodeMARC() behind - the scenes when you pass in a chunk of MARC data to it. - - """ - - # extract record leader - self.leader = marc[ 0 : LEADER_LEN ] - if len( self.leader ) != LEADER_LEN: raise RecordLeaderInvalid - - # extract the byte offset where the record data starts - baseAddress = int( marc[ 12 : 17 ] ) - if baseAddress <= 0: raise BaseAddressNotFound - if baseAddress >= len( marc ): raise BaseAddressInvalid - - # extract directory, baseAddress-1 is used since the - # director ends with an END_OF_FIELD byte - directory = marc[ LEADER_LEN : baseAddress-1 ] - - # determine the number of fields in record - if len(directory) % DIRECTORY_ENTRY_LEN <> 0: - raise RecordDirectoryInvalid - numFields = len( directory ) / DIRECTORY_ENTRY_LEN - - # add fields to our record using directory offsets - fieldNum = 0 - while ( fieldNum < numFields ): - entryStart = fieldNum * DIRECTORY_ENTRY_LEN - entryEnd = entryStart + DIRECTORY_ENTRY_LEN - entry = directory[ entryStart : entryEnd ] - entryTag = entry[ 0 : 3 ] - entryLength = int( entry[ 3 : 7 ] ) - entryOffset = int( entry[ 7 : 12 ] ) - entryData = marc[ baseAddress + entryOffset : - baseAddress + entryOffset + entryLength - 1 ] - - if entryTag < '010': - field = Field( tag=entryTag, data=entryData ) - else: - subfields = list() - subs = entryData.split( SUBFIELD_INDICATOR ) - i1 = subs[0][0] - i2 = subs[0][1] - for subfield in subs[1:]: - if len(subfield) == 0: continue - code = subfield[0] - data = subfield[1:] - subfields.append( code ) - subfields.append( data ) - field = Field( - tag = entryTag, - indicators = [ i1, i2 ], - subfields = subfields ) - - self.addField( field ) - fieldNum += 1 - - if fieldNum == 0: raise NoFieldsFound - - def asMARC21( self ): - """ - returns the record serialized as MARC21 - """ - fields = '' - directory = '' - offset = 0 - - # build the directory - # each element of the directory includes the tag, the byte length of - # the field and the offset from the base address where the field data - # can be found - for field in self.fields: - fieldData = field.asMARC21() - fields += fieldData - directory += "%03d%04d%05d" % (int(field.tag),len(fieldData),offset) - offset += len( fieldData ) - - # directory ends with an end of field - directory += END_OF_FIELD - - # field data ends with an end of record - fields += END_OF_RECORD - - # the base address where the directory ends and the field data begins - baseAddress = LEADER_LEN + len(directory) - - # figure out the length of the record - recordLength = baseAddress + len(fields) - - # update the leader with the current record length and base address - # the lengths are fixed width and zero padded - self.leader = "%05d%s%05d%s" % \ - ( recordLength, self.leader[5:12], baseAddress, self.leader[17:] ) - - # return the encoded record - return self.leader + directory + fields - - def title( self ): - """ - Returns the title of the record (245 $a an $b). - """ - title = None - try: - title = self['245']['a'] - title += self['245']['b'] - except TypeError, e: - pass - return title - - def isbn( self ): - """ - Returns an ISBN if appropriate. If not present None will - be returned. - """ - isbn = None - try: - # if anyone ever cares alot about performance - # this compilation could be moved out and compiled once - isbnPattern = re.compile( '^([0-9A-Za-z]+)' ) - isbn = isbnPattern.match( self["020"]["a"] ).group(1) - except Exception, e: - pass - return isbn - - def author( self ): - # todo - pass - - def publisher( self ): - # todo - pass - - def pubyear( self ): - # todo - pass - - def subjects( self ): - # todo - pass - - def notes( self ): - # todo - pass - diff --git a/tags/rel-0.6/pymarc/writer.py b/tags/rel-0.6/pymarc/writer.py deleted file mode 100644 index 6696e03..0000000 --- a/tags/rel-0.6/pymarc/writer.py +++ /dev/null @@ -1,46 +0,0 @@ -from pymarc import Record, Field, WriteNeedsRecord, NoActiveFile -from types import * -import string - -class Writer( object ): - - def write( self ): - pass - -class MARCWriter( Writer ): - """ - A class for writing MARC21 records in transmission format. - - Simple usage: - - from pymarc import MARCWriter - - ## pass in a filename - writer = MARCWriter( 'file.dat' ) - writer.write( record ) - - ## pass in a file object - f = file( 'file.dat' ); - writer = MARCWriter( f ) - writer.write( record ) - """ - - def __init__( self, f ): - """ - The constructor which you can pass either the full path to a file - you want to write to, or a file object. - """ - if ( type( f ) == FileType ): self.fh = f - else: self.fh = file( f, 'w' ) - - def write( self, record ): - if type( record ) != Record: - raise WriteNeedsRecord - if type( self.fh ) != file: - raise NoActiveFile - self.fh.write( record.asMARC21() ) - - def close( self ): - self.fh.close() - self.fh = None - diff --git a/tags/rel-0.6/setup.py b/tags/rel-0.6/setup.py deleted file mode 100644 index dfc9e2d..0000000 --- a/tags/rel-0.6/setup.py +++ /dev/null @@ -1,35 +0,0 @@ -import sys -from distutils.core import setup - -classifiers = """\ -Intended Audience :: Education -Intended Audience :: Developers -Intended Audience :: Information Technology -License :: OSI Approved :: BSD License -Programming Language :: Python -Topic :: Text Processing :: General -""" - -# workaround for older pythons that don't -# understand classifiers - -if sys.version_info < (2, 3): - _setup = setup - def setup(**kwargs): - if kwargs.has_key("classifiers"): - del kwargs["classifiers"] - _setup(**kwargs) - -setup( - name = 'pymarc', - version = '0.6', - url = 'http://www.textualize.com/pymarc', - download_url = 'http://www.textualize.com/archive/pymarc/latest.tar.gz', - author = 'Ed Summers', - author_email = 'ehs@pobox.com', - license = 'http://www.opensource.org/licenses/bsd-license.php', - packages = [ 'pymarc' ], - description = "read, write and modify MARC bibliographic data", - classifiers = filter( None, classifiers.split("\n") ), -) - diff --git a/tags/rel-0.6/test.py b/tags/rel-0.6/test.py deleted file mode 100644 index 8ea1517..0000000 --- a/tags/rel-0.6/test.py +++ /dev/null @@ -1,19 +0,0 @@ -import unittest -import test.record -import test.field -import test.reader -import test.encode -import test.writer - -def suite(): - suite = unittest.TestSuite() - suite.addTest( test.record.suite() ) - suite.addTest( test.field.suite() ) - suite.addTest( test.reader.suite() ) - suite.addTest( test.encode.suite() ) - suite.addTest( test.writer.suite() ) - return suite - -runner = unittest.TextTestRunner() -runner.run( suite() ) - diff --git a/tags/rel-0.6/test/__init__.py b/tags/rel-0.6/test/__init__.py deleted file mode 100644 index c297d12..0000000 --- a/tags/rel-0.6/test/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -import record -import field -import reader diff --git a/tags/rel-0.6/test/encode.py b/tags/rel-0.6/test/encode.py deleted file mode 100644 index 29240d9..0000000 --- a/tags/rel-0.6/test/encode.py +++ /dev/null @@ -1,25 +0,0 @@ -import util -from pymarc import MARCReader, Record, Field -import unittest -import os - -class Encode( unittest.TestCase ): - - def testEncodeDecode( self ): - # get raw data from file - original = file( 'test/one.dat' ).read() - # create a record object for the file - reader = MARCReader( "test/one.dat" ) - record = reader.next() - # make sure original data is the same as - # the record encoded as MARC - raw = record.asMARC21() - self.assertEqual( original, raw ) - -def suite(): - suite = unittest.makeSuite( Encode, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - diff --git a/tags/rel-0.6/test/field.py b/tags/rel-0.6/test/field.py deleted file mode 100644 index 9dd14ed..0000000 --- a/tags/rel-0.6/test/field.py +++ /dev/null @@ -1,68 +0,0 @@ -import util -import unittest -from pymarc.record import Record, Field - -class FieldTest( unittest.TestCase ): - - def setUp( self ): - self.field = Field( - tag = '245', - indicators = [ 0, 1 ], - subfields = [ - 'a', 'Huckleberry Finn: ', - 'b', 'An American Odyssey' - ] - ) - - def testString( self ): - self.assertEquals( str(self.field), - '245 01 $aHuckleberry Finn: $bAn American Odyssey') - - def testIndicators( self ): - assert self.field.indicator1 is 0 - self.assertEqual( self.field.indicator2, 1 ) - - def testSubfieldsCreated( self ): - subfields = self.field.subfields - self.assertEqual( len( subfields ), 4 ) - - def testSubfieldShort( self ): - self.assertEqual( self.field['a'], 'Huckleberry Finn: ' ) - self.assertEqual( self.field['z'], None ) - - def testSubfields( self ): - self.assertEqual( self.field.getSubfields( 'a' ), - ['Huckleberry Finn: '] ) - - def testSubfieldsMulti( self ): - self.assertEqual( self.field.getSubfields( 'a','b' ), - ['Huckleberry Finn: ', 'An American Odyssey' ] ) - - def testEncode( self ): - self.field.asMARC21() - - def testIterator( self ): - string = "" - for subfield in self.field: - string += subfield[0] - string += subfield[1] - self.assertEquals( string, "aHuckleberry Finn: bAn American Odyssey" ) - - def testValue( self ): - self.assertEquals( self.field.value(), - 'Huckleberry Finn: An American Odyssey' ) - controlField = Field( tag='001', data='foobar' ) - self.assertEquals( controlField.value(), "foobar" ) - - def testNonIntegerTag( self ): - # make sure this doesn't throw an exception - f = Field( tag="3 0", indicators=[0,1], subfields=['a', 'foo'] ) - -def suite(): - suite = unittest.makeSuite( FieldTest, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - - diff --git a/tags/rel-0.6/test/reader.py b/tags/rel-0.6/test/reader.py deleted file mode 100644 index 9d5be6b..0000000 --- a/tags/rel-0.6/test/reader.py +++ /dev/null @@ -1,44 +0,0 @@ -import util -import unittest -import pymarc -import re - -class MARCReaderFilenameTest( unittest.TestCase ): - """ - Tests for the pymarc.MARCReader class which provides iterator - based access to a MARC file. - """ - - def setUp( self ): - self.reader = pymarc.MARCReader( 'test/test.dat' ) - - def testIterator( self ): - count = 0 - for record in self.reader: - count += 1 - self.assertEquals( count, 10, 'found expected amt of MARC21 records' ) - - def testString( self ): - ## basic test of stringification - startsWithLeader = re.compile( "^LDR" ) - hasNumericTag = re.compile( "\n\d\d\d " ) - for record in self.reader: - text = str( record ) - self.failUnless( startsWithLeader.search( text ), 'got leader' ) - self.failUnless( hasNumericTag.search( text ), 'got a tag' ) - -class MARCReaderFileTest( MARCReaderFilenameTest ): - - def setUp( self ): - self.reader = pymarc.reader.MARCReader( file( 'test/test.dat' ) ) - - # inherit same tests from MARCReaderTestFile - -def suite(): - filenameSuite = unittest.makeSuite( MARCReaderFilenameTest, 'test' ) - fileSuite = unittest.makeSuite( MARCReaderFileTest, 'test' ) - suite = unittest.TestSuite( (filenameSuite, fileSuite ) ) - return suite - -if __name__ == "__main__": - unittest.main() diff --git a/tags/rel-0.6/test/record.py b/tags/rel-0.6/test/record.py deleted file mode 100644 index 98e5d74..0000000 --- a/tags/rel-0.6/test/record.py +++ /dev/null @@ -1,99 +0,0 @@ -import util -import unittest - -from pymarc import Record, Field -from pymarc.exceptions import * - -class RecordTest( unittest.TestCase ): - - def testAddField( self ): - record = Record() - field = Field( - tag = '245', - indicators = [ '1', '0' ], - data = [ 'a', 'Python', 'c', 'Guido' ] ) - record.addField( field ) - self.failUnless( field in record.fields, msg='found field' ) - - def testQuickAccess( self ): - record = Record() - title = Field( - tag = '245', - indicators = [ '1', '0' ], - data = [ 'a', 'Python', 'c', 'Guido' ] ) - record.addField( title ) - self.assertEqual( record['245'], title, 'short access' ) - self.assertEqual( record['999'], None, 'short access with no field' ) - - def testFieldNotFound( self ): - record = Record() - self.assertEquals( len( record.fields ), 0 ) - - def testFind( self ): - record = Record() - subject1 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Programming Language' ] ) - record.addField( subject1 ) - subject2 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Object Oriented' ] ) - record.addField( subject2 ) - found = record.getFields( '650' ) - self.assertEqual( found[0], subject1, 'getFields() item 1' ) - self.assertEqual( found[0], subject1, 'getFields() item 2' ) - - def testMultiFind( self ): - record = Record() - subject1 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Programming Language' ] ) - record.addField( subject1 ) - subject2 = Field( - tag = '651', - indicators = [ '', '0' ], - data = [ 'a', 'Object Oriented' ] ) - record.addField( subject2 ) - found = record.getFields( '650', '651' ) - self.assertEquals( len(found), 2 ) - - def testBadLeader( self ): - record = Record() - self.failUnlessRaises( RecordLeaderInvalid, - record.decodeMARC, 'foo' ) - - def testBadBaseAddress( self ): - record = Record() - self.failUnlessRaises( BaseAddressInvalid, - record.decodeMARC, '00695cam 2200241Ia 45x00' ) - - def testTitle( self ): - record = Record() - self.assertEquals( record.title(), None ) - record.addField( Field( '245', [0,1], - subfields=[ 'a', "Foo :", 'b', 'bar' ] ) ) - self.assertEquals( record.title(), 'Foo :bar' ) - - record = Record() - record.addField( Field( '245', [0,1], - subfields=[ 'a', "Farghin" ] ) ) - self.assertEquals( record.title(), "Farghin" ) - - def testISBN( self ): - record = Record() - self.assertEquals( record.isbn(), None ) - record.addField( Field( '020', [0,1], subfields=['a', '123456789' ] ) ) - self.assertEquals( record.isbn(), '123456789' ) - - -def suite(): - suite = unittest.makeSuite( RecordTest, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - - diff --git a/tags/rel-0.6/test/util.py b/tags/rel-0.6/test/util.py deleted file mode 100644 index 7ade343..0000000 --- a/tags/rel-0.6/test/util.py +++ /dev/null @@ -1,4 +0,0 @@ -import sys -sys.path.append( '../pymarc' ); - - diff --git a/tags/rel-0.6/test/writer.py b/tags/rel-0.6/test/writer.py deleted file mode 100644 index 5c361a1..0000000 --- a/tags/rel-0.6/test/writer.py +++ /dev/null @@ -1,27 +0,0 @@ -import util -import unittest -import pymarc -import re - -class MARCWriterTest(unittest.TestCase): - - def testWrite(self): - - # write a record off to a file - writer = pymarc.MARCWriter('test/writer-test.dat') - record = pymarc.Record() - field = pymarc.Field('245', ['0','0'], ['a', 'foo']) - record.addField(field) - writer.write(record) - writer.close() - - # read it back in - reader = pymarc.MARCReader('test/writer-test.dat') - record = reader.next() - -def suite(): - suite = unittest.makeSuite(MARCWriterTest, 'test') - return suite - -if __name__ == "__main__": - unittest.main() diff --git a/tags/rel-0.7/Changes b/tags/rel-0.7/Changes deleted file mode 100644 index 037a217..0000000 --- a/tags/rel-0.7/Changes +++ /dev/null @@ -1,31 +0,0 @@ -v0.7 Mon Jan 23 15:08:55 EST 2006 - - added addSubfield() to Subfield (thanks Kurt Nordstrom) - -v0.6 Tue Nov 29 20:48:31 CST 2005 - - fixed test suite to run under the unittest that ships with python2.3 - - allow non-integer field tags - - fixed MARCWriter and added test (thanks Mikel Larreategi) - -v0.5 Thu Feb 10 10:01:12 CST 2005 - - handle empty subfields - -v0.4 Wed Feb 2 22:29:33 CST 2005 - - fixed directory validation: thanks Aaron Lav - - added iterator for pymarc.Field for iterating through subfields - - added pymarc.Field.value() for getting a field value easily - -v0.3 Wed Jan 5 17:03:37 CST 2005 - - changed mind about accessors (again): - removed getField() must use getFields() - renamed subfield() to getSubfields() and have it return a list - - added doctest support to pymarc/__init__.py - - added a test batch file of python data - -v0.2 Tue Jan 4 21:01:22 CST 2005 - - removed getField() and renamed getFields() to find() - -v0.11 Mon Jan 3 20:42:19 CST 2005 - - fixed test suite execution - -v0.1 Wed Dec 29 19:54:23 CST 2004 - - initial release diff --git a/tags/rel-0.7/MANIFEST.in b/tags/rel-0.7/MANIFEST.in deleted file mode 100644 index 591cc6d..0000000 --- a/tags/rel-0.7/MANIFEST.in +++ /dev/null @@ -1,3 +0,0 @@ -global-include *.py *.dat -include README MANIFEST.in - diff --git a/tags/rel-0.7/README b/tags/rel-0.7/README deleted file mode 100644 index 78d586c..0000000 --- a/tags/rel-0.7/README +++ /dev/null @@ -1,30 +0,0 @@ -DESCRIPTION ------------ - -pymarc is a python library for working with MARC21 bibliographic data -loosely based on the MARC/Perl suite of modules (http://marcpm.sf.net). -More about pymarc can be found at http://www.textualize.com/pymarc - -INSTALLATION ------------- - -Run the pymarc test suite to make sure things are in order with the -distribution: - - python test.py - -And then install: - - python setup.py install - -For typical usage of this library look at the documentation in -pymarc/__init__.py - -TODO ----- - -- marc8/utf8 translation -- marcxml support - -LICENSE: BSD -AUTHOR: Ed Summers diff --git a/tags/rel-0.7/pymarc/__init__.py b/tags/rel-0.7/pymarc/__init__.py deleted file mode 100644 index 8e5e3ac..0000000 --- a/tags/rel-0.7/pymarc/__init__.py +++ /dev/null @@ -1,71 +0,0 @@ -# __init__.py - -r''' - -The pymarc module provides an API for reading, writing and modifying -MARC records. MARC (MAchine Readable Cataloging) is a metadata format for -bibliographic data. More about MARC can be found at the Library of Congress: -http://lcweb.loc.gov/marc - -Below are some common examples of how you might want to use pymarc. If you -run across an example that you think should be here please contribute it -by writing to the author. - -1. Reading a batch of records and printing out the 245 subfield a. If you - are curious this example uses the batch file available in the distribution. - - >>> from pymarc import MARCReader - >>> reader = MARCReader( 'test/marc.dat' ) - >>> for record in reader: - ... print record['245']['a'] - The pragmatic programmer : - Programming Python / - Learning Python / - Python cookbook / - Python programming for the absolute beginner / - Web programming : - Python programming on Win32 / - Python programming : - Python Web programming / - Core python programming / - Python and Tkinter programming / - Game programming with Python, Lua, and Ruby / - Python programming patterns / - Python programming with the Java class libraries : - Learn to program using Python : - Programming with Python / - BSD Sockets programming from a multi-language perspective / - Design patterns : - Introduction to algorithms / - ANSI Common Lisp / - -2. Creating a record and writing it out to a file. - - >>> from pymarc import Record, Field - >>> record = Record() - >>> record.addField( \ - ... Field( \ - ... tag = '245', - ... indicators = ['0','1'], - ... subfields = [ \ - ... 'a', 'The pragmatic programmer : ', - ... 'b', 'from journeyman to master /', - ... 'c', 'Andrew Hunt, David Thomas.' ] ) ) - >>> out = file( 'file.dat', 'w' ) - >>> out.write( record.asMARC21() ) - -''' - -__version__ = '0.11' - -from record import * -from field import * -from exceptions import * -from reader import * -from writer import * -from constants import * - -if __name__ == "__main__": - import doctest - doctest.testmod() - diff --git a/tags/rel-0.7/pymarc/constants.py b/tags/rel-0.7/pymarc/constants.py deleted file mode 100644 index bd148c2..0000000 --- a/tags/rel-0.7/pymarc/constants.py +++ /dev/null @@ -1,7 +0,0 @@ -LEADER_LEN = 24 -DIRECTORY_ENTRY_LEN = 12 -SUBFIELD_INDICATOR = chr( 0x1F ) -END_OF_FIELD = chr( 0x1E ) -END_OF_RECORD = chr( 0x1D ) - - diff --git a/tags/rel-0.7/pymarc/exceptions.py b/tags/rel-0.7/pymarc/exceptions.py deleted file mode 100644 index 4be03df..0000000 --- a/tags/rel-0.7/pymarc/exceptions.py +++ /dev/null @@ -1,30 +0,0 @@ -class pymarcException( Exception ): - pass - -class RecordLengthInvalid( pymarcException): - def __str__( self ): - return( "Invalid record length in first 5 bytes of record" ) - -class RecordLeaderInvalid( pymarcException ): - def __str__ ( self ): - return "Unable to extract record leader" - -class RecordDirectoryInvalid( pymarcException ): - def __str__( self ): - return "Invalid directory" - -class NoFieldsFound( pymarcException ): - def __str__ ( self ): - return "Unable to locate fields in record data" - -class BaseAddressInvalid( pymarcException ): - def __str__ ( self ): - return "Base address exceeds size of record" - -class WriteNeedsRecord( pymarcException ): - def __str__( self ): - return "Write requires a pymarc.Record object as an argument" - -class NoActiveFile( pymarcException ): - def __str__( self ): - return "There is no active file to write to in call to write" diff --git a/tags/rel-0.7/pymarc/field.py b/tags/rel-0.7/pymarc/field.py deleted file mode 100644 index fac5897..0000000 --- a/tags/rel-0.7/pymarc/field.py +++ /dev/null @@ -1,127 +0,0 @@ -from constants import * -from exceptions import * - -class Field( object ): - - def __init__( self, tag, indicators=[], subfields=[], data='' ): - """ - Field() pass in the field tag, indicators and subfields for the tag. - - field = Field( \ - tag = '245', - indicators = ['0','1'], - subfields = [ \ - 'a', 'The pragmatic programmer : ', - 'b', 'from journeyman to master /', - 'c', 'Andrew Hunt, David Thomas.' ] - - If you want to create a control field you don't pas in the indicators - and use a data parameter rather than a subfields parameter: - - field = Field( tag='001', data='fol05731351' ) - - """ - tag = "%03s" % tag - if ( tag < '010' ): - self.tag = tag - self.data = data - else: - self.tag = tag - self.indicator1 = indicators[0] - self.indicator2 = indicators[1] - self.subfields = subfields - - def __iter__(self): - self.__pos = 0 - return self - - def __str__( self ): - """ - A Field object in a string context will return the tag, indicators - and subfield as a string. - """ - if ( self.isControlField() ): - text = "%s %s" % ( self.tag, self.data ) - else: - text = "%s %s%s " % ( self.tag, self.indicator1, self.indicator2 ) - for subfield in self: - text += ("$%s%s" % subfield) - return text - - def __getitem__( self, subfield ): - """ - Retrieve the first subfield with a given subfield code in a field: - - field['a'] - - Handy for quick lookups. - """ - subfields = self.getSubfields( subfield ) - if len(subfields) > 0: return subfields[0] - return None - - def next( self ): - while self.__pos < len(self.subfields): - subfield = ( self.subfields[ self.__pos ], \ - self.subfields[ self.__pos+1 ] ) - self.__pos += 2 - return subfield - raise StopIteration - - def value( self ): - """ - Returns the field as a string without tag, indicators, and - subfield indicators. - """ - if self.isControlField(): - return self.data - string = "" - for subfield in self: - string += subfield[1] - return string - - def getSubfields( self, *codes ): - """ - getSubfields() accepts one or more subfield codes and will return a list - of subfield values. The order of the subfield values in the list - will be the order that they appear in the field. - - print field.getSubfields( 'a' ) - - print field.getSubfields( 'a', 'b', 'z' ) - """ - values = [] - for subfield in self: - if subfield[0] in codes: - values.append( subfield[1] ) - return values - - def addSubfield( self, code, value ): - """ - Adds a subfield code/value pair to the field. - - field.addSubfield('u', 'http://www.loc.gov') - """ - self.subfields.append(code) - self.subfields.append(value) - - def isControlField( self ): - """ - returns true or false if the field is considered a control field. - Control fields lack indicators and subfields. - """ - if self.tag < '010': - return True - return False - - def asMARC21( self ): - """ - used during conversion of a field to raw marc - """ - if self.isControlField(): - return self.data + END_OF_FIELD - marc = str(self.indicator1) + str(self.indicator2) - for subfield in self: - marc += SUBFIELD_INDICATOR + subfield[0] + subfield[1] - return marc + END_OF_FIELD - diff --git a/tags/rel-0.7/pymarc/reader.py b/tags/rel-0.7/pymarc/reader.py deleted file mode 100644 index 4201394..0000000 --- a/tags/rel-0.7/pymarc/reader.py +++ /dev/null @@ -1,58 +0,0 @@ -from pymarc import Record, Field -from constants import END_OF_RECORD -from exceptions import * -from types import * -import string - -class Reader( object ): - """ - A base class for all iterating readers in the pymarc package. - """ - def __iter__( self ): - return self - -class MARCReader( Reader ): - """ - An iterator class for reading a file of MARC21 records. - - Simple usage: - - from pymarc import MARCReader - - ## pass in a filename - reader = MARCReader( 'file.dat' ) - for record in reader: - ... - - ## pass in a file object - f = file( 'file.dat' ); - reader = MARCReader( f ) - for record in reader: - ... - - """ - - def __init__( self, f ): - """ - The constructor which you can pass either the full path to a file - you want to read, or a file object. - """ - if ( type( f ) == FileType ): self.fh = f - else: self.fh = file( f, 'r' ) - - def next( self ): - """ - To support iteration. - """ - first5 = self.fh.read( 5 ) - if not first5: - raise StopIteration - if len( first5 ) < 5: - raise RecordLengthInvalid - - length = int( first5 ) - chunk = self.fh.read( length - 5 ) - chunk = first5 + chunk - r = Record( chunk ) - return r - diff --git a/tags/rel-0.7/pymarc/record.py b/tags/rel-0.7/pymarc/record.py deleted file mode 100644 index 671d444..0000000 --- a/tags/rel-0.7/pymarc/record.py +++ /dev/null @@ -1,255 +0,0 @@ -from exceptions import * -from constants import * -from field import * -from types import * -import string -import re - - -class Record( object ): - """ - Record - - A class for representing a MARC record. Each Record object is made up of - multiple Field objects. You'll probably want to look at the docs for Field - to see how to fully use a Record object. - - Basic usage: - - field = Field( \ - tag = '245', - indicators = ['0','1'], - subfields = [ \ - 'a', 'The pragmatic programmer : ', - 'b', 'from journeyman to master /', - 'c', 'Andrew Hunt, David Thomas.' ] - - record.addField( field ) - - Or creating a record from a chunk of MARC in transmission format: - - record = Record( data=chunk ) - - Or getting a record as serialized MARC21. - - raw = record.asMARC21() - - You'll normally want to use a MARCReader object to iterate through - MARC records in a file. - """ - - def __init__( self, data='' ): - self.leader = ' ' * LEADER_LEN - self.fields = list() - self.pos = 0 - if len(data) > 0: - ok = self.decodeMARC( data ) - - def __str__( self ): - """ - In a string context a Record object will return a prettified version - of the record resembling something like this: - """ - # join is significantly faster than concatenation - text = "LDR %s\n" % self.leader - text += string.join( map( str, self.fields ), "\n" ) - return text - - def __getitem__( self, tag ): - """ - Allows a shorthand lookup by tag: - - record["245"] - - """ - fields = self.getFields( tag ) - if len(fields) > 0: return fields[0] - return None - - def __iter__( self ): - self.__pos = 0 - return self - - def next(self): - if self.__pos >= len( self.fields ): - raise StopIteration - self.__pos += 1 - return self.fields[ self.__pos-1 ] - - def addField( self, *fields ): - """ - addField() will add pymarc.Field objects to a Record object. - Optionally you can pass in multiple fields. - """ - for field in fields: - self.fields.append( field ) - - def getFields( self, *args ): - """ - When passed a tag ( '245' ) getFields() will return a list of all the - fields in a record with a given tag. - - title = record.getFields( '245' ) - - If no fields with the specified - tag are found then an empty list is returned. If you are interested - in more than one tag you can pass in a list: - - subjects = record.getFields( '600', '610', '650' ) - - If no tag is passed in to fields() a list of all the fields will be - returned. - """ - found = list() - for field in self.fields: - if field.tag in args: - found.append( field ) - return found - - def decodeMARC( self, marc ): - """ - decodeMARC() accepts a MARC record in transmission format as a - a string argument, and will populate the object based on the data - found. The Record constructor actually uses decodeMARC() behind - the scenes when you pass in a chunk of MARC data to it. - - """ - - # extract record leader - self.leader = marc[ 0 : LEADER_LEN ] - if len( self.leader ) != LEADER_LEN: raise RecordLeaderInvalid - - # extract the byte offset where the record data starts - baseAddress = int( marc[ 12 : 17 ] ) - if baseAddress <= 0: raise BaseAddressNotFound - if baseAddress >= len( marc ): raise BaseAddressInvalid - - # extract directory, baseAddress-1 is used since the - # director ends with an END_OF_FIELD byte - directory = marc[ LEADER_LEN : baseAddress-1 ] - - # determine the number of fields in record - if len(directory) % DIRECTORY_ENTRY_LEN <> 0: - raise RecordDirectoryInvalid - numFields = len( directory ) / DIRECTORY_ENTRY_LEN - - # add fields to our record using directory offsets - fieldNum = 0 - while ( fieldNum < numFields ): - entryStart = fieldNum * DIRECTORY_ENTRY_LEN - entryEnd = entryStart + DIRECTORY_ENTRY_LEN - entry = directory[ entryStart : entryEnd ] - entryTag = entry[ 0 : 3 ] - entryLength = int( entry[ 3 : 7 ] ) - entryOffset = int( entry[ 7 : 12 ] ) - entryData = marc[ baseAddress + entryOffset : - baseAddress + entryOffset + entryLength - 1 ] - - if entryTag < '010': - field = Field( tag=entryTag, data=entryData ) - else: - subfields = list() - subs = entryData.split( SUBFIELD_INDICATOR ) - i1 = subs[0][0] - i2 = subs[0][1] - for subfield in subs[1:]: - if len(subfield) == 0: continue - code = subfield[0] - data = subfield[1:] - subfields.append( code ) - subfields.append( data ) - field = Field( - tag = entryTag, - indicators = [ i1, i2 ], - subfields = subfields ) - - self.addField( field ) - fieldNum += 1 - - if fieldNum == 0: raise NoFieldsFound - - def asMARC21( self ): - """ - returns the record serialized as MARC21 - """ - fields = '' - directory = '' - offset = 0 - - # build the directory - # each element of the directory includes the tag, the byte length of - # the field and the offset from the base address where the field data - # can be found - for field in self.fields: - fieldData = field.asMARC21() - fields += fieldData - directory += "%03d%04d%05d" % (int(field.tag),len(fieldData),offset) - offset += len( fieldData ) - - # directory ends with an end of field - directory += END_OF_FIELD - - # field data ends with an end of record - fields += END_OF_RECORD - - # the base address where the directory ends and the field data begins - baseAddress = LEADER_LEN + len(directory) - - # figure out the length of the record - recordLength = baseAddress + len(fields) - - # update the leader with the current record length and base address - # the lengths are fixed width and zero padded - self.leader = "%05d%s%05d%s" % \ - ( recordLength, self.leader[5:12], baseAddress, self.leader[17:] ) - - # return the encoded record - return self.leader + directory + fields - - def title( self ): - """ - Returns the title of the record (245 $a an $b). - """ - title = None - try: - title = self['245']['a'] - title += self['245']['b'] - except TypeError, e: - pass - return title - - def isbn( self ): - """ - Returns an ISBN if appropriate. If not present None will - be returned. - """ - isbn = None - try: - # if anyone ever cares alot about performance - # this compilation could be moved out and compiled once - isbnPattern = re.compile( '^([0-9A-Za-z]+)' ) - isbn = isbnPattern.match( self["020"]["a"] ).group(1) - except Exception, e: - pass - return isbn - - def author( self ): - # todo - pass - - def publisher( self ): - # todo - pass - - def pubyear( self ): - # todo - pass - - def subjects( self ): - # todo - pass - - def notes( self ): - # todo - pass - diff --git a/tags/rel-0.7/pymarc/writer.py b/tags/rel-0.7/pymarc/writer.py deleted file mode 100644 index 6696e03..0000000 --- a/tags/rel-0.7/pymarc/writer.py +++ /dev/null @@ -1,46 +0,0 @@ -from pymarc import Record, Field, WriteNeedsRecord, NoActiveFile -from types import * -import string - -class Writer( object ): - - def write( self ): - pass - -class MARCWriter( Writer ): - """ - A class for writing MARC21 records in transmission format. - - Simple usage: - - from pymarc import MARCWriter - - ## pass in a filename - writer = MARCWriter( 'file.dat' ) - writer.write( record ) - - ## pass in a file object - f = file( 'file.dat' ); - writer = MARCWriter( f ) - writer.write( record ) - """ - - def __init__( self, f ): - """ - The constructor which you can pass either the full path to a file - you want to write to, or a file object. - """ - if ( type( f ) == FileType ): self.fh = f - else: self.fh = file( f, 'w' ) - - def write( self, record ): - if type( record ) != Record: - raise WriteNeedsRecord - if type( self.fh ) != file: - raise NoActiveFile - self.fh.write( record.asMARC21() ) - - def close( self ): - self.fh.close() - self.fh = None - diff --git a/tags/rel-0.7/setup.py b/tags/rel-0.7/setup.py deleted file mode 100644 index 458b24c..0000000 --- a/tags/rel-0.7/setup.py +++ /dev/null @@ -1,35 +0,0 @@ -import sys -from distutils.core import setup - -classifiers = """\ -Intended Audience :: Education -Intended Audience :: Developers -Intended Audience :: Information Technology -License :: OSI Approved :: BSD License -Programming Language :: Python -Topic :: Text Processing :: General -""" - -# workaround for older pythons that don't -# understand classifiers - -if sys.version_info < (2, 3): - _setup = setup - def setup(**kwargs): - if kwargs.has_key("classifiers"): - del kwargs["classifiers"] - _setup(**kwargs) - -setup( - name = 'pymarc', - version = '0.7', - url = 'http://www.textualize.com/pymarc', - download_url = 'http://www.textualize.com/archive/pymarc/latest.tar.gz', - author = 'Ed Summers', - author_email = 'ehs@pobox.com', - license = 'http://www.opensource.org/licenses/bsd-license.php', - packages = [ 'pymarc' ], - description = "read, write and modify MARC bibliographic data", - classifiers = filter( None, classifiers.split("\n") ), -) - diff --git a/tags/rel-0.7/test.py b/tags/rel-0.7/test.py deleted file mode 100644 index 8ea1517..0000000 --- a/tags/rel-0.7/test.py +++ /dev/null @@ -1,19 +0,0 @@ -import unittest -import test.record -import test.field -import test.reader -import test.encode -import test.writer - -def suite(): - suite = unittest.TestSuite() - suite.addTest( test.record.suite() ) - suite.addTest( test.field.suite() ) - suite.addTest( test.reader.suite() ) - suite.addTest( test.encode.suite() ) - suite.addTest( test.writer.suite() ) - return suite - -runner = unittest.TextTestRunner() -runner.run( suite() ) - diff --git a/tags/rel-0.7/test/__init__.py b/tags/rel-0.7/test/__init__.py deleted file mode 100644 index c297d12..0000000 --- a/tags/rel-0.7/test/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -import record -import field -import reader diff --git a/tags/rel-0.7/test/encode.py b/tags/rel-0.7/test/encode.py deleted file mode 100644 index 29240d9..0000000 --- a/tags/rel-0.7/test/encode.py +++ /dev/null @@ -1,25 +0,0 @@ -import util -from pymarc import MARCReader, Record, Field -import unittest -import os - -class Encode( unittest.TestCase ): - - def testEncodeDecode( self ): - # get raw data from file - original = file( 'test/one.dat' ).read() - # create a record object for the file - reader = MARCReader( "test/one.dat" ) - record = reader.next() - # make sure original data is the same as - # the record encoded as MARC - raw = record.asMARC21() - self.assertEqual( original, raw ) - -def suite(): - suite = unittest.makeSuite( Encode, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - diff --git a/tags/rel-0.7/test/field.py b/tags/rel-0.7/test/field.py deleted file mode 100644 index e7366a0..0000000 --- a/tags/rel-0.7/test/field.py +++ /dev/null @@ -1,73 +0,0 @@ -import util -import unittest -from pymarc.record import Record, Field - -class FieldTest( unittest.TestCase ): - - def setUp( self ): - self.field = Field( - tag = '245', - indicators = [ 0, 1 ], - subfields = [ - 'a', 'Huckleberry Finn: ', - 'b', 'An American Odyssey' - ] - ) - - def testString( self ): - self.assertEquals( str(self.field), - '245 01 $aHuckleberry Finn: $bAn American Odyssey') - - def testIndicators( self ): - assert self.field.indicator1 is 0 - self.assertEqual( self.field.indicator2, 1 ) - - def testSubfieldsCreated( self ): - subfields = self.field.subfields - self.assertEqual( len( subfields ), 4 ) - - def testSubfieldShort( self ): - self.assertEqual( self.field['a'], 'Huckleberry Finn: ' ) - self.assertEqual( self.field['z'], None ) - - def testSubfields( self ): - self.assertEqual( self.field.getSubfields( 'a' ), - ['Huckleberry Finn: '] ) - - def testSubfieldsMulti( self ): - self.assertEqual( self.field.getSubfields( 'a','b' ), - ['Huckleberry Finn: ', 'An American Odyssey' ] ) - - def testEncode( self ): - self.field.asMARC21() - - def testIterator( self ): - string = "" - for subfield in self.field: - string += subfield[0] - string += subfield[1] - self.assertEquals( string, "aHuckleberry Finn: bAn American Odyssey" ) - - def testValue( self ): - self.assertEquals( self.field.value(), - 'Huckleberry Finn: An American Odyssey' ) - controlField = Field( tag='001', data='foobar' ) - self.assertEquals( controlField.value(), "foobar" ) - - def testNonIntegerTag( self ): - # make sure this doesn't throw an exception - f = Field( tag="3 0", indicators=[0,1], subfields=['a', 'foo'] ) - - def testAddSubfield( self ): - f = Field( tag="245", indicators=[0,1], subfields=['a', 'foo'] ) - f.addSubfield('a','bar') - self.assertEquals( f.__str__(), '245 01 $afoo$abar') - -def suite(): - suite = unittest.makeSuite( FieldTest, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - - diff --git a/tags/rel-0.7/test/marc.dat b/tags/rel-0.7/test/marc.dat deleted file mode 100644 index 9c52c7d..0000000 --- a/tags/rel-0.7/test/marc.dat +++ /dev/null @@ -1 +0,0 @@ -01060cam 22002894a 45000010009000000050017000090080041000260350021000679060045000889250044001339550160001779550053003370100017003900200015004070400018004220420008004400500023004480820014004711000025004852450088005102600044005983000027006425040041006696500026007107000026007369850008007621177850420040816084925.0990802s2000 mau b 001 0 eng  a(DLC) 99043581 a0bvipcorignewd1eocipf19gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc05 to ja00 08-02-99; jf05 to subj. 08/02/99; jf11 to sl 08-03-99; jf25 08-05-99 to ddc; bk rec'd, to CIP ver. ps07 01-07-00; CIP ver jf05 to sl 04/05/00 aADDED COPIES: another copy to ASCD ps15 01-12-00 a 99043581  a020161622X aDLCcDLCdDLC apcc00aQA76.6b.H857 200000a005.12211 aHunt, Andrew,d1964-14aThe pragmatic programmer :bfrom journeyman to master /cAndrew Hunt, David Thomas. aReading, Mass :bAddison-Wesley,c2000. axxiv, 321 p. ;c24 cm. aIncludes bibliographical references. 0aComputer programming.1 aThomas, David,d1956- eGAP00979cam 2200241 a 45000010009000000050017000090080041000269060045000679250042001129550206001540100017003600200015003770400018003920500026004100820017004361000016004532450037004692500012005062600051005183000078005695040051006476500039006981251588220020923085341.0010827s2001 cc a b 001 0 eng  a7bcbccorigcopd2encipf20gy-gencatlg0 aacquireb2 shelf copyxpolicy default apb07 2001-08-27 to ASCDajf00 2001-08-31ajf00 2001-09-05;cjf03 2001-10-16 to Subj.djf01 2001-10-25 to slejf12 2001-11-23; jf12 to Dewey 11-23-01aaa20 2001-12-07; copy 2 added jf16 to BCCD 09-23-02 a 2001276084 a0596000855 aDLCcDLCdDLC00aQA76.73.P98bL88 200100a005.13/32211 aLutz, Mark.10aProgramming Python /cMark Lutz. a2nd ed. aBeijing :aSebastopol, CA :bO'Reilly,cc2001. axxxvii, 1255 p. :bill. ;c24 cm. +e1 computer optical disc (4 3/4 in.). aIncludes bibliographical references and index. 0aPython (Computer program language)00887cam 2200253 a 45000010009000000050017000090080041000269060045000679250044001129550151001560100017003070200015003240400018003390500027003570820017003841000016004012450051004172500012004682600040004803000035005205040020005556500039005757000019006141361051220040714135238.0040601s2004 caua 001 0 eng  a7bcbccorigcopd2encipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apv17 2004-06-01 Preprocessor to ASCDajf00 2004-06-03;cjf03 2004-06-24 to Subj.djf09 2004-06-28 to slejf12 2004-07-01 to Deweyaaa25 2004-07-14 a 2004273129 a0596002815 aDLCcDLCdDLC00aQA76.73.P98bL877 200400a005.13/32221 aLutz, Mark.10aLearning Python /cMark Lutz and David Ascher. a2nd ed. aSebastopol, CA :bO'Reilly,cc2004. axxvi, 591 p. :bill. ;c24 cm. aIncludes index. 0aPython (Computer program language)1 aAscher, David.01038cam 2200289 a 45000010009000000050017000090080041000269060045000679250042001129550167001540100017003210150015003380200015003530350023003680400023003910420014004140500026004280820017004542450065004712600039005363000027005755000048006025000020006506500039006707000020007097000019007291306994220030606071827.0030127s2002 cau 001 0 eng  a7bcbcccopycatd2encipf20gy-gencatlg0 aacquireb2 shelf copyxpolicy default aps04 2003-01-27 to ASCDajf00 2003-01-30cjf05 2003-01-30 to subj.djf09 2003-01-30 to slejf12 2003-02-03 to Deweyaaa20 2003-03-10ajg07 2003-06-06 copy 2 added a 2003268354 aGBA2-Y6761 a0596001673 a(OCoLC)ocm49044543 aUKMcUKMdCUSdDLC alccopycat00aQA76.73.P98bP95 200200a005.13/322100aPython cookbook /cedited by Alex Martelli and David Ascher. aSebastopol, CA :bO'Reilly,c2002. axxix, 574 p. ;c24 cm. a"Recipes from the Python community"--Cover. aIncludes index. 0aPython (Computer program language)1 aMartelli, Alex.1 aAscher, David.00759nam 22002295a 45000010009000000050017000090080041000260350022000679060045000899250044001349550020001780100017001980200015002150400013002300420008002431000021002512450068002722600084003402630009004243000012004339630084004451312796220030318153335.0030318s2003 inu 000 0 eng  a(DLC) 2003104024 a0bibccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2003-03-18 a 2003104024 a1592000738 aDLCcDLC apcc1 aDawson, Michael.10aPython programming for the absolute beginner /cMichael Dawson. aIndianapolis, IN :bPremier Press Inc., a division of Course Technology,c2003. a0306 ap.ccm. aMargaret Bauer ; phone (812) 273-0561 ; fax null email margaret_bauer@yahoo.com01304cam 22002894a 45000010009000000050017000090080041000269060045000679250044001129550280001560100017004360200015004530400018004680420008004860500024004940820017005181000049005352450150005842460030007342600053007643000036008175040064008536500026009176500023009437000021009667000027009871256551420020718085037.0011016s2002 njua b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2001-10-16 to ASCD;cjf03 2001-10-17 to Subj.djf01 2001-10-25 to slejf25 2001-10-25 to Deweyaaa20 2001-10-26aps16 2002-01-11 bk rec'd, to CIP ver.ajf00 2002-01-16fjf04 2002-01-18 to S.L.gjf12 2002-01-18 to bccdajf00 2002-03-26; copy 2 added jf16 to BCCD 07-18-02 a 2001055410 a0130410659 aDLCcDLCdDLC apcc00aQA76.625b.T48 200200a005.2/762211 aThiruvathukal, George K.q(George Kuriakose)10aWeb programming :btechniques for integrating Python, Linux, Apache, and MySQL /cGeorge K. Thiruvathukal, John P. Shafaee, Thomas W. Christoper.14aWeb programming in Python aUpper Saddle River, NJ :bPrentice Hall,cc2002. axviii, 745 p. :bill. ;c24 cm. aIncludes bibliographical references (p. 723-725) and index. 0aInternet programming. 0aWeb sitesxDesign.1 aShafaee, John P.1 aChristopher, Thomas W.01023cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550168001560100017003240200035003410400018003760420008003940500026004020820016004281000029004442450067004732500012005402600051005523000035006035000020006386500039006586300021006977000027007181187737320010105091546.0991228s2000 cc a 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc01 12-28-99; jf03 01-04-00 ; jf11 to sl 1-4-00; jf12 to Dewey 01-06-00; aa05 01-10-00; CIP ver. pv08 to BCCD 05-01-00; copy 2 added jf16 to BCCD 01-05-01 a 99085714  a1565926218 (pbk. : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P98bH36 200000a005.2652211 aHammond, Markq(Mark J.)10aPython programming on Win32 /cMark Hammond and Andy Robinson. a1st ed. aBeijing ;aSebastopol, CA :bO'Reilly,cc2000. axvii, 652 p. :bill. ;c24 cm. aIncludes index. 0aPython (Computer program language)00aMicrosoft Win32.1 aRobinson, Andy,d1967-00867cam 22002538a 45000010009000000050017000090080041000269060045000679250044001129550127001560100017002830200015003000400013003150420008003280500026003360820017003621000019003792450080003982600047004782630009005253000011005346500039005459630029005841343237720031222144424.0031211s2003 oru 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc27 2003-12-11 RUSH to ASCDcjf07 2003-12-17 to subjectdjf09 2003-12-17 to slejp05 2003-12-18 to Deweyaaa20 2003-12-22 a 2003064366 a1887902996 aDLCcDLC apcc00aQA76.73.P98bZ45 200300a005.13/32221 aZelle, John M.10aPython programming :ban introduction to computer science /cJohn M. Zelle. aWilsonville, OR :bFranklin, Beedlec2003. a0312 ap. cm. 0aPython (Computer program language) aTom Sumner, 503-682-766801008cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550171001560100017003270200015003440400018003590420008003770500026003850820018004111000026004292450065004552600046005203000034005665000020006006500039006206500026006596500023006857000022007081222727720030509151148.0001109s2002 inua 001 0 eng  a7bcbccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 11-09-00apv11 2002-04-12 2 copies to ASCDajf00 2002-04-18;cjf03 2002-08-20 to Subj.djf09 2002-08-21 to slejf25 2002-09-10 2 copies to Deweyaaa05 2002-10-04 a 00110884  a0735710902 aDLCcDLCdDLC apcc00aQA76.73.P98bH65 200200a005.2/7622211 aHolden, Steve,d1950-10aPython Web programming /cSteve Holden [with David Beazley]. aIndianapolis, Ind. :bNew Riders,cc2002. axxi, 691 p. :bill. ;c23 cm. aIncludes index. 0aPython (Computer program language) 0aInternet programming. 0aWeb sitesxDesign.1 aBeazley, David M.01049cam 22002534a 45000010009000000050017000090080041000269060045000679250044001129550148001560100017003040200015003210400018003360420008003540500026003620820017003881000018004052450047004232600052004703000066005225040051005885380117006396500039007561216916820010522141328.0000911s2000 nju b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc16 09-11-00; jf02 09-12-00 ; jf11 to sl 9-12-00; jf12 to Dewey 09-14-00; aa05 09-14-00; CIP Ver. jf02 05-11-01; jf12 to BCCD 05-22-01 a 00047856  a0130260363 aDLCcDLCdDLC apcc00aQA76.73.P98bC48 200100a005.13/32211 aChun, Wesley.10aCore python programming /cWesley J. Chun. aUpper Saddle River, NJ :bPrentice Hall,c2001. axxix, 771 p. ;c24 cm. +e1 computer optical disc (4 3/4 in.) aIncludes bibliographical references and index. aSystem requirements for accompanying computer disc: Windows 9x/Me/NT/2000; a Web brouser; Macintosh; UNIX/Linux. 0aPython (Computer program language)00948cam 22002654a 45000010009000000050017000090080041000269060045000679250044001129550133001560100017002890200015003060400018003210420008003390500026003470820017003731000021003902450055004112600038004663000036005045040051005406500039005916500036006306300016006661213218820010817152505.0000804s2000 ctua b 001 0 eng  a7bcbccorignewd2encipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pb05 08-04-00;jfoo 08-08-00;cjf03 2001-07-18 to Subj.djf02 2001-07-19 to slejf25 2001-07-31 to Deweyaaa20 2001-08-17 a 00697831  a1884777813 aDLCcDLCdDLC apcc00aQA76.73.P98bG73 200000a005.13/32211 aGrayson, John E.10aPython and Tkinter programming /cJohn E. Grayson. aGreenwich, CT :bManning,cc2000. axxiii, 658 p. :bill. ;c24 cm. aIncludes bibliographical references and index. 0aPython (Computer program language) 0aTcl (Computer program language)00aTk toolkit.00767nam 22002295a 45000010009000000050017000090080041000260350022000679060045000899250044001349550020001780100017001980200015002150400013002300420008002432450081002512600079003322630009004113000012004204400021004329630084004531337832520031020153106.0031020s2003 inu 000 0 eng  a(DLC) 2003114351 a0bibccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc10 2003-10-20 a 2003114351 a1592000770 aDLCcDLC apcc00aGame programming with Python, Lua, and Ruby /c[edited by] Estelle Manticas. aIndianapolis, IN :bPremier Press, a Division of Course Technology,c2003. a0311 ap.ccm. aGame development aMargaret Bauer ; phone (812) 273-0561 ; fax null email margaret_bauer@yahoo.com01121cam 22002414a 45000010009000000050017000090080041000269060045000679250044001129550362001560100017005180200015005350400018005500420008005680500026005760820017006021000027006192450058006462600052007043000033007565040051007896500039008401256552920030227150222.0011016s2002 njua b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2001-10-16 to ASCD;cjf05 2001-10-17 to subj.djf04 2001-10-17 to S.L.ejf25 2001-10-25 to Deweyaaa20 2001-10-26aps11 2002-01-15 bk rec'd, to CIP ver.fjp07 2002-02-13ajp00 2002-03-08gjp85 2002-03-08 to BCCD; copy 2 added jf16 to BCCD 07-18-02ajf00 2003-01-29ajf07 2003-02-27 somehow copy 1 got back into the CIP ver. stream (handed to acting TL) a 2001055411 a0130409561 aDLCcDLCdDLC apcc00aQA76.73.P98bC47 200200a005.13/32211 aChristopher, Thomas W.10aPython programming patterns /cThomas W. Christopher. aUpper Saddle River, NJ :bPrentice Hall,c2002. axix 538 p. :bill. ;c24 cm. aIncludes bibliographical references and index. 0aPython (Computer program language)01062cam 22002778a 45000010009000000050017000090080041000269060045000679250044001129550120001560100017002760200028002930400013003210420008003340500026003420820018003681000024003862450134004102600041005442630009005853000011005946500039006056500037006446500039006819630064007201275256420020426115101.0020424s2002 mau 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc21 2002-04-24 to ASCDcjf05 2002-04-25 to subj.djf09 2002-04-25 to slejf25 2002-04-26 to Deweyaaa20 2002-04-26 a 2002066565 a0201616165 (alk. paper) aDLCcDLC apcc00aQA76.73.P98bH54 200200a005.2/7622211 aHightower, Richard.10aPython programming with the Java class libraries :ba tutorial for building Web and Enterprise applications /cRichard Hightower. aBoston, MA :bAddison-Wesley,c2002. a0207 ap. cm. 0aPython (Computer program language) 0aJava (Computer program language) 0aApplication softwarexDevelopment. aMarilyn Rash, 617-848-6509; email: timothy.nicholls@awl.com01012cam 22002294a 45000010009000000050017000090080041000269060045000679250044001129550192001560100017003480200028003650400018003930420008004110500026004190820017004451000017004622450151004792600042006303000071006726500039007431216723920010608101527.0000908s2001 mau b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc21 09-08-00;jf05 (desc) 09/08/00 ; jf11 to sl 9-11-00; jf12 to Dewey 09-12-00;aa03 9-12-00;CIP ver jf05 to sl 01/11/01; jf12 to BCCD 02-01-01; copy 2 added jf16 to BCCD 04-24-01 a 00046921  a0201709384 (alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P48bG38 200100a005.13/32211 aGauld, Alan.10aLearn to program using Python :ba tutorial for hobbyists, self-starters, and all who want to learn the art of computer programming /cAlan Gauld. aReading, MA :bAddison-Wesley,c2001. axii, 270 p. ;c24 cm.e+ 1 computer laser optical disc (4 3/4 in.) 0aPython (Computer program language)00935cam 22002534a 450000100070000000500170000700800410002403500210006590600450008692500440013195501480017501000170032302000220034004000180036204200080038005000260038808200170041410000160043124500610044726000390050830000750054765000390062270000200066120525620000830103214.0990629s2000 caua 001 0 eng  9(DLC) 99065006 a7bcbccorignewd2eopcnf19gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apn08/e-pcn 06-29-99; to ASCD pb02 06-10-00; jf00 06-13-00; jf03 08-17-00 ; jf11 to sl 8-22-00; jf25 2 copies to Dewey 08-24-00; aa19 08-30-2000 a 99065006  a0761523340 (pbk.) aDLCcDLCdDLC apcc00aQA76.73.P98bA48 199900a005.13/32211 aAltom, Tim.10aProgramming with Python /cTim Altom with Mitch Chapman. aRocklin, CA :bPrima Tech,cc1999. axxxiv, 372 p. :bill. ;c24 cm. +e1 computer optical disc (4 3/4 in.) 0aPython (Computer program language)1 aChapman, Mitch.01214cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550202001560100017003580200047003750400018004220420008004400500024004480820017004721000019004892450079005082600051005873000058006386500026006966500048007226500040007706500049008108560077008591328439520040226131230.0030722s2004 maua 001 0 eng  a7bcbccorignewd1eecipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ajf05 2003-07-22cjf05 2003-07-22 to subj.djf09 2003-07-22 to slejf12 2003-07-23 to Deweyaaa20 2003-07-29ajf00 2004-01-29fjf07 2004-02-02ejf12 2004-02-03 to BCCDajf16 2004-02-26 copy2 to BCCD a 2003016400 a1584502681 (Pbk. with CD-ROM : alk. paper) aDLCcDLCdDLC apcc00aQA76.625b.J66 200400a005.2/762221 aJones, M. Tim.10aBSD Sockets programming from a multi-language perspective /cM. Tim Jones. aHingham, Mass. :bCharles River Media,cc2004. axix, 444 p. :bill. ;c24 cm. +e1 CD-ROM (4 3/4 in.) 0aInternet programming. 0aComputer networksxDesign and construction. 0aInternetworking (Telecommunication) 0aProgramming languages (Electronic computers)413Table of contentsuhttp://www.loc.gov/catdir/toc/ecip047/2003016400.html01113cam 2200277 a 4500001000800000005001700008008004100025035002100066906004500087955011600132010001700248020003300265040001800298050002300316082001600339245009800355260004600453300003300499440004900532504006400581650005100645650003600696650002300732700001800755991006200773159816719981112152315.2940902s1995 maua b 001 0 eng  9(DLC) 94034264 a7bcbccorignewd1eocipf19gy-gencatlg apc18 to ja00 09-02-94; jf06 to subj 09-06-94; jf11 to sl 09-06-94; jf12 09-06-94 to ddc; CIP ver. jc03 11-23-94 a 94034264  a0201633612 (acid-free paper) aDLCcDLCdDLC00aQA76.64b.D47 199500a005.1/222000aDesign patterns :belements of reusable object-oriented software /cErich Gamma ... [et al.]. aReading, Mass. :bAddison-Wesley,cc1995. axv, 395 p. :bill. ;c25 cm. 0aAddison-Wesley professional computing series aIncludes bibliographical references (p. 375-381) and index. 0aObject-oriented programming (Computer science) 0aComputer softwarexReusability. 0aSoftware patterns.1 aGamma, Erich. bc-GenCollhQA76.64i.D47 1995p00011185514tCopy 1wBOOKS01233cam 2200289 a 45000010009000000050017000090080041000269060045000679250044001129550226001560100017003820200034003990400013004330500024004460820014004702450065004842460015005492500012005642600043005763000021006195000111006405040068007516500026008196500025008457000022008707000051008921237004420020812080859.0010405s2001 mau b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc20 to ja00 04-05-01; jp07 04-11-01 sent to sl;jp85 to Dewey 04-19-01; aa20 04-20-01aps13 2001-08-16 bk rec'd, to CIP ver.fjf07 2001-08-20ajf00 2001-08-20gjf12 2001-08-23 to bccdajf01 2001-09-13 copy 2 added to BCCD a 2001031277 a0262032937 (hc. : alk. paper) aDLCcDLC00aQA76.6b.I5858 200100a005.122100aIntroduction to algorithms /cThomas H. Cormen ... [et al.].30aAlgorithms a2nd ed. aCambridge, Mass. :bMIT Press,cc2001. axxi, 1180 p. cm. aRev. ed. of: Introduction to algorithms / Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest. c1990. aIncludes bibliographical references (p. [1127]-1130) and index. 0aComputer programming. 0aComputer algorithms.1 aCormen, Thomas H.1 aCormen, Thomas H.tIntroduction to algorithms.01009pam 2200265 a 4500001000800000005001700008008004100025035002100066906004500087955011600132010001700248020002200265040001800287050002600305082001700331100001800348245003700366260005300403300003500456440005200491500002700543504006400570650004400634991006500678303540919960425075058.2951006s1996 njua b 001 0 eng  9(DLC) 95045017 a7bcbccorignewd1eocipf19gy-gencatlg apc17 RUSH to ja00 10-06-95;jf05 to subj. 10/06/95; jf04 to S.L. 10-06-95; jf14 10-10-95; CIP ver. jk14 04-22-96 a 95045017  a0133708756 (pbk.) aDLCcDLCdDLC00aQA76.73.C28bG69 199600a005.13/32201 aGraham, Paul.10aANSI Common Lisp /cPaul Graham. aEnglewood Cliffs, N.J. :bPrentice Hall,cc1996. axiii, 432 p. :bill. ;c23 cm. 0aPrentice Hall series in artificial intelligence a"An Alan R. Apt book." aIncludes bibliographical references (p. 401-414) and index. 0aCOMMON LISP (Computer program language) bc-GenCollhQA76.73.C28iG69 1996p00034751468tCopy 1wBOOKS \ No newline at end of file diff --git a/tags/rel-0.7/test/one.dat b/tags/rel-0.7/test/one.dat deleted file mode 100644 index a43cf54..0000000 --- a/tags/rel-0.7/test/one.dat +++ /dev/null @@ -1 +0,0 @@ -00755cam 22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500fol05731351 IMchF20000613133448.0000107s2000 nyua 001 0 eng  a 00020737  a0471383147 (paper/cd-rom : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P22bM33 200000a005.13/32211 aMartinsson, Tobias,d1976-10aActivePerl with ASP and ADO /cTobias Martinsson. aNew York :bJohn Wiley & Sons,c2000. axxi, 289 p. :bill. ;c23 cm. +e1 computer laser disc (4 3/4 in.) a"Wiley Computer Publishing." 0aPerl (Computer program language)00aActive server pages.00aActiveX. \ No newline at end of file diff --git a/tags/rel-0.7/test/reader.py b/tags/rel-0.7/test/reader.py deleted file mode 100644 index 9d5be6b..0000000 --- a/tags/rel-0.7/test/reader.py +++ /dev/null @@ -1,44 +0,0 @@ -import util -import unittest -import pymarc -import re - -class MARCReaderFilenameTest( unittest.TestCase ): - """ - Tests for the pymarc.MARCReader class which provides iterator - based access to a MARC file. - """ - - def setUp( self ): - self.reader = pymarc.MARCReader( 'test/test.dat' ) - - def testIterator( self ): - count = 0 - for record in self.reader: - count += 1 - self.assertEquals( count, 10, 'found expected amt of MARC21 records' ) - - def testString( self ): - ## basic test of stringification - startsWithLeader = re.compile( "^LDR" ) - hasNumericTag = re.compile( "\n\d\d\d " ) - for record in self.reader: - text = str( record ) - self.failUnless( startsWithLeader.search( text ), 'got leader' ) - self.failUnless( hasNumericTag.search( text ), 'got a tag' ) - -class MARCReaderFileTest( MARCReaderFilenameTest ): - - def setUp( self ): - self.reader = pymarc.reader.MARCReader( file( 'test/test.dat' ) ) - - # inherit same tests from MARCReaderTestFile - -def suite(): - filenameSuite = unittest.makeSuite( MARCReaderFilenameTest, 'test' ) - fileSuite = unittest.makeSuite( MARCReaderFileTest, 'test' ) - suite = unittest.TestSuite( (filenameSuite, fileSuite ) ) - return suite - -if __name__ == "__main__": - unittest.main() diff --git a/tags/rel-0.7/test/record.py b/tags/rel-0.7/test/record.py deleted file mode 100644 index 98e5d74..0000000 --- a/tags/rel-0.7/test/record.py +++ /dev/null @@ -1,99 +0,0 @@ -import util -import unittest - -from pymarc import Record, Field -from pymarc.exceptions import * - -class RecordTest( unittest.TestCase ): - - def testAddField( self ): - record = Record() - field = Field( - tag = '245', - indicators = [ '1', '0' ], - data = [ 'a', 'Python', 'c', 'Guido' ] ) - record.addField( field ) - self.failUnless( field in record.fields, msg='found field' ) - - def testQuickAccess( self ): - record = Record() - title = Field( - tag = '245', - indicators = [ '1', '0' ], - data = [ 'a', 'Python', 'c', 'Guido' ] ) - record.addField( title ) - self.assertEqual( record['245'], title, 'short access' ) - self.assertEqual( record['999'], None, 'short access with no field' ) - - def testFieldNotFound( self ): - record = Record() - self.assertEquals( len( record.fields ), 0 ) - - def testFind( self ): - record = Record() - subject1 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Programming Language' ] ) - record.addField( subject1 ) - subject2 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Object Oriented' ] ) - record.addField( subject2 ) - found = record.getFields( '650' ) - self.assertEqual( found[0], subject1, 'getFields() item 1' ) - self.assertEqual( found[0], subject1, 'getFields() item 2' ) - - def testMultiFind( self ): - record = Record() - subject1 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Programming Language' ] ) - record.addField( subject1 ) - subject2 = Field( - tag = '651', - indicators = [ '', '0' ], - data = [ 'a', 'Object Oriented' ] ) - record.addField( subject2 ) - found = record.getFields( '650', '651' ) - self.assertEquals( len(found), 2 ) - - def testBadLeader( self ): - record = Record() - self.failUnlessRaises( RecordLeaderInvalid, - record.decodeMARC, 'foo' ) - - def testBadBaseAddress( self ): - record = Record() - self.failUnlessRaises( BaseAddressInvalid, - record.decodeMARC, '00695cam 2200241Ia 45x00' ) - - def testTitle( self ): - record = Record() - self.assertEquals( record.title(), None ) - record.addField( Field( '245', [0,1], - subfields=[ 'a', "Foo :", 'b', 'bar' ] ) ) - self.assertEquals( record.title(), 'Foo :bar' ) - - record = Record() - record.addField( Field( '245', [0,1], - subfields=[ 'a', "Farghin" ] ) ) - self.assertEquals( record.title(), "Farghin" ) - - def testISBN( self ): - record = Record() - self.assertEquals( record.isbn(), None ) - record.addField( Field( '020', [0,1], subfields=['a', '123456789' ] ) ) - self.assertEquals( record.isbn(), '123456789' ) - - -def suite(): - suite = unittest.makeSuite( RecordTest, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - - diff --git a/tags/rel-0.7/test/test.dat b/tags/rel-0.7/test/test.dat deleted file mode 100644 index 68d6dad..0000000 --- a/tags/rel-0.7/test/test.dat +++ /dev/null @@ -1 +0,0 @@ -00755cam 22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500fol05731351 IMchF20000613133448.0000107s2000 nyua 001 0 eng  a 00020737  a0471383147 (paper/cd-rom : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P22bM33 200000a005.13/32211 aMartinsson, Tobias,d1976-10aActivePerl with ASP and ADO /cTobias Martinsson. aNew York :bJohn Wiley & Sons,c2000. axxi, 289 p. :bill. ;c23 cm. +e1 computer laser disc (4 3/4 in.) a"Wiley Computer Publishing." 0aPerl (Computer program language)00aActive server pages.00aActiveX.00647pam 2200241 a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001500161100002600176245006700202260003800269263000900307300001100316650003700327650002500364700001600389fol05754809 IMchF20000601115601.0000203s2000 mau 001 0 eng  a 00022023  a1565926994 aDLCcDLCdDLC apcc00aQA76.73.P22bD47 200000a005.742211 aDescartes, Alligator.10aProgramming the Perl DBI /cAlligator Descartes and Tim Bunce. aCmabridge, MA :bO'Reilly,c2000. a1111 ap. cm. 0aPerl (Computer program language) 0aDatabase management.1 aBunce, Tim.00605cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077040001800094042000800112050002700120082001700147100002100164245005500185260004500240300002600285504005100311650003700362fol05843555 IMchF20000525142739.0000318s1999 cau b 001 0 eng  a 00501349  aDLCcDLCdDLC apcc00aQA76.73.P22bB763 199900a005.13/32211 aBrown, Martin C.10aPerl :bprogrammer's reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axix, 380 p. ;c22 cm. aIncludes bibliographical references and index. 0aPerl (Computer program language)00579cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002700135082001700162100002100179245005500200260004500255300003600300650003700336fol05843579 IMchF20000525142716.0000318s1999 caua 001 0 eng  a 00502116  a0072120002 aDLCcDLCdDLC apcc00aQA76.73.P22bB762 199900a005.13/32211 aBrown, Martin C.10aPerl :bthe complete reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axxxv, 1179 p. :bill. ;c24 cm. 0aPerl (Computer program language)00801nam 22002778a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001800156100002000174245008800194250003200282260004100314263000900355300001100364650003700375650003600412650002600448700002500474700002400499fol05848297 IMchF20000524125727.0000518s2000 mau 001 0 eng  a 00041664  a1565924193 aDLCcDLC apcc00aQA76.73.P22bG84 200000a005.2/7622211 aGuelich, Scott.10aCGI programming with Perl /cScott Guelich, Shishir Gundavaram & Gunther Birznieks. a2nd ed., expanded & updated aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language) 0aCGI (Computer network protocol) 0aInternet programming.1 aGundavaram, Shishir.1 aBirznieks, Gunther.00665nam 22002298a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002700130082001700157111005200174245008600226250001200312260004100324263000900365300001100374650005000385fol05865950 IMchF20000615103017.0000612s2000 mau 100 0 eng  a 00055759  a0596000138 aDLCcDLC apcc00aQA76.73.P22bP475 200000a005.13/32212 aPerl Conference 4.0d(2000 :cMonterey, Calif.)10aProceedings of the Perl Conference 4.0 :bJuly 17-20, 2000, Monterey, California. a1st ed. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)vCongresses.00579nam 22002178a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100002800173245006200201260004100263263000900304300001100313650003700324fol05865956 IMchF20000615102948.0000612s2000 mau 000 0 eng  a 00055770  a1565926099 aDLCcDLC apcc00aQA76.73.P22bB43 200000a005.13/32211 aBlank-Edelman, David N.10aPerl for system administration /cDavid N. Blank-Edelman. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)00661nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100001700173245006700190250001200257260004100269263000900310300001100319650003700330700002300367700001700390fol05865967 IMchF20000615102611.0000614s2000 mau 000 0 eng  a 00055799  a0596000278 aDLCcDLC apcc00aQA76.73.P22bW35 200000a005.13/32211 aWall, Larry.10aProgramming Perl /cLarry Wall, Tom Christiansen & Jon Orwant. a3rd ed. aCambridge, Mass. :bO'Reilly,c2000. a0007 ap. cm. 0aPerl (Computer program language)1 aChristiansen, Tom.1 aOrwant, Jon.00603cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001700161100003200178245006000210260005700270300003300327650003700360fol05872355 IMchF20000706095105.0000315s1999 njua 001 0 eng  a 00500678  a013020868X aDLCcDLCdDLC apcc00aQA76.73.P22bL69 199900a005.13/32211 aLowe, Vincentq(Vincent D.)10aPerl programmer's interactive workbook /cVincent Lowe. aUpper Saddle River, NJ :bPrentice Hall PTP,cc1999. axx, 633 p. :bill. ;c23 cm. 0aPerl (Computer program language)00696nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020002800094040001300122042000800135050002600143082001700169100002600186245004400212260005100256263000900307300001100316500002000327650003700347650001700384650004100401fol05882032 IMchF20000707091904.0000630s2000 cau 001 0 eng  a 00058174  a0764547291 (alk. paper) aDLCcDLC apcc00aQA76.73.P22bF64 200000a005.13/32212 aFoster-Johnson, Eric.10aCross-platform Perl /cEric F. Johnson. aFoster City, CA :bIDG Books Worldwide,c2000. a0009 ap. cm. aIncludes index. 0aPerl (Computer program language) 0aWeb servers. 0aCross-platform software development. \ No newline at end of file diff --git a/tags/rel-0.7/test/util.py b/tags/rel-0.7/test/util.py deleted file mode 100644 index 7ade343..0000000 --- a/tags/rel-0.7/test/util.py +++ /dev/null @@ -1,4 +0,0 @@ -import sys -sys.path.append( '../pymarc' ); - - diff --git a/tags/rel-0.7/test/writer.py b/tags/rel-0.7/test/writer.py deleted file mode 100644 index 5c361a1..0000000 --- a/tags/rel-0.7/test/writer.py +++ /dev/null @@ -1,27 +0,0 @@ -import util -import unittest -import pymarc -import re - -class MARCWriterTest(unittest.TestCase): - - def testWrite(self): - - # write a record off to a file - writer = pymarc.MARCWriter('test/writer-test.dat') - record = pymarc.Record() - field = pymarc.Field('245', ['0','0'], ['a', 'foo']) - record.addField(field) - writer.write(record) - writer.close() - - # read it back in - reader = pymarc.MARCReader('test/writer-test.dat') - record = reader.next() - -def suite(): - suite = unittest.makeSuite(MARCWriterTest, 'test') - return suite - -if __name__ == "__main__": - unittest.main() diff --git a/tags/rel-0.8/Changes b/tags/rel-0.8/Changes deleted file mode 100644 index 7234cae..0000000 --- a/tags/rel-0.8/Changes +++ /dev/null @@ -1,46 +0,0 @@ -v0.8 Mon Jan 30 07:05:36 CST 2006 - - added the ability to read raw marc from strings THIS MAY BREAK - YOUR CODE. pymarc no longer supports passing file paths to the - MARCReader constructor. You need to simply change: - - reader = MARCReader('marc.dat') - - to: - - reader = MARCReader(file('marc.dat')) - - Thanks to Daniel Hoth for suggesting this. It just makes sense to - be able to pass in MARC that you got from a Z39.50 network connection - or database, etc. - -v0.7 Mon Jan 23 15:08:55 EST 2006 - - added addSubfield() to Subfield (thanks Kurt Nordstrom) - -v0.6 Tue Nov 29 20:48:31 CST 2005 - - fixed test suite to run under the unittest that ships with python2.3 - - allow non-integer field tags - - fixed MARCWriter and added test (thanks Mikel Larreategi) - -v0.5 Thu Feb 10 10:01:12 CST 2005 - - handle empty subfields - -v0.4 Wed Feb 2 22:29:33 CST 2005 - - fixed directory validation: thanks Aaron Lav - - added iterator for pymarc.Field for iterating through subfields - - added pymarc.Field.value() for getting a field value easily - -v0.3 Wed Jan 5 17:03:37 CST 2005 - - changed mind about accessors (again): - removed getField() must use getFields() - renamed subfield() to getSubfields() and have it return a list - - added doctest support to pymarc/__init__.py - - added a test batch file of python data - -v0.2 Tue Jan 4 21:01:22 CST 2005 - - removed getField() and renamed getFields() to find() - -v0.11 Mon Jan 3 20:42:19 CST 2005 - - fixed test suite execution - -v0.1 Wed Dec 29 19:54:23 CST 2004 - - initial release diff --git a/tags/rel-0.8/MANIFEST.in b/tags/rel-0.8/MANIFEST.in deleted file mode 100644 index 591cc6d..0000000 --- a/tags/rel-0.8/MANIFEST.in +++ /dev/null @@ -1,3 +0,0 @@ -global-include *.py *.dat -include README MANIFEST.in - diff --git a/tags/rel-0.8/README b/tags/rel-0.8/README deleted file mode 100644 index 78d586c..0000000 --- a/tags/rel-0.8/README +++ /dev/null @@ -1,30 +0,0 @@ -DESCRIPTION ------------ - -pymarc is a python library for working with MARC21 bibliographic data -loosely based on the MARC/Perl suite of modules (http://marcpm.sf.net). -More about pymarc can be found at http://www.textualize.com/pymarc - -INSTALLATION ------------- - -Run the pymarc test suite to make sure things are in order with the -distribution: - - python test.py - -And then install: - - python setup.py install - -For typical usage of this library look at the documentation in -pymarc/__init__.py - -TODO ----- - -- marc8/utf8 translation -- marcxml support - -LICENSE: BSD -AUTHOR: Ed Summers diff --git a/tags/rel-0.8/pymarc/__init__.py b/tags/rel-0.8/pymarc/__init__.py deleted file mode 100644 index 8e5e3ac..0000000 --- a/tags/rel-0.8/pymarc/__init__.py +++ /dev/null @@ -1,71 +0,0 @@ -# __init__.py - -r''' - -The pymarc module provides an API for reading, writing and modifying -MARC records. MARC (MAchine Readable Cataloging) is a metadata format for -bibliographic data. More about MARC can be found at the Library of Congress: -http://lcweb.loc.gov/marc - -Below are some common examples of how you might want to use pymarc. If you -run across an example that you think should be here please contribute it -by writing to the author. - -1. Reading a batch of records and printing out the 245 subfield a. If you - are curious this example uses the batch file available in the distribution. - - >>> from pymarc import MARCReader - >>> reader = MARCReader( 'test/marc.dat' ) - >>> for record in reader: - ... print record['245']['a'] - The pragmatic programmer : - Programming Python / - Learning Python / - Python cookbook / - Python programming for the absolute beginner / - Web programming : - Python programming on Win32 / - Python programming : - Python Web programming / - Core python programming / - Python and Tkinter programming / - Game programming with Python, Lua, and Ruby / - Python programming patterns / - Python programming with the Java class libraries : - Learn to program using Python : - Programming with Python / - BSD Sockets programming from a multi-language perspective / - Design patterns : - Introduction to algorithms / - ANSI Common Lisp / - -2. Creating a record and writing it out to a file. - - >>> from pymarc import Record, Field - >>> record = Record() - >>> record.addField( \ - ... Field( \ - ... tag = '245', - ... indicators = ['0','1'], - ... subfields = [ \ - ... 'a', 'The pragmatic programmer : ', - ... 'b', 'from journeyman to master /', - ... 'c', 'Andrew Hunt, David Thomas.' ] ) ) - >>> out = file( 'file.dat', 'w' ) - >>> out.write( record.asMARC21() ) - -''' - -__version__ = '0.11' - -from record import * -from field import * -from exceptions import * -from reader import * -from writer import * -from constants import * - -if __name__ == "__main__": - import doctest - doctest.testmod() - diff --git a/tags/rel-0.8/pymarc/constants.py b/tags/rel-0.8/pymarc/constants.py deleted file mode 100644 index bd148c2..0000000 --- a/tags/rel-0.8/pymarc/constants.py +++ /dev/null @@ -1,7 +0,0 @@ -LEADER_LEN = 24 -DIRECTORY_ENTRY_LEN = 12 -SUBFIELD_INDICATOR = chr( 0x1F ) -END_OF_FIELD = chr( 0x1E ) -END_OF_RECORD = chr( 0x1D ) - - diff --git a/tags/rel-0.8/pymarc/exceptions.py b/tags/rel-0.8/pymarc/exceptions.py deleted file mode 100644 index 4be03df..0000000 --- a/tags/rel-0.8/pymarc/exceptions.py +++ /dev/null @@ -1,30 +0,0 @@ -class pymarcException( Exception ): - pass - -class RecordLengthInvalid( pymarcException): - def __str__( self ): - return( "Invalid record length in first 5 bytes of record" ) - -class RecordLeaderInvalid( pymarcException ): - def __str__ ( self ): - return "Unable to extract record leader" - -class RecordDirectoryInvalid( pymarcException ): - def __str__( self ): - return "Invalid directory" - -class NoFieldsFound( pymarcException ): - def __str__ ( self ): - return "Unable to locate fields in record data" - -class BaseAddressInvalid( pymarcException ): - def __str__ ( self ): - return "Base address exceeds size of record" - -class WriteNeedsRecord( pymarcException ): - def __str__( self ): - return "Write requires a pymarc.Record object as an argument" - -class NoActiveFile( pymarcException ): - def __str__( self ): - return "There is no active file to write to in call to write" diff --git a/tags/rel-0.8/pymarc/field.py b/tags/rel-0.8/pymarc/field.py deleted file mode 100644 index fac5897..0000000 --- a/tags/rel-0.8/pymarc/field.py +++ /dev/null @@ -1,127 +0,0 @@ -from constants import * -from exceptions import * - -class Field( object ): - - def __init__( self, tag, indicators=[], subfields=[], data='' ): - """ - Field() pass in the field tag, indicators and subfields for the tag. - - field = Field( \ - tag = '245', - indicators = ['0','1'], - subfields = [ \ - 'a', 'The pragmatic programmer : ', - 'b', 'from journeyman to master /', - 'c', 'Andrew Hunt, David Thomas.' ] - - If you want to create a control field you don't pas in the indicators - and use a data parameter rather than a subfields parameter: - - field = Field( tag='001', data='fol05731351' ) - - """ - tag = "%03s" % tag - if ( tag < '010' ): - self.tag = tag - self.data = data - else: - self.tag = tag - self.indicator1 = indicators[0] - self.indicator2 = indicators[1] - self.subfields = subfields - - def __iter__(self): - self.__pos = 0 - return self - - def __str__( self ): - """ - A Field object in a string context will return the tag, indicators - and subfield as a string. - """ - if ( self.isControlField() ): - text = "%s %s" % ( self.tag, self.data ) - else: - text = "%s %s%s " % ( self.tag, self.indicator1, self.indicator2 ) - for subfield in self: - text += ("$%s%s" % subfield) - return text - - def __getitem__( self, subfield ): - """ - Retrieve the first subfield with a given subfield code in a field: - - field['a'] - - Handy for quick lookups. - """ - subfields = self.getSubfields( subfield ) - if len(subfields) > 0: return subfields[0] - return None - - def next( self ): - while self.__pos < len(self.subfields): - subfield = ( self.subfields[ self.__pos ], \ - self.subfields[ self.__pos+1 ] ) - self.__pos += 2 - return subfield - raise StopIteration - - def value( self ): - """ - Returns the field as a string without tag, indicators, and - subfield indicators. - """ - if self.isControlField(): - return self.data - string = "" - for subfield in self: - string += subfield[1] - return string - - def getSubfields( self, *codes ): - """ - getSubfields() accepts one or more subfield codes and will return a list - of subfield values. The order of the subfield values in the list - will be the order that they appear in the field. - - print field.getSubfields( 'a' ) - - print field.getSubfields( 'a', 'b', 'z' ) - """ - values = [] - for subfield in self: - if subfield[0] in codes: - values.append( subfield[1] ) - return values - - def addSubfield( self, code, value ): - """ - Adds a subfield code/value pair to the field. - - field.addSubfield('u', 'http://www.loc.gov') - """ - self.subfields.append(code) - self.subfields.append(value) - - def isControlField( self ): - """ - returns true or false if the field is considered a control field. - Control fields lack indicators and subfields. - """ - if self.tag < '010': - return True - return False - - def asMARC21( self ): - """ - used during conversion of a field to raw marc - """ - if self.isControlField(): - return self.data + END_OF_FIELD - marc = str(self.indicator1) + str(self.indicator2) - for subfield in self: - marc += SUBFIELD_INDICATOR + subfield[0] + subfield[1] - return marc + END_OF_FIELD - diff --git a/tags/rel-0.8/pymarc/reader.py b/tags/rel-0.8/pymarc/reader.py deleted file mode 100644 index 8258868..0000000 --- a/tags/rel-0.8/pymarc/reader.py +++ /dev/null @@ -1,56 +0,0 @@ -from pymarc import Record, Field -from constants import END_OF_RECORD -from exceptions import * -from types import * -from cStringIO import StringIO - -class Reader( object ): - """ - A base class for all iterating readers in the pymarc package. - """ - def __iter__( self ): - return self - -class MARCReader( Reader ): - """ - An iterator class for reading a file of MARC21 records. - - Simple usage: - - from pymarc import MARCReader - - ## pass in a file object - reader = MARCReader(file('file.dat')) - for record in reader: - ... - - ## pass in marc in transmission format - reader = MARCReader(rawmarc) - for record in reader: - ... - - """ - - def __init__(self, f): - """ - The constructor which you can pass either raw marc or a file object. - """ - if (type(f) == FileType): self.fh = f - else: self.fh = StringIO(f) - - def next( self ): - """ - To support iteration. - """ - first5 = self.fh.read( 5 ) - if not first5: - raise StopIteration - if len( first5 ) < 5: - raise RecordLengthInvalid - - length = int( first5 ) - chunk = self.fh.read( length - 5 ) - chunk = first5 + chunk - r = Record( chunk ) - return r - diff --git a/tags/rel-0.8/pymarc/record.py b/tags/rel-0.8/pymarc/record.py deleted file mode 100644 index 671d444..0000000 --- a/tags/rel-0.8/pymarc/record.py +++ /dev/null @@ -1,255 +0,0 @@ -from exceptions import * -from constants import * -from field import * -from types import * -import string -import re - - -class Record( object ): - """ - Record - - A class for representing a MARC record. Each Record object is made up of - multiple Field objects. You'll probably want to look at the docs for Field - to see how to fully use a Record object. - - Basic usage: - - field = Field( \ - tag = '245', - indicators = ['0','1'], - subfields = [ \ - 'a', 'The pragmatic programmer : ', - 'b', 'from journeyman to master /', - 'c', 'Andrew Hunt, David Thomas.' ] - - record.addField( field ) - - Or creating a record from a chunk of MARC in transmission format: - - record = Record( data=chunk ) - - Or getting a record as serialized MARC21. - - raw = record.asMARC21() - - You'll normally want to use a MARCReader object to iterate through - MARC records in a file. - """ - - def __init__( self, data='' ): - self.leader = ' ' * LEADER_LEN - self.fields = list() - self.pos = 0 - if len(data) > 0: - ok = self.decodeMARC( data ) - - def __str__( self ): - """ - In a string context a Record object will return a prettified version - of the record resembling something like this: - """ - # join is significantly faster than concatenation - text = "LDR %s\n" % self.leader - text += string.join( map( str, self.fields ), "\n" ) - return text - - def __getitem__( self, tag ): - """ - Allows a shorthand lookup by tag: - - record["245"] - - """ - fields = self.getFields( tag ) - if len(fields) > 0: return fields[0] - return None - - def __iter__( self ): - self.__pos = 0 - return self - - def next(self): - if self.__pos >= len( self.fields ): - raise StopIteration - self.__pos += 1 - return self.fields[ self.__pos-1 ] - - def addField( self, *fields ): - """ - addField() will add pymarc.Field objects to a Record object. - Optionally you can pass in multiple fields. - """ - for field in fields: - self.fields.append( field ) - - def getFields( self, *args ): - """ - When passed a tag ( '245' ) getFields() will return a list of all the - fields in a record with a given tag. - - title = record.getFields( '245' ) - - If no fields with the specified - tag are found then an empty list is returned. If you are interested - in more than one tag you can pass in a list: - - subjects = record.getFields( '600', '610', '650' ) - - If no tag is passed in to fields() a list of all the fields will be - returned. - """ - found = list() - for field in self.fields: - if field.tag in args: - found.append( field ) - return found - - def decodeMARC( self, marc ): - """ - decodeMARC() accepts a MARC record in transmission format as a - a string argument, and will populate the object based on the data - found. The Record constructor actually uses decodeMARC() behind - the scenes when you pass in a chunk of MARC data to it. - - """ - - # extract record leader - self.leader = marc[ 0 : LEADER_LEN ] - if len( self.leader ) != LEADER_LEN: raise RecordLeaderInvalid - - # extract the byte offset where the record data starts - baseAddress = int( marc[ 12 : 17 ] ) - if baseAddress <= 0: raise BaseAddressNotFound - if baseAddress >= len( marc ): raise BaseAddressInvalid - - # extract directory, baseAddress-1 is used since the - # director ends with an END_OF_FIELD byte - directory = marc[ LEADER_LEN : baseAddress-1 ] - - # determine the number of fields in record - if len(directory) % DIRECTORY_ENTRY_LEN <> 0: - raise RecordDirectoryInvalid - numFields = len( directory ) / DIRECTORY_ENTRY_LEN - - # add fields to our record using directory offsets - fieldNum = 0 - while ( fieldNum < numFields ): - entryStart = fieldNum * DIRECTORY_ENTRY_LEN - entryEnd = entryStart + DIRECTORY_ENTRY_LEN - entry = directory[ entryStart : entryEnd ] - entryTag = entry[ 0 : 3 ] - entryLength = int( entry[ 3 : 7 ] ) - entryOffset = int( entry[ 7 : 12 ] ) - entryData = marc[ baseAddress + entryOffset : - baseAddress + entryOffset + entryLength - 1 ] - - if entryTag < '010': - field = Field( tag=entryTag, data=entryData ) - else: - subfields = list() - subs = entryData.split( SUBFIELD_INDICATOR ) - i1 = subs[0][0] - i2 = subs[0][1] - for subfield in subs[1:]: - if len(subfield) == 0: continue - code = subfield[0] - data = subfield[1:] - subfields.append( code ) - subfields.append( data ) - field = Field( - tag = entryTag, - indicators = [ i1, i2 ], - subfields = subfields ) - - self.addField( field ) - fieldNum += 1 - - if fieldNum == 0: raise NoFieldsFound - - def asMARC21( self ): - """ - returns the record serialized as MARC21 - """ - fields = '' - directory = '' - offset = 0 - - # build the directory - # each element of the directory includes the tag, the byte length of - # the field and the offset from the base address where the field data - # can be found - for field in self.fields: - fieldData = field.asMARC21() - fields += fieldData - directory += "%03d%04d%05d" % (int(field.tag),len(fieldData),offset) - offset += len( fieldData ) - - # directory ends with an end of field - directory += END_OF_FIELD - - # field data ends with an end of record - fields += END_OF_RECORD - - # the base address where the directory ends and the field data begins - baseAddress = LEADER_LEN + len(directory) - - # figure out the length of the record - recordLength = baseAddress + len(fields) - - # update the leader with the current record length and base address - # the lengths are fixed width and zero padded - self.leader = "%05d%s%05d%s" % \ - ( recordLength, self.leader[5:12], baseAddress, self.leader[17:] ) - - # return the encoded record - return self.leader + directory + fields - - def title( self ): - """ - Returns the title of the record (245 $a an $b). - """ - title = None - try: - title = self['245']['a'] - title += self['245']['b'] - except TypeError, e: - pass - return title - - def isbn( self ): - """ - Returns an ISBN if appropriate. If not present None will - be returned. - """ - isbn = None - try: - # if anyone ever cares alot about performance - # this compilation could be moved out and compiled once - isbnPattern = re.compile( '^([0-9A-Za-z]+)' ) - isbn = isbnPattern.match( self["020"]["a"] ).group(1) - except Exception, e: - pass - return isbn - - def author( self ): - # todo - pass - - def publisher( self ): - # todo - pass - - def pubyear( self ): - # todo - pass - - def subjects( self ): - # todo - pass - - def notes( self ): - # todo - pass - diff --git a/tags/rel-0.8/pymarc/writer.py b/tags/rel-0.8/pymarc/writer.py deleted file mode 100644 index 23c32ff..0000000 --- a/tags/rel-0.8/pymarc/writer.py +++ /dev/null @@ -1,49 +0,0 @@ -from pymarc import Record, Field, WriteNeedsRecord, NoActiveFile -from types import * -from cStringIO import StringIO - -class Writer( object ): - - def write( self ): - pass - -class MARCWriter( Writer ): - """ - A class for writing MARC21 records in transmission format. - - Simple usage: - - from pymarc import MARCWriter - - ## pass in a file - writer = MARCWriter(file('file.dat','w')) - writer.write(record) - - ## use StringIO if you want to write to a string - string = StringIO() - writer = MARCWriter(string) - writer.write(record) - print string - """ - - def __init__(self, f): - """ - You need to pass in a file like object. - """ - self.fh = f - - def write(self, record): - """ - Writes a record. - """ - if type(record) != Record: - raise WriteNeedsRecord - self.fh.write(record.asMARC21()) - - def close( self ): - """ - Closes the file. - """ - self.fh.close() - self.fh = None - diff --git a/tags/rel-0.8/setup.py b/tags/rel-0.8/setup.py deleted file mode 100644 index 8acbff1..0000000 --- a/tags/rel-0.8/setup.py +++ /dev/null @@ -1,35 +0,0 @@ -import sys -from distutils.core import setup - -classifiers = """\ -Intended Audience :: Education -Intended Audience :: Developers -Intended Audience :: Information Technology -License :: OSI Approved :: BSD License -Programming Language :: Python -Topic :: Text Processing :: General -""" - -# workaround for older pythons that don't -# understand classifiers - -if sys.version_info < (2, 3): - _setup = setup - def setup(**kwargs): - if kwargs.has_key("classifiers"): - del kwargs["classifiers"] - _setup(**kwargs) - -setup( - name = 'pymarc', - version = '0.8', - url = 'http://www.textualize.com/pymarc', - download_url = 'http://www.textualize.com/archive/pymarc/latest.tar.gz', - author = 'Ed Summers', - author_email = 'ehs@pobox.com', - license = 'http://www.opensource.org/licenses/bsd-license.php', - packages = [ 'pymarc' ], - description = "read, write and modify MARC bibliographic data", - classifiers = filter( None, classifiers.split("\n") ), -) - diff --git a/tags/rel-0.8/test.py b/tags/rel-0.8/test.py deleted file mode 100644 index 8ea1517..0000000 --- a/tags/rel-0.8/test.py +++ /dev/null @@ -1,19 +0,0 @@ -import unittest -import test.record -import test.field -import test.reader -import test.encode -import test.writer - -def suite(): - suite = unittest.TestSuite() - suite.addTest( test.record.suite() ) - suite.addTest( test.field.suite() ) - suite.addTest( test.reader.suite() ) - suite.addTest( test.encode.suite() ) - suite.addTest( test.writer.suite() ) - return suite - -runner = unittest.TextTestRunner() -runner.run( suite() ) - diff --git a/tags/rel-0.8/test/__init__.py b/tags/rel-0.8/test/__init__.py deleted file mode 100644 index c297d12..0000000 --- a/tags/rel-0.8/test/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -import record -import field -import reader diff --git a/tags/rel-0.8/test/encode.py b/tags/rel-0.8/test/encode.py deleted file mode 100644 index 17454e1..0000000 --- a/tags/rel-0.8/test/encode.py +++ /dev/null @@ -1,25 +0,0 @@ -import util -from pymarc import MARCReader, Record, Field -import unittest -import os - -class Encode( unittest.TestCase ): - - def testEncodeDecode( self ): - # get raw data from file - original = file( 'test/one.dat' ).read() - # create a record object for the file - reader = MARCReader(file('test/one.dat')) - record = reader.next() - # make sure original data is the same as - # the record encoded as MARC - raw = record.asMARC21() - self.assertEqual( original, raw ) - -def suite(): - suite = unittest.makeSuite( Encode, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - diff --git a/tags/rel-0.8/test/field.py b/tags/rel-0.8/test/field.py deleted file mode 100644 index e7366a0..0000000 --- a/tags/rel-0.8/test/field.py +++ /dev/null @@ -1,73 +0,0 @@ -import util -import unittest -from pymarc.record import Record, Field - -class FieldTest( unittest.TestCase ): - - def setUp( self ): - self.field = Field( - tag = '245', - indicators = [ 0, 1 ], - subfields = [ - 'a', 'Huckleberry Finn: ', - 'b', 'An American Odyssey' - ] - ) - - def testString( self ): - self.assertEquals( str(self.field), - '245 01 $aHuckleberry Finn: $bAn American Odyssey') - - def testIndicators( self ): - assert self.field.indicator1 is 0 - self.assertEqual( self.field.indicator2, 1 ) - - def testSubfieldsCreated( self ): - subfields = self.field.subfields - self.assertEqual( len( subfields ), 4 ) - - def testSubfieldShort( self ): - self.assertEqual( self.field['a'], 'Huckleberry Finn: ' ) - self.assertEqual( self.field['z'], None ) - - def testSubfields( self ): - self.assertEqual( self.field.getSubfields( 'a' ), - ['Huckleberry Finn: '] ) - - def testSubfieldsMulti( self ): - self.assertEqual( self.field.getSubfields( 'a','b' ), - ['Huckleberry Finn: ', 'An American Odyssey' ] ) - - def testEncode( self ): - self.field.asMARC21() - - def testIterator( self ): - string = "" - for subfield in self.field: - string += subfield[0] - string += subfield[1] - self.assertEquals( string, "aHuckleberry Finn: bAn American Odyssey" ) - - def testValue( self ): - self.assertEquals( self.field.value(), - 'Huckleberry Finn: An American Odyssey' ) - controlField = Field( tag='001', data='foobar' ) - self.assertEquals( controlField.value(), "foobar" ) - - def testNonIntegerTag( self ): - # make sure this doesn't throw an exception - f = Field( tag="3 0", indicators=[0,1], subfields=['a', 'foo'] ) - - def testAddSubfield( self ): - f = Field( tag="245", indicators=[0,1], subfields=['a', 'foo'] ) - f.addSubfield('a','bar') - self.assertEquals( f.__str__(), '245 01 $afoo$abar') - -def suite(): - suite = unittest.makeSuite( FieldTest, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - - diff --git a/tags/rel-0.8/test/marc.dat b/tags/rel-0.8/test/marc.dat deleted file mode 100644 index 9c52c7d..0000000 --- a/tags/rel-0.8/test/marc.dat +++ /dev/null @@ -1 +0,0 @@ -01060cam 22002894a 45000010009000000050017000090080041000260350021000679060045000889250044001339550160001779550053003370100017003900200015004070400018004220420008004400500023004480820014004711000025004852450088005102600044005983000027006425040041006696500026007107000026007369850008007621177850420040816084925.0990802s2000 mau b 001 0 eng  a(DLC) 99043581 a0bvipcorignewd1eocipf19gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc05 to ja00 08-02-99; jf05 to subj. 08/02/99; jf11 to sl 08-03-99; jf25 08-05-99 to ddc; bk rec'd, to CIP ver. ps07 01-07-00; CIP ver jf05 to sl 04/05/00 aADDED COPIES: another copy to ASCD ps15 01-12-00 a 99043581  a020161622X aDLCcDLCdDLC apcc00aQA76.6b.H857 200000a005.12211 aHunt, Andrew,d1964-14aThe pragmatic programmer :bfrom journeyman to master /cAndrew Hunt, David Thomas. aReading, Mass :bAddison-Wesley,c2000. axxiv, 321 p. ;c24 cm. aIncludes bibliographical references. 0aComputer programming.1 aThomas, David,d1956- eGAP00979cam 2200241 a 45000010009000000050017000090080041000269060045000679250042001129550206001540100017003600200015003770400018003920500026004100820017004361000016004532450037004692500012005062600051005183000078005695040051006476500039006981251588220020923085341.0010827s2001 cc a b 001 0 eng  a7bcbccorigcopd2encipf20gy-gencatlg0 aacquireb2 shelf copyxpolicy default apb07 2001-08-27 to ASCDajf00 2001-08-31ajf00 2001-09-05;cjf03 2001-10-16 to Subj.djf01 2001-10-25 to slejf12 2001-11-23; jf12 to Dewey 11-23-01aaa20 2001-12-07; copy 2 added jf16 to BCCD 09-23-02 a 2001276084 a0596000855 aDLCcDLCdDLC00aQA76.73.P98bL88 200100a005.13/32211 aLutz, Mark.10aProgramming Python /cMark Lutz. a2nd ed. aBeijing :aSebastopol, CA :bO'Reilly,cc2001. axxxvii, 1255 p. :bill. ;c24 cm. +e1 computer optical disc (4 3/4 in.). aIncludes bibliographical references and index. 0aPython (Computer program language)00887cam 2200253 a 45000010009000000050017000090080041000269060045000679250044001129550151001560100017003070200015003240400018003390500027003570820017003841000016004012450051004172500012004682600040004803000035005205040020005556500039005757000019006141361051220040714135238.0040601s2004 caua 001 0 eng  a7bcbccorigcopd2encipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apv17 2004-06-01 Preprocessor to ASCDajf00 2004-06-03;cjf03 2004-06-24 to Subj.djf09 2004-06-28 to slejf12 2004-07-01 to Deweyaaa25 2004-07-14 a 2004273129 a0596002815 aDLCcDLCdDLC00aQA76.73.P98bL877 200400a005.13/32221 aLutz, Mark.10aLearning Python /cMark Lutz and David Ascher. a2nd ed. aSebastopol, CA :bO'Reilly,cc2004. axxvi, 591 p. :bill. ;c24 cm. aIncludes index. 0aPython (Computer program language)1 aAscher, David.01038cam 2200289 a 45000010009000000050017000090080041000269060045000679250042001129550167001540100017003210150015003380200015003530350023003680400023003910420014004140500026004280820017004542450065004712600039005363000027005755000048006025000020006506500039006707000020007097000019007291306994220030606071827.0030127s2002 cau 001 0 eng  a7bcbcccopycatd2encipf20gy-gencatlg0 aacquireb2 shelf copyxpolicy default aps04 2003-01-27 to ASCDajf00 2003-01-30cjf05 2003-01-30 to subj.djf09 2003-01-30 to slejf12 2003-02-03 to Deweyaaa20 2003-03-10ajg07 2003-06-06 copy 2 added a 2003268354 aGBA2-Y6761 a0596001673 a(OCoLC)ocm49044543 aUKMcUKMdCUSdDLC alccopycat00aQA76.73.P98bP95 200200a005.13/322100aPython cookbook /cedited by Alex Martelli and David Ascher. aSebastopol, CA :bO'Reilly,c2002. axxix, 574 p. ;c24 cm. a"Recipes from the Python community"--Cover. aIncludes index. 0aPython (Computer program language)1 aMartelli, Alex.1 aAscher, David.00759nam 22002295a 45000010009000000050017000090080041000260350022000679060045000899250044001349550020001780100017001980200015002150400013002300420008002431000021002512450068002722600084003402630009004243000012004339630084004451312796220030318153335.0030318s2003 inu 000 0 eng  a(DLC) 2003104024 a0bibccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2003-03-18 a 2003104024 a1592000738 aDLCcDLC apcc1 aDawson, Michael.10aPython programming for the absolute beginner /cMichael Dawson. aIndianapolis, IN :bPremier Press Inc., a division of Course Technology,c2003. a0306 ap.ccm. aMargaret Bauer ; phone (812) 273-0561 ; fax null email margaret_bauer@yahoo.com01304cam 22002894a 45000010009000000050017000090080041000269060045000679250044001129550280001560100017004360200015004530400018004680420008004860500024004940820017005181000049005352450150005842460030007342600053007643000036008175040064008536500026009176500023009437000021009667000027009871256551420020718085037.0011016s2002 njua b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2001-10-16 to ASCD;cjf03 2001-10-17 to Subj.djf01 2001-10-25 to slejf25 2001-10-25 to Deweyaaa20 2001-10-26aps16 2002-01-11 bk rec'd, to CIP ver.ajf00 2002-01-16fjf04 2002-01-18 to S.L.gjf12 2002-01-18 to bccdajf00 2002-03-26; copy 2 added jf16 to BCCD 07-18-02 a 2001055410 a0130410659 aDLCcDLCdDLC apcc00aQA76.625b.T48 200200a005.2/762211 aThiruvathukal, George K.q(George Kuriakose)10aWeb programming :btechniques for integrating Python, Linux, Apache, and MySQL /cGeorge K. Thiruvathukal, John P. Shafaee, Thomas W. Christoper.14aWeb programming in Python aUpper Saddle River, NJ :bPrentice Hall,cc2002. axviii, 745 p. :bill. ;c24 cm. aIncludes bibliographical references (p. 723-725) and index. 0aInternet programming. 0aWeb sitesxDesign.1 aShafaee, John P.1 aChristopher, Thomas W.01023cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550168001560100017003240200035003410400018003760420008003940500026004020820016004281000029004442450067004732500012005402600051005523000035006035000020006386500039006586300021006977000027007181187737320010105091546.0991228s2000 cc a 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc01 12-28-99; jf03 01-04-00 ; jf11 to sl 1-4-00; jf12 to Dewey 01-06-00; aa05 01-10-00; CIP ver. pv08 to BCCD 05-01-00; copy 2 added jf16 to BCCD 01-05-01 a 99085714  a1565926218 (pbk. : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P98bH36 200000a005.2652211 aHammond, Markq(Mark J.)10aPython programming on Win32 /cMark Hammond and Andy Robinson. a1st ed. aBeijing ;aSebastopol, CA :bO'Reilly,cc2000. axvii, 652 p. :bill. ;c24 cm. aIncludes index. 0aPython (Computer program language)00aMicrosoft Win32.1 aRobinson, Andy,d1967-00867cam 22002538a 45000010009000000050017000090080041000269060045000679250044001129550127001560100017002830200015003000400013003150420008003280500026003360820017003621000019003792450080003982600047004782630009005253000011005346500039005459630029005841343237720031222144424.0031211s2003 oru 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc27 2003-12-11 RUSH to ASCDcjf07 2003-12-17 to subjectdjf09 2003-12-17 to slejp05 2003-12-18 to Deweyaaa20 2003-12-22 a 2003064366 a1887902996 aDLCcDLC apcc00aQA76.73.P98bZ45 200300a005.13/32221 aZelle, John M.10aPython programming :ban introduction to computer science /cJohn M. Zelle. aWilsonville, OR :bFranklin, Beedlec2003. a0312 ap. cm. 0aPython (Computer program language) aTom Sumner, 503-682-766801008cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550171001560100017003270200015003440400018003590420008003770500026003850820018004111000026004292450065004552600046005203000034005665000020006006500039006206500026006596500023006857000022007081222727720030509151148.0001109s2002 inua 001 0 eng  a7bcbccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 11-09-00apv11 2002-04-12 2 copies to ASCDajf00 2002-04-18;cjf03 2002-08-20 to Subj.djf09 2002-08-21 to slejf25 2002-09-10 2 copies to Deweyaaa05 2002-10-04 a 00110884  a0735710902 aDLCcDLCdDLC apcc00aQA76.73.P98bH65 200200a005.2/7622211 aHolden, Steve,d1950-10aPython Web programming /cSteve Holden [with David Beazley]. aIndianapolis, Ind. :bNew Riders,cc2002. axxi, 691 p. :bill. ;c23 cm. aIncludes index. 0aPython (Computer program language) 0aInternet programming. 0aWeb sitesxDesign.1 aBeazley, David M.01049cam 22002534a 45000010009000000050017000090080041000269060045000679250044001129550148001560100017003040200015003210400018003360420008003540500026003620820017003881000018004052450047004232600052004703000066005225040051005885380117006396500039007561216916820010522141328.0000911s2000 nju b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc16 09-11-00; jf02 09-12-00 ; jf11 to sl 9-12-00; jf12 to Dewey 09-14-00; aa05 09-14-00; CIP Ver. jf02 05-11-01; jf12 to BCCD 05-22-01 a 00047856  a0130260363 aDLCcDLCdDLC apcc00aQA76.73.P98bC48 200100a005.13/32211 aChun, Wesley.10aCore python programming /cWesley J. Chun. aUpper Saddle River, NJ :bPrentice Hall,c2001. axxix, 771 p. ;c24 cm. +e1 computer optical disc (4 3/4 in.) aIncludes bibliographical references and index. aSystem requirements for accompanying computer disc: Windows 9x/Me/NT/2000; a Web brouser; Macintosh; UNIX/Linux. 0aPython (Computer program language)00948cam 22002654a 45000010009000000050017000090080041000269060045000679250044001129550133001560100017002890200015003060400018003210420008003390500026003470820017003731000021003902450055004112600038004663000036005045040051005406500039005916500036006306300016006661213218820010817152505.0000804s2000 ctua b 001 0 eng  a7bcbccorignewd2encipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pb05 08-04-00;jfoo 08-08-00;cjf03 2001-07-18 to Subj.djf02 2001-07-19 to slejf25 2001-07-31 to Deweyaaa20 2001-08-17 a 00697831  a1884777813 aDLCcDLCdDLC apcc00aQA76.73.P98bG73 200000a005.13/32211 aGrayson, John E.10aPython and Tkinter programming /cJohn E. Grayson. aGreenwich, CT :bManning,cc2000. axxiii, 658 p. :bill. ;c24 cm. aIncludes bibliographical references and index. 0aPython (Computer program language) 0aTcl (Computer program language)00aTk toolkit.00767nam 22002295a 45000010009000000050017000090080041000260350022000679060045000899250044001349550020001780100017001980200015002150400013002300420008002432450081002512600079003322630009004113000012004204400021004329630084004531337832520031020153106.0031020s2003 inu 000 0 eng  a(DLC) 2003114351 a0bibccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc10 2003-10-20 a 2003114351 a1592000770 aDLCcDLC apcc00aGame programming with Python, Lua, and Ruby /c[edited by] Estelle Manticas. aIndianapolis, IN :bPremier Press, a Division of Course Technology,c2003. a0311 ap.ccm. aGame development aMargaret Bauer ; phone (812) 273-0561 ; fax null email margaret_bauer@yahoo.com01121cam 22002414a 45000010009000000050017000090080041000269060045000679250044001129550362001560100017005180200015005350400018005500420008005680500026005760820017006021000027006192450058006462600052007043000033007565040051007896500039008401256552920030227150222.0011016s2002 njua b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2001-10-16 to ASCD;cjf05 2001-10-17 to subj.djf04 2001-10-17 to S.L.ejf25 2001-10-25 to Deweyaaa20 2001-10-26aps11 2002-01-15 bk rec'd, to CIP ver.fjp07 2002-02-13ajp00 2002-03-08gjp85 2002-03-08 to BCCD; copy 2 added jf16 to BCCD 07-18-02ajf00 2003-01-29ajf07 2003-02-27 somehow copy 1 got back into the CIP ver. stream (handed to acting TL) a 2001055411 a0130409561 aDLCcDLCdDLC apcc00aQA76.73.P98bC47 200200a005.13/32211 aChristopher, Thomas W.10aPython programming patterns /cThomas W. Christopher. aUpper Saddle River, NJ :bPrentice Hall,c2002. axix 538 p. :bill. ;c24 cm. aIncludes bibliographical references and index. 0aPython (Computer program language)01062cam 22002778a 45000010009000000050017000090080041000269060045000679250044001129550120001560100017002760200028002930400013003210420008003340500026003420820018003681000024003862450134004102600041005442630009005853000011005946500039006056500037006446500039006819630064007201275256420020426115101.0020424s2002 mau 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc21 2002-04-24 to ASCDcjf05 2002-04-25 to subj.djf09 2002-04-25 to slejf25 2002-04-26 to Deweyaaa20 2002-04-26 a 2002066565 a0201616165 (alk. paper) aDLCcDLC apcc00aQA76.73.P98bH54 200200a005.2/7622211 aHightower, Richard.10aPython programming with the Java class libraries :ba tutorial for building Web and Enterprise applications /cRichard Hightower. aBoston, MA :bAddison-Wesley,c2002. a0207 ap. cm. 0aPython (Computer program language) 0aJava (Computer program language) 0aApplication softwarexDevelopment. aMarilyn Rash, 617-848-6509; email: timothy.nicholls@awl.com01012cam 22002294a 45000010009000000050017000090080041000269060045000679250044001129550192001560100017003480200028003650400018003930420008004110500026004190820017004451000017004622450151004792600042006303000071006726500039007431216723920010608101527.0000908s2001 mau b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc21 09-08-00;jf05 (desc) 09/08/00 ; jf11 to sl 9-11-00; jf12 to Dewey 09-12-00;aa03 9-12-00;CIP ver jf05 to sl 01/11/01; jf12 to BCCD 02-01-01; copy 2 added jf16 to BCCD 04-24-01 a 00046921  a0201709384 (alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P48bG38 200100a005.13/32211 aGauld, Alan.10aLearn to program using Python :ba tutorial for hobbyists, self-starters, and all who want to learn the art of computer programming /cAlan Gauld. aReading, MA :bAddison-Wesley,c2001. axii, 270 p. ;c24 cm.e+ 1 computer laser optical disc (4 3/4 in.) 0aPython (Computer program language)00935cam 22002534a 450000100070000000500170000700800410002403500210006590600450008692500440013195501480017501000170032302000220034004000180036204200080038005000260038808200170041410000160043124500610044726000390050830000750054765000390062270000200066120525620000830103214.0990629s2000 caua 001 0 eng  9(DLC) 99065006 a7bcbccorignewd2eopcnf19gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apn08/e-pcn 06-29-99; to ASCD pb02 06-10-00; jf00 06-13-00; jf03 08-17-00 ; jf11 to sl 8-22-00; jf25 2 copies to Dewey 08-24-00; aa19 08-30-2000 a 99065006  a0761523340 (pbk.) aDLCcDLCdDLC apcc00aQA76.73.P98bA48 199900a005.13/32211 aAltom, Tim.10aProgramming with Python /cTim Altom with Mitch Chapman. aRocklin, CA :bPrima Tech,cc1999. axxxiv, 372 p. :bill. ;c24 cm. +e1 computer optical disc (4 3/4 in.) 0aPython (Computer program language)1 aChapman, Mitch.01214cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550202001560100017003580200047003750400018004220420008004400500024004480820017004721000019004892450079005082600051005873000058006386500026006966500048007226500040007706500049008108560077008591328439520040226131230.0030722s2004 maua 001 0 eng  a7bcbccorignewd1eecipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ajf05 2003-07-22cjf05 2003-07-22 to subj.djf09 2003-07-22 to slejf12 2003-07-23 to Deweyaaa20 2003-07-29ajf00 2004-01-29fjf07 2004-02-02ejf12 2004-02-03 to BCCDajf16 2004-02-26 copy2 to BCCD a 2003016400 a1584502681 (Pbk. with CD-ROM : alk. paper) aDLCcDLCdDLC apcc00aQA76.625b.J66 200400a005.2/762221 aJones, M. Tim.10aBSD Sockets programming from a multi-language perspective /cM. Tim Jones. aHingham, Mass. :bCharles River Media,cc2004. axix, 444 p. :bill. ;c24 cm. +e1 CD-ROM (4 3/4 in.) 0aInternet programming. 0aComputer networksxDesign and construction. 0aInternetworking (Telecommunication) 0aProgramming languages (Electronic computers)413Table of contentsuhttp://www.loc.gov/catdir/toc/ecip047/2003016400.html01113cam 2200277 a 4500001000800000005001700008008004100025035002100066906004500087955011600132010001700248020003300265040001800298050002300316082001600339245009800355260004600453300003300499440004900532504006400581650005100645650003600696650002300732700001800755991006200773159816719981112152315.2940902s1995 maua b 001 0 eng  9(DLC) 94034264 a7bcbccorignewd1eocipf19gy-gencatlg apc18 to ja00 09-02-94; jf06 to subj 09-06-94; jf11 to sl 09-06-94; jf12 09-06-94 to ddc; CIP ver. jc03 11-23-94 a 94034264  a0201633612 (acid-free paper) aDLCcDLCdDLC00aQA76.64b.D47 199500a005.1/222000aDesign patterns :belements of reusable object-oriented software /cErich Gamma ... [et al.]. aReading, Mass. :bAddison-Wesley,cc1995. axv, 395 p. :bill. ;c25 cm. 0aAddison-Wesley professional computing series aIncludes bibliographical references (p. 375-381) and index. 0aObject-oriented programming (Computer science) 0aComputer softwarexReusability. 0aSoftware patterns.1 aGamma, Erich. bc-GenCollhQA76.64i.D47 1995p00011185514tCopy 1wBOOKS01233cam 2200289 a 45000010009000000050017000090080041000269060045000679250044001129550226001560100017003820200034003990400013004330500024004460820014004702450065004842460015005492500012005642600043005763000021006195000111006405040068007516500026008196500025008457000022008707000051008921237004420020812080859.0010405s2001 mau b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc20 to ja00 04-05-01; jp07 04-11-01 sent to sl;jp85 to Dewey 04-19-01; aa20 04-20-01aps13 2001-08-16 bk rec'd, to CIP ver.fjf07 2001-08-20ajf00 2001-08-20gjf12 2001-08-23 to bccdajf01 2001-09-13 copy 2 added to BCCD a 2001031277 a0262032937 (hc. : alk. paper) aDLCcDLC00aQA76.6b.I5858 200100a005.122100aIntroduction to algorithms /cThomas H. Cormen ... [et al.].30aAlgorithms a2nd ed. aCambridge, Mass. :bMIT Press,cc2001. axxi, 1180 p. cm. aRev. ed. of: Introduction to algorithms / Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest. c1990. aIncludes bibliographical references (p. [1127]-1130) and index. 0aComputer programming. 0aComputer algorithms.1 aCormen, Thomas H.1 aCormen, Thomas H.tIntroduction to algorithms.01009pam 2200265 a 4500001000800000005001700008008004100025035002100066906004500087955011600132010001700248020002200265040001800287050002600305082001700331100001800348245003700366260005300403300003500456440005200491500002700543504006400570650004400634991006500678303540919960425075058.2951006s1996 njua b 001 0 eng  9(DLC) 95045017 a7bcbccorignewd1eocipf19gy-gencatlg apc17 RUSH to ja00 10-06-95;jf05 to subj. 10/06/95; jf04 to S.L. 10-06-95; jf14 10-10-95; CIP ver. jk14 04-22-96 a 95045017  a0133708756 (pbk.) aDLCcDLCdDLC00aQA76.73.C28bG69 199600a005.13/32201 aGraham, Paul.10aANSI Common Lisp /cPaul Graham. aEnglewood Cliffs, N.J. :bPrentice Hall,cc1996. axiii, 432 p. :bill. ;c23 cm. 0aPrentice Hall series in artificial intelligence a"An Alan R. Apt book." aIncludes bibliographical references (p. 401-414) and index. 0aCOMMON LISP (Computer program language) bc-GenCollhQA76.73.C28iG69 1996p00034751468tCopy 1wBOOKS \ No newline at end of file diff --git a/tags/rel-0.8/test/one.dat b/tags/rel-0.8/test/one.dat deleted file mode 100644 index a43cf54..0000000 --- a/tags/rel-0.8/test/one.dat +++ /dev/null @@ -1 +0,0 @@ -00755cam 22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500fol05731351 IMchF20000613133448.0000107s2000 nyua 001 0 eng  a 00020737  a0471383147 (paper/cd-rom : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P22bM33 200000a005.13/32211 aMartinsson, Tobias,d1976-10aActivePerl with ASP and ADO /cTobias Martinsson. aNew York :bJohn Wiley & Sons,c2000. axxi, 289 p. :bill. ;c23 cm. +e1 computer laser disc (4 3/4 in.) a"Wiley Computer Publishing." 0aPerl (Computer program language)00aActive server pages.00aActiveX. \ No newline at end of file diff --git a/tags/rel-0.8/test/reader.py b/tags/rel-0.8/test/reader.py deleted file mode 100644 index 6cba456..0000000 --- a/tags/rel-0.8/test/reader.py +++ /dev/null @@ -1,45 +0,0 @@ -import util -import unittest -import pymarc -import re - -class MARCReaderFileTest( unittest.TestCase ): - """ - Tests for the pymarc.MARCReader class which provides iterator - based access to a MARC file. - """ - - def setUp( self ): - self.reader = pymarc.MARCReader(file('test/test.dat')) - - def testIterator( self ): - count = 0 - for record in self.reader: - count += 1 - self.assertEquals(count, 10, 'found expected amt of MARC21 records') - - def testString( self ): - ## basic test of stringification - startsWithLeader = re.compile( "^LDR" ) - hasNumericTag = re.compile( "\n\d\d\d " ) - for record in self.reader: - text = str(record) - self.failUnless( startsWithLeader.search(text), 'got leader') - self.failUnless(hasNumericTag.search(text), 'got a tag') - -class MARCReaderStringTest(MARCReaderFileTest): - - def setUp(self): - raw = file('test/test.dat').read() - self.reader = pymarc.reader.MARCReader(raw) - - # inherit same tests from MARCReaderTestFile - -def suite(): - fileSuite = unittest.makeSuite(MARCReaderFileTest, 'test') - stringSuite = unittest.makeSuite(MARCReaderStringTest, 'test') - suite = unittest.TestSuite((fileSuite, stringSuite)) - return suite - -if __name__ == "__main__": - unittest.main() diff --git a/tags/rel-0.8/test/record.py b/tags/rel-0.8/test/record.py deleted file mode 100644 index 98e5d74..0000000 --- a/tags/rel-0.8/test/record.py +++ /dev/null @@ -1,99 +0,0 @@ -import util -import unittest - -from pymarc import Record, Field -from pymarc.exceptions import * - -class RecordTest( unittest.TestCase ): - - def testAddField( self ): - record = Record() - field = Field( - tag = '245', - indicators = [ '1', '0' ], - data = [ 'a', 'Python', 'c', 'Guido' ] ) - record.addField( field ) - self.failUnless( field in record.fields, msg='found field' ) - - def testQuickAccess( self ): - record = Record() - title = Field( - tag = '245', - indicators = [ '1', '0' ], - data = [ 'a', 'Python', 'c', 'Guido' ] ) - record.addField( title ) - self.assertEqual( record['245'], title, 'short access' ) - self.assertEqual( record['999'], None, 'short access with no field' ) - - def testFieldNotFound( self ): - record = Record() - self.assertEquals( len( record.fields ), 0 ) - - def testFind( self ): - record = Record() - subject1 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Programming Language' ] ) - record.addField( subject1 ) - subject2 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Object Oriented' ] ) - record.addField( subject2 ) - found = record.getFields( '650' ) - self.assertEqual( found[0], subject1, 'getFields() item 1' ) - self.assertEqual( found[0], subject1, 'getFields() item 2' ) - - def testMultiFind( self ): - record = Record() - subject1 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Programming Language' ] ) - record.addField( subject1 ) - subject2 = Field( - tag = '651', - indicators = [ '', '0' ], - data = [ 'a', 'Object Oriented' ] ) - record.addField( subject2 ) - found = record.getFields( '650', '651' ) - self.assertEquals( len(found), 2 ) - - def testBadLeader( self ): - record = Record() - self.failUnlessRaises( RecordLeaderInvalid, - record.decodeMARC, 'foo' ) - - def testBadBaseAddress( self ): - record = Record() - self.failUnlessRaises( BaseAddressInvalid, - record.decodeMARC, '00695cam 2200241Ia 45x00' ) - - def testTitle( self ): - record = Record() - self.assertEquals( record.title(), None ) - record.addField( Field( '245', [0,1], - subfields=[ 'a', "Foo :", 'b', 'bar' ] ) ) - self.assertEquals( record.title(), 'Foo :bar' ) - - record = Record() - record.addField( Field( '245', [0,1], - subfields=[ 'a', "Farghin" ] ) ) - self.assertEquals( record.title(), "Farghin" ) - - def testISBN( self ): - record = Record() - self.assertEquals( record.isbn(), None ) - record.addField( Field( '020', [0,1], subfields=['a', '123456789' ] ) ) - self.assertEquals( record.isbn(), '123456789' ) - - -def suite(): - suite = unittest.makeSuite( RecordTest, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - - diff --git a/tags/rel-0.8/test/test.dat b/tags/rel-0.8/test/test.dat deleted file mode 100644 index 68d6dad..0000000 --- a/tags/rel-0.8/test/test.dat +++ /dev/null @@ -1 +0,0 @@ -00755cam 22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500fol05731351 IMchF20000613133448.0000107s2000 nyua 001 0 eng  a 00020737  a0471383147 (paper/cd-rom : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P22bM33 200000a005.13/32211 aMartinsson, Tobias,d1976-10aActivePerl with ASP and ADO /cTobias Martinsson. aNew York :bJohn Wiley & Sons,c2000. axxi, 289 p. :bill. ;c23 cm. +e1 computer laser disc (4 3/4 in.) a"Wiley Computer Publishing." 0aPerl (Computer program language)00aActive server pages.00aActiveX.00647pam 2200241 a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001500161100002600176245006700202260003800269263000900307300001100316650003700327650002500364700001600389fol05754809 IMchF20000601115601.0000203s2000 mau 001 0 eng  a 00022023  a1565926994 aDLCcDLCdDLC apcc00aQA76.73.P22bD47 200000a005.742211 aDescartes, Alligator.10aProgramming the Perl DBI /cAlligator Descartes and Tim Bunce. aCmabridge, MA :bO'Reilly,c2000. a1111 ap. cm. 0aPerl (Computer program language) 0aDatabase management.1 aBunce, Tim.00605cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077040001800094042000800112050002700120082001700147100002100164245005500185260004500240300002600285504005100311650003700362fol05843555 IMchF20000525142739.0000318s1999 cau b 001 0 eng  a 00501349  aDLCcDLCdDLC apcc00aQA76.73.P22bB763 199900a005.13/32211 aBrown, Martin C.10aPerl :bprogrammer's reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axix, 380 p. ;c22 cm. aIncludes bibliographical references and index. 0aPerl (Computer program language)00579cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002700135082001700162100002100179245005500200260004500255300003600300650003700336fol05843579 IMchF20000525142716.0000318s1999 caua 001 0 eng  a 00502116  a0072120002 aDLCcDLCdDLC apcc00aQA76.73.P22bB762 199900a005.13/32211 aBrown, Martin C.10aPerl :bthe complete reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axxxv, 1179 p. :bill. ;c24 cm. 0aPerl (Computer program language)00801nam 22002778a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001800156100002000174245008800194250003200282260004100314263000900355300001100364650003700375650003600412650002600448700002500474700002400499fol05848297 IMchF20000524125727.0000518s2000 mau 001 0 eng  a 00041664  a1565924193 aDLCcDLC apcc00aQA76.73.P22bG84 200000a005.2/7622211 aGuelich, Scott.10aCGI programming with Perl /cScott Guelich, Shishir Gundavaram & Gunther Birznieks. a2nd ed., expanded & updated aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language) 0aCGI (Computer network protocol) 0aInternet programming.1 aGundavaram, Shishir.1 aBirznieks, Gunther.00665nam 22002298a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002700130082001700157111005200174245008600226250001200312260004100324263000900365300001100374650005000385fol05865950 IMchF20000615103017.0000612s2000 mau 100 0 eng  a 00055759  a0596000138 aDLCcDLC apcc00aQA76.73.P22bP475 200000a005.13/32212 aPerl Conference 4.0d(2000 :cMonterey, Calif.)10aProceedings of the Perl Conference 4.0 :bJuly 17-20, 2000, Monterey, California. a1st ed. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)vCongresses.00579nam 22002178a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100002800173245006200201260004100263263000900304300001100313650003700324fol05865956 IMchF20000615102948.0000612s2000 mau 000 0 eng  a 00055770  a1565926099 aDLCcDLC apcc00aQA76.73.P22bB43 200000a005.13/32211 aBlank-Edelman, David N.10aPerl for system administration /cDavid N. Blank-Edelman. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)00661nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100001700173245006700190250001200257260004100269263000900310300001100319650003700330700002300367700001700390fol05865967 IMchF20000615102611.0000614s2000 mau 000 0 eng  a 00055799  a0596000278 aDLCcDLC apcc00aQA76.73.P22bW35 200000a005.13/32211 aWall, Larry.10aProgramming Perl /cLarry Wall, Tom Christiansen & Jon Orwant. a3rd ed. aCambridge, Mass. :bO'Reilly,c2000. a0007 ap. cm. 0aPerl (Computer program language)1 aChristiansen, Tom.1 aOrwant, Jon.00603cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001700161100003200178245006000210260005700270300003300327650003700360fol05872355 IMchF20000706095105.0000315s1999 njua 001 0 eng  a 00500678  a013020868X aDLCcDLCdDLC apcc00aQA76.73.P22bL69 199900a005.13/32211 aLowe, Vincentq(Vincent D.)10aPerl programmer's interactive workbook /cVincent Lowe. aUpper Saddle River, NJ :bPrentice Hall PTP,cc1999. axx, 633 p. :bill. ;c23 cm. 0aPerl (Computer program language)00696nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020002800094040001300122042000800135050002600143082001700169100002600186245004400212260005100256263000900307300001100316500002000327650003700347650001700384650004100401fol05882032 IMchF20000707091904.0000630s2000 cau 001 0 eng  a 00058174  a0764547291 (alk. paper) aDLCcDLC apcc00aQA76.73.P22bF64 200000a005.13/32212 aFoster-Johnson, Eric.10aCross-platform Perl /cEric F. Johnson. aFoster City, CA :bIDG Books Worldwide,c2000. a0009 ap. cm. aIncludes index. 0aPerl (Computer program language) 0aWeb servers. 0aCross-platform software development. \ No newline at end of file diff --git a/tags/rel-0.8/test/util.py b/tags/rel-0.8/test/util.py deleted file mode 100644 index 7ade343..0000000 --- a/tags/rel-0.8/test/util.py +++ /dev/null @@ -1,4 +0,0 @@ -import sys -sys.path.append( '../pymarc' ); - - diff --git a/tags/rel-0.8/test/writer.py b/tags/rel-0.8/test/writer.py deleted file mode 100644 index da67e79..0000000 --- a/tags/rel-0.8/test/writer.py +++ /dev/null @@ -1,27 +0,0 @@ -import util -import unittest -import pymarc -import re - -class MARCWriterTest(unittest.TestCase): - - def testWrite(self): - - # write a record off to a file - writer = pymarc.MARCWriter(file('test/writer-test.dat','w')) - record = pymarc.Record() - field = pymarc.Field('245', ['0','0'], ['a', 'foo']) - record.addField(field) - writer.write(record) - writer.close() - - # read it back in - reader = pymarc.MARCReader(file('test/writer-test.dat')) - record = reader.next() - -def suite(): - suite = unittest.makeSuite(MARCWriterTest, 'test') - return suite - -if __name__ == "__main__": - unittest.main() diff --git a/tags/rel-0.81/Changes b/tags/rel-0.81/Changes deleted file mode 100644 index 042ec6a..0000000 --- a/tags/rel-0.81/Changes +++ /dev/null @@ -1,50 +0,0 @@ -v0.81 Mon Jan 30 16:33:36 EST 2006 - - getFields() wasn't returning all the fields when no tag - was passed in. - -v0.8 Mon Jan 30 07:05:36 CST 2006 - - added the ability to read raw marc from strings THIS MAY BREAK - YOUR CODE. pymarc no longer supports passing file paths to the - MARCReader constructor. You need to simply change: - - reader = MARCReader('marc.dat') - - to: - - reader = MARCReader(file('marc.dat')) - - Thanks to Daniel Hoth for suggesting this. It just makes sense to - be able to pass in MARC that you got from a Z39.50 network connection - or database, etc. - -v0.7 Mon Jan 23 15:08:55 EST 2006 - - added addSubfield() to Subfield (thanks Kurt Nordstrom) - -v0.6 Tue Nov 29 20:48:31 CST 2005 - - fixed test suite to run under the unittest that ships with python2.3 - - allow non-integer field tags - - fixed MARCWriter and added test (thanks Mikel Larreategi) - -v0.5 Thu Feb 10 10:01:12 CST 2005 - - handle empty subfields - -v0.4 Wed Feb 2 22:29:33 CST 2005 - - fixed directory validation: thanks Aaron Lav - - added iterator for pymarc.Field for iterating through subfields - - added pymarc.Field.value() for getting a field value easily - -v0.3 Wed Jan 5 17:03:37 CST 2005 - - changed mind about accessors (again): - removed getField() must use getFields() - renamed subfield() to getSubfields() and have it return a list - - added doctest support to pymarc/__init__.py - - added a test batch file of python data - -v0.2 Tue Jan 4 21:01:22 CST 2005 - - removed getField() and renamed getFields() to find() - -v0.11 Mon Jan 3 20:42:19 CST 2005 - - fixed test suite execution - -v0.1 Wed Dec 29 19:54:23 CST 2004 - - initial release diff --git a/tags/rel-0.81/MANIFEST.in b/tags/rel-0.81/MANIFEST.in deleted file mode 100644 index 591cc6d..0000000 --- a/tags/rel-0.81/MANIFEST.in +++ /dev/null @@ -1,3 +0,0 @@ -global-include *.py *.dat -include README MANIFEST.in - diff --git a/tags/rel-0.81/README b/tags/rel-0.81/README deleted file mode 100644 index 78d586c..0000000 --- a/tags/rel-0.81/README +++ /dev/null @@ -1,30 +0,0 @@ -DESCRIPTION ------------ - -pymarc is a python library for working with MARC21 bibliographic data -loosely based on the MARC/Perl suite of modules (http://marcpm.sf.net). -More about pymarc can be found at http://www.textualize.com/pymarc - -INSTALLATION ------------- - -Run the pymarc test suite to make sure things are in order with the -distribution: - - python test.py - -And then install: - - python setup.py install - -For typical usage of this library look at the documentation in -pymarc/__init__.py - -TODO ----- - -- marc8/utf8 translation -- marcxml support - -LICENSE: BSD -AUTHOR: Ed Summers diff --git a/tags/rel-0.81/pymarc/__init__.py b/tags/rel-0.81/pymarc/__init__.py deleted file mode 100644 index 8e5e3ac..0000000 --- a/tags/rel-0.81/pymarc/__init__.py +++ /dev/null @@ -1,71 +0,0 @@ -# __init__.py - -r''' - -The pymarc module provides an API for reading, writing and modifying -MARC records. MARC (MAchine Readable Cataloging) is a metadata format for -bibliographic data. More about MARC can be found at the Library of Congress: -http://lcweb.loc.gov/marc - -Below are some common examples of how you might want to use pymarc. If you -run across an example that you think should be here please contribute it -by writing to the author. - -1. Reading a batch of records and printing out the 245 subfield a. If you - are curious this example uses the batch file available in the distribution. - - >>> from pymarc import MARCReader - >>> reader = MARCReader( 'test/marc.dat' ) - >>> for record in reader: - ... print record['245']['a'] - The pragmatic programmer : - Programming Python / - Learning Python / - Python cookbook / - Python programming for the absolute beginner / - Web programming : - Python programming on Win32 / - Python programming : - Python Web programming / - Core python programming / - Python and Tkinter programming / - Game programming with Python, Lua, and Ruby / - Python programming patterns / - Python programming with the Java class libraries : - Learn to program using Python : - Programming with Python / - BSD Sockets programming from a multi-language perspective / - Design patterns : - Introduction to algorithms / - ANSI Common Lisp / - -2. Creating a record and writing it out to a file. - - >>> from pymarc import Record, Field - >>> record = Record() - >>> record.addField( \ - ... Field( \ - ... tag = '245', - ... indicators = ['0','1'], - ... subfields = [ \ - ... 'a', 'The pragmatic programmer : ', - ... 'b', 'from journeyman to master /', - ... 'c', 'Andrew Hunt, David Thomas.' ] ) ) - >>> out = file( 'file.dat', 'w' ) - >>> out.write( record.asMARC21() ) - -''' - -__version__ = '0.11' - -from record import * -from field import * -from exceptions import * -from reader import * -from writer import * -from constants import * - -if __name__ == "__main__": - import doctest - doctest.testmod() - diff --git a/tags/rel-0.81/pymarc/constants.py b/tags/rel-0.81/pymarc/constants.py deleted file mode 100644 index bd148c2..0000000 --- a/tags/rel-0.81/pymarc/constants.py +++ /dev/null @@ -1,7 +0,0 @@ -LEADER_LEN = 24 -DIRECTORY_ENTRY_LEN = 12 -SUBFIELD_INDICATOR = chr( 0x1F ) -END_OF_FIELD = chr( 0x1E ) -END_OF_RECORD = chr( 0x1D ) - - diff --git a/tags/rel-0.81/pymarc/exceptions.py b/tags/rel-0.81/pymarc/exceptions.py deleted file mode 100644 index 4be03df..0000000 --- a/tags/rel-0.81/pymarc/exceptions.py +++ /dev/null @@ -1,30 +0,0 @@ -class pymarcException( Exception ): - pass - -class RecordLengthInvalid( pymarcException): - def __str__( self ): - return( "Invalid record length in first 5 bytes of record" ) - -class RecordLeaderInvalid( pymarcException ): - def __str__ ( self ): - return "Unable to extract record leader" - -class RecordDirectoryInvalid( pymarcException ): - def __str__( self ): - return "Invalid directory" - -class NoFieldsFound( pymarcException ): - def __str__ ( self ): - return "Unable to locate fields in record data" - -class BaseAddressInvalid( pymarcException ): - def __str__ ( self ): - return "Base address exceeds size of record" - -class WriteNeedsRecord( pymarcException ): - def __str__( self ): - return "Write requires a pymarc.Record object as an argument" - -class NoActiveFile( pymarcException ): - def __str__( self ): - return "There is no active file to write to in call to write" diff --git a/tags/rel-0.81/pymarc/field.py b/tags/rel-0.81/pymarc/field.py deleted file mode 100644 index fac5897..0000000 --- a/tags/rel-0.81/pymarc/field.py +++ /dev/null @@ -1,127 +0,0 @@ -from constants import * -from exceptions import * - -class Field( object ): - - def __init__( self, tag, indicators=[], subfields=[], data='' ): - """ - Field() pass in the field tag, indicators and subfields for the tag. - - field = Field( \ - tag = '245', - indicators = ['0','1'], - subfields = [ \ - 'a', 'The pragmatic programmer : ', - 'b', 'from journeyman to master /', - 'c', 'Andrew Hunt, David Thomas.' ] - - If you want to create a control field you don't pas in the indicators - and use a data parameter rather than a subfields parameter: - - field = Field( tag='001', data='fol05731351' ) - - """ - tag = "%03s" % tag - if ( tag < '010' ): - self.tag = tag - self.data = data - else: - self.tag = tag - self.indicator1 = indicators[0] - self.indicator2 = indicators[1] - self.subfields = subfields - - def __iter__(self): - self.__pos = 0 - return self - - def __str__( self ): - """ - A Field object in a string context will return the tag, indicators - and subfield as a string. - """ - if ( self.isControlField() ): - text = "%s %s" % ( self.tag, self.data ) - else: - text = "%s %s%s " % ( self.tag, self.indicator1, self.indicator2 ) - for subfield in self: - text += ("$%s%s" % subfield) - return text - - def __getitem__( self, subfield ): - """ - Retrieve the first subfield with a given subfield code in a field: - - field['a'] - - Handy for quick lookups. - """ - subfields = self.getSubfields( subfield ) - if len(subfields) > 0: return subfields[0] - return None - - def next( self ): - while self.__pos < len(self.subfields): - subfield = ( self.subfields[ self.__pos ], \ - self.subfields[ self.__pos+1 ] ) - self.__pos += 2 - return subfield - raise StopIteration - - def value( self ): - """ - Returns the field as a string without tag, indicators, and - subfield indicators. - """ - if self.isControlField(): - return self.data - string = "" - for subfield in self: - string += subfield[1] - return string - - def getSubfields( self, *codes ): - """ - getSubfields() accepts one or more subfield codes and will return a list - of subfield values. The order of the subfield values in the list - will be the order that they appear in the field. - - print field.getSubfields( 'a' ) - - print field.getSubfields( 'a', 'b', 'z' ) - """ - values = [] - for subfield in self: - if subfield[0] in codes: - values.append( subfield[1] ) - return values - - def addSubfield( self, code, value ): - """ - Adds a subfield code/value pair to the field. - - field.addSubfield('u', 'http://www.loc.gov') - """ - self.subfields.append(code) - self.subfields.append(value) - - def isControlField( self ): - """ - returns true or false if the field is considered a control field. - Control fields lack indicators and subfields. - """ - if self.tag < '010': - return True - return False - - def asMARC21( self ): - """ - used during conversion of a field to raw marc - """ - if self.isControlField(): - return self.data + END_OF_FIELD - marc = str(self.indicator1) + str(self.indicator2) - for subfield in self: - marc += SUBFIELD_INDICATOR + subfield[0] + subfield[1] - return marc + END_OF_FIELD - diff --git a/tags/rel-0.81/pymarc/reader.py b/tags/rel-0.81/pymarc/reader.py deleted file mode 100644 index 8258868..0000000 --- a/tags/rel-0.81/pymarc/reader.py +++ /dev/null @@ -1,56 +0,0 @@ -from pymarc import Record, Field -from constants import END_OF_RECORD -from exceptions import * -from types import * -from cStringIO import StringIO - -class Reader( object ): - """ - A base class for all iterating readers in the pymarc package. - """ - def __iter__( self ): - return self - -class MARCReader( Reader ): - """ - An iterator class for reading a file of MARC21 records. - - Simple usage: - - from pymarc import MARCReader - - ## pass in a file object - reader = MARCReader(file('file.dat')) - for record in reader: - ... - - ## pass in marc in transmission format - reader = MARCReader(rawmarc) - for record in reader: - ... - - """ - - def __init__(self, f): - """ - The constructor which you can pass either raw marc or a file object. - """ - if (type(f) == FileType): self.fh = f - else: self.fh = StringIO(f) - - def next( self ): - """ - To support iteration. - """ - first5 = self.fh.read( 5 ) - if not first5: - raise StopIteration - if len( first5 ) < 5: - raise RecordLengthInvalid - - length = int( first5 ) - chunk = self.fh.read( length - 5 ) - chunk = first5 + chunk - r = Record( chunk ) - return r - diff --git a/tags/rel-0.81/pymarc/record.py b/tags/rel-0.81/pymarc/record.py deleted file mode 100644 index 2d2f818..0000000 --- a/tags/rel-0.81/pymarc/record.py +++ /dev/null @@ -1,258 +0,0 @@ -from exceptions import * -from constants import * -from field import * -from types import * -import string -import re - - -class Record( object ): - """ - Record - - A class for representing a MARC record. Each Record object is made up of - multiple Field objects. You'll probably want to look at the docs for Field - to see how to fully use a Record object. - - Basic usage: - - field = Field( \ - tag = '245', - indicators = ['0','1'], - subfields = [ \ - 'a', 'The pragmatic programmer : ', - 'b', 'from journeyman to master /', - 'c', 'Andrew Hunt, David Thomas.' ] - - record.addField( field ) - - Or creating a record from a chunk of MARC in transmission format: - - record = Record( data=chunk ) - - Or getting a record as serialized MARC21. - - raw = record.asMARC21() - - You'll normally want to use a MARCReader object to iterate through - MARC records in a file. - """ - - def __init__( self, data='' ): - self.leader = ' ' * LEADER_LEN - self.fields = list() - self.pos = 0 - if len(data) > 0: - ok = self.decodeMARC( data ) - - def __str__( self ): - """ - In a string context a Record object will return a prettified version - of the record resembling something like this: - """ - # join is significantly faster than concatenation - text = "LDR %s\n" % self.leader - text += string.join( map( str, self.fields ), "\n" ) - return text - - def __getitem__( self, tag ): - """ - Allows a shorthand lookup by tag: - - record["245"] - - """ - fields = self.getFields( tag ) - if len(fields) > 0: return fields[0] - return None - - def __iter__( self ): - self.__pos = 0 - return self - - def next(self): - if self.__pos >= len( self.fields ): - raise StopIteration - self.__pos += 1 - return self.fields[ self.__pos-1 ] - - def addField( self, *fields ): - """ - addField() will add pymarc.Field objects to a Record object. - Optionally you can pass in multiple fields. - """ - for field in fields: - self.fields.append( field ) - - def getFields( self, *args ): - """ - When passed a tag ( '245' ) getFields() will return a list of all the - fields in a record with a given tag. - - title = record.getFields( '245' ) - - If no fields with the specified - tag are found then an empty list is returned. If you are interested - in more than one tag you can pass in a list: - - subjects = record.getFields( '600', '610', '650' ) - - If no tag is passed in to fields() a list of all the fields will be - returned. - """ - if (len(args) == 0): - return self.fields - - found = list() - for field in self.fields: - if field.tag in args: - found.append( field ) - return found - - def decodeMARC( self, marc ): - """ - decodeMARC() accepts a MARC record in transmission format as a - a string argument, and will populate the object based on the data - found. The Record constructor actually uses decodeMARC() behind - the scenes when you pass in a chunk of MARC data to it. - - """ - - # extract record leader - self.leader = marc[ 0 : LEADER_LEN ] - if len( self.leader ) != LEADER_LEN: raise RecordLeaderInvalid - - # extract the byte offset where the record data starts - baseAddress = int( marc[ 12 : 17 ] ) - if baseAddress <= 0: raise BaseAddressNotFound - if baseAddress >= len( marc ): raise BaseAddressInvalid - - # extract directory, baseAddress-1 is used since the - # director ends with an END_OF_FIELD byte - directory = marc[ LEADER_LEN : baseAddress-1 ] - - # determine the number of fields in record - if len(directory) % DIRECTORY_ENTRY_LEN <> 0: - raise RecordDirectoryInvalid - numFields = len( directory ) / DIRECTORY_ENTRY_LEN - - # add fields to our record using directory offsets - fieldNum = 0 - while ( fieldNum < numFields ): - entryStart = fieldNum * DIRECTORY_ENTRY_LEN - entryEnd = entryStart + DIRECTORY_ENTRY_LEN - entry = directory[ entryStart : entryEnd ] - entryTag = entry[ 0 : 3 ] - entryLength = int( entry[ 3 : 7 ] ) - entryOffset = int( entry[ 7 : 12 ] ) - entryData = marc[ baseAddress + entryOffset : - baseAddress + entryOffset + entryLength - 1 ] - - if entryTag < '010': - field = Field( tag=entryTag, data=entryData ) - else: - subfields = list() - subs = entryData.split( SUBFIELD_INDICATOR ) - i1 = subs[0][0] - i2 = subs[0][1] - for subfield in subs[1:]: - if len(subfield) == 0: continue - code = subfield[0] - data = subfield[1:] - subfields.append( code ) - subfields.append( data ) - field = Field( - tag = entryTag, - indicators = [ i1, i2 ], - subfields = subfields ) - - self.addField( field ) - fieldNum += 1 - - if fieldNum == 0: raise NoFieldsFound - - def asMARC21( self ): - """ - returns the record serialized as MARC21 - """ - fields = '' - directory = '' - offset = 0 - - # build the directory - # each element of the directory includes the tag, the byte length of - # the field and the offset from the base address where the field data - # can be found - for field in self.fields: - fieldData = field.asMARC21() - fields += fieldData - directory += "%03d%04d%05d" % (int(field.tag),len(fieldData),offset) - offset += len( fieldData ) - - # directory ends with an end of field - directory += END_OF_FIELD - - # field data ends with an end of record - fields += END_OF_RECORD - - # the base address where the directory ends and the field data begins - baseAddress = LEADER_LEN + len(directory) - - # figure out the length of the record - recordLength = baseAddress + len(fields) - - # update the leader with the current record length and base address - # the lengths are fixed width and zero padded - self.leader = "%05d%s%05d%s" % \ - ( recordLength, self.leader[5:12], baseAddress, self.leader[17:] ) - - # return the encoded record - return self.leader + directory + fields - - def title( self ): - """ - Returns the title of the record (245 $a an $b). - """ - title = None - try: - title = self['245']['a'] - title += self['245']['b'] - except TypeError, e: - pass - return title - - def isbn( self ): - """ - Returns an ISBN if appropriate. If not present None will - be returned. - """ - isbn = None - try: - # if anyone ever cares alot about performance - # this compilation could be moved out and compiled once - isbnPattern = re.compile( '^([0-9A-Za-z]+)' ) - isbn = isbnPattern.match( self["020"]["a"] ).group(1) - except Exception, e: - pass - return isbn - - def author( self ): - # todo - pass - - def publisher( self ): - # todo - pass - - def pubyear( self ): - # todo - pass - - def subjects( self ): - # todo - pass - - def notes( self ): - # todo - pass - diff --git a/tags/rel-0.81/pymarc/writer.py b/tags/rel-0.81/pymarc/writer.py deleted file mode 100644 index 23c32ff..0000000 --- a/tags/rel-0.81/pymarc/writer.py +++ /dev/null @@ -1,49 +0,0 @@ -from pymarc import Record, Field, WriteNeedsRecord, NoActiveFile -from types import * -from cStringIO import StringIO - -class Writer( object ): - - def write( self ): - pass - -class MARCWriter( Writer ): - """ - A class for writing MARC21 records in transmission format. - - Simple usage: - - from pymarc import MARCWriter - - ## pass in a file - writer = MARCWriter(file('file.dat','w')) - writer.write(record) - - ## use StringIO if you want to write to a string - string = StringIO() - writer = MARCWriter(string) - writer.write(record) - print string - """ - - def __init__(self, f): - """ - You need to pass in a file like object. - """ - self.fh = f - - def write(self, record): - """ - Writes a record. - """ - if type(record) != Record: - raise WriteNeedsRecord - self.fh.write(record.asMARC21()) - - def close( self ): - """ - Closes the file. - """ - self.fh.close() - self.fh = None - diff --git a/tags/rel-0.81/setup.py b/tags/rel-0.81/setup.py deleted file mode 100644 index acad914..0000000 --- a/tags/rel-0.81/setup.py +++ /dev/null @@ -1,35 +0,0 @@ -import sys -from distutils.core import setup - -classifiers = """\ -Intended Audience :: Education -Intended Audience :: Developers -Intended Audience :: Information Technology -License :: OSI Approved :: BSD License -Programming Language :: Python -Topic :: Text Processing :: General -""" - -# workaround for older pythons that don't -# understand classifiers - -if sys.version_info < (2, 3): - _setup = setup - def setup(**kwargs): - if kwargs.has_key("classifiers"): - del kwargs["classifiers"] - _setup(**kwargs) - -setup( - name = 'pymarc', - version = '0.81', - url = 'http://www.textualize.com/pymarc', - download_url = 'http://www.textualize.com/archive/pymarc/latest.tar.gz', - author = 'Ed Summers', - author_email = 'ehs@pobox.com', - license = 'http://www.opensource.org/licenses/bsd-license.php', - packages = [ 'pymarc' ], - description = "read, write and modify MARC bibliographic data", - classifiers = filter( None, classifiers.split("\n") ), -) - diff --git a/tags/rel-0.81/test.py b/tags/rel-0.81/test.py deleted file mode 100644 index 8ea1517..0000000 --- a/tags/rel-0.81/test.py +++ /dev/null @@ -1,19 +0,0 @@ -import unittest -import test.record -import test.field -import test.reader -import test.encode -import test.writer - -def suite(): - suite = unittest.TestSuite() - suite.addTest( test.record.suite() ) - suite.addTest( test.field.suite() ) - suite.addTest( test.reader.suite() ) - suite.addTest( test.encode.suite() ) - suite.addTest( test.writer.suite() ) - return suite - -runner = unittest.TextTestRunner() -runner.run( suite() ) - diff --git a/tags/rel-0.81/test/__init__.py b/tags/rel-0.81/test/__init__.py deleted file mode 100644 index c297d12..0000000 --- a/tags/rel-0.81/test/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -import record -import field -import reader diff --git a/tags/rel-0.81/test/encode.py b/tags/rel-0.81/test/encode.py deleted file mode 100644 index 17454e1..0000000 --- a/tags/rel-0.81/test/encode.py +++ /dev/null @@ -1,25 +0,0 @@ -import util -from pymarc import MARCReader, Record, Field -import unittest -import os - -class Encode( unittest.TestCase ): - - def testEncodeDecode( self ): - # get raw data from file - original = file( 'test/one.dat' ).read() - # create a record object for the file - reader = MARCReader(file('test/one.dat')) - record = reader.next() - # make sure original data is the same as - # the record encoded as MARC - raw = record.asMARC21() - self.assertEqual( original, raw ) - -def suite(): - suite = unittest.makeSuite( Encode, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - diff --git a/tags/rel-0.81/test/field.py b/tags/rel-0.81/test/field.py deleted file mode 100644 index e7366a0..0000000 --- a/tags/rel-0.81/test/field.py +++ /dev/null @@ -1,73 +0,0 @@ -import util -import unittest -from pymarc.record import Record, Field - -class FieldTest( unittest.TestCase ): - - def setUp( self ): - self.field = Field( - tag = '245', - indicators = [ 0, 1 ], - subfields = [ - 'a', 'Huckleberry Finn: ', - 'b', 'An American Odyssey' - ] - ) - - def testString( self ): - self.assertEquals( str(self.field), - '245 01 $aHuckleberry Finn: $bAn American Odyssey') - - def testIndicators( self ): - assert self.field.indicator1 is 0 - self.assertEqual( self.field.indicator2, 1 ) - - def testSubfieldsCreated( self ): - subfields = self.field.subfields - self.assertEqual( len( subfields ), 4 ) - - def testSubfieldShort( self ): - self.assertEqual( self.field['a'], 'Huckleberry Finn: ' ) - self.assertEqual( self.field['z'], None ) - - def testSubfields( self ): - self.assertEqual( self.field.getSubfields( 'a' ), - ['Huckleberry Finn: '] ) - - def testSubfieldsMulti( self ): - self.assertEqual( self.field.getSubfields( 'a','b' ), - ['Huckleberry Finn: ', 'An American Odyssey' ] ) - - def testEncode( self ): - self.field.asMARC21() - - def testIterator( self ): - string = "" - for subfield in self.field: - string += subfield[0] - string += subfield[1] - self.assertEquals( string, "aHuckleberry Finn: bAn American Odyssey" ) - - def testValue( self ): - self.assertEquals( self.field.value(), - 'Huckleberry Finn: An American Odyssey' ) - controlField = Field( tag='001', data='foobar' ) - self.assertEquals( controlField.value(), "foobar" ) - - def testNonIntegerTag( self ): - # make sure this doesn't throw an exception - f = Field( tag="3 0", indicators=[0,1], subfields=['a', 'foo'] ) - - def testAddSubfield( self ): - f = Field( tag="245", indicators=[0,1], subfields=['a', 'foo'] ) - f.addSubfield('a','bar') - self.assertEquals( f.__str__(), '245 01 $afoo$abar') - -def suite(): - suite = unittest.makeSuite( FieldTest, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - - diff --git a/tags/rel-0.81/test/marc.dat b/tags/rel-0.81/test/marc.dat deleted file mode 100644 index 9c52c7d..0000000 --- a/tags/rel-0.81/test/marc.dat +++ /dev/null @@ -1 +0,0 @@ -01060cam 22002894a 45000010009000000050017000090080041000260350021000679060045000889250044001339550160001779550053003370100017003900200015004070400018004220420008004400500023004480820014004711000025004852450088005102600044005983000027006425040041006696500026007107000026007369850008007621177850420040816084925.0990802s2000 mau b 001 0 eng  a(DLC) 99043581 a0bvipcorignewd1eocipf19gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc05 to ja00 08-02-99; jf05 to subj. 08/02/99; jf11 to sl 08-03-99; jf25 08-05-99 to ddc; bk rec'd, to CIP ver. ps07 01-07-00; CIP ver jf05 to sl 04/05/00 aADDED COPIES: another copy to ASCD ps15 01-12-00 a 99043581  a020161622X aDLCcDLCdDLC apcc00aQA76.6b.H857 200000a005.12211 aHunt, Andrew,d1964-14aThe pragmatic programmer :bfrom journeyman to master /cAndrew Hunt, David Thomas. aReading, Mass :bAddison-Wesley,c2000. axxiv, 321 p. ;c24 cm. aIncludes bibliographical references. 0aComputer programming.1 aThomas, David,d1956- eGAP00979cam 2200241 a 45000010009000000050017000090080041000269060045000679250042001129550206001540100017003600200015003770400018003920500026004100820017004361000016004532450037004692500012005062600051005183000078005695040051006476500039006981251588220020923085341.0010827s2001 cc a b 001 0 eng  a7bcbccorigcopd2encipf20gy-gencatlg0 aacquireb2 shelf copyxpolicy default apb07 2001-08-27 to ASCDajf00 2001-08-31ajf00 2001-09-05;cjf03 2001-10-16 to Subj.djf01 2001-10-25 to slejf12 2001-11-23; jf12 to Dewey 11-23-01aaa20 2001-12-07; copy 2 added jf16 to BCCD 09-23-02 a 2001276084 a0596000855 aDLCcDLCdDLC00aQA76.73.P98bL88 200100a005.13/32211 aLutz, Mark.10aProgramming Python /cMark Lutz. a2nd ed. aBeijing :aSebastopol, CA :bO'Reilly,cc2001. axxxvii, 1255 p. :bill. ;c24 cm. +e1 computer optical disc (4 3/4 in.). aIncludes bibliographical references and index. 0aPython (Computer program language)00887cam 2200253 a 45000010009000000050017000090080041000269060045000679250044001129550151001560100017003070200015003240400018003390500027003570820017003841000016004012450051004172500012004682600040004803000035005205040020005556500039005757000019006141361051220040714135238.0040601s2004 caua 001 0 eng  a7bcbccorigcopd2encipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apv17 2004-06-01 Preprocessor to ASCDajf00 2004-06-03;cjf03 2004-06-24 to Subj.djf09 2004-06-28 to slejf12 2004-07-01 to Deweyaaa25 2004-07-14 a 2004273129 a0596002815 aDLCcDLCdDLC00aQA76.73.P98bL877 200400a005.13/32221 aLutz, Mark.10aLearning Python /cMark Lutz and David Ascher. a2nd ed. aSebastopol, CA :bO'Reilly,cc2004. axxvi, 591 p. :bill. ;c24 cm. aIncludes index. 0aPython (Computer program language)1 aAscher, David.01038cam 2200289 a 45000010009000000050017000090080041000269060045000679250042001129550167001540100017003210150015003380200015003530350023003680400023003910420014004140500026004280820017004542450065004712600039005363000027005755000048006025000020006506500039006707000020007097000019007291306994220030606071827.0030127s2002 cau 001 0 eng  a7bcbcccopycatd2encipf20gy-gencatlg0 aacquireb2 shelf copyxpolicy default aps04 2003-01-27 to ASCDajf00 2003-01-30cjf05 2003-01-30 to subj.djf09 2003-01-30 to slejf12 2003-02-03 to Deweyaaa20 2003-03-10ajg07 2003-06-06 copy 2 added a 2003268354 aGBA2-Y6761 a0596001673 a(OCoLC)ocm49044543 aUKMcUKMdCUSdDLC alccopycat00aQA76.73.P98bP95 200200a005.13/322100aPython cookbook /cedited by Alex Martelli and David Ascher. aSebastopol, CA :bO'Reilly,c2002. axxix, 574 p. ;c24 cm. a"Recipes from the Python community"--Cover. aIncludes index. 0aPython (Computer program language)1 aMartelli, Alex.1 aAscher, David.00759nam 22002295a 45000010009000000050017000090080041000260350022000679060045000899250044001349550020001780100017001980200015002150400013002300420008002431000021002512450068002722600084003402630009004243000012004339630084004451312796220030318153335.0030318s2003 inu 000 0 eng  a(DLC) 2003104024 a0bibccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2003-03-18 a 2003104024 a1592000738 aDLCcDLC apcc1 aDawson, Michael.10aPython programming for the absolute beginner /cMichael Dawson. aIndianapolis, IN :bPremier Press Inc., a division of Course Technology,c2003. a0306 ap.ccm. aMargaret Bauer ; phone (812) 273-0561 ; fax null email margaret_bauer@yahoo.com01304cam 22002894a 45000010009000000050017000090080041000269060045000679250044001129550280001560100017004360200015004530400018004680420008004860500024004940820017005181000049005352450150005842460030007342600053007643000036008175040064008536500026009176500023009437000021009667000027009871256551420020718085037.0011016s2002 njua b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2001-10-16 to ASCD;cjf03 2001-10-17 to Subj.djf01 2001-10-25 to slejf25 2001-10-25 to Deweyaaa20 2001-10-26aps16 2002-01-11 bk rec'd, to CIP ver.ajf00 2002-01-16fjf04 2002-01-18 to S.L.gjf12 2002-01-18 to bccdajf00 2002-03-26; copy 2 added jf16 to BCCD 07-18-02 a 2001055410 a0130410659 aDLCcDLCdDLC apcc00aQA76.625b.T48 200200a005.2/762211 aThiruvathukal, George K.q(George Kuriakose)10aWeb programming :btechniques for integrating Python, Linux, Apache, and MySQL /cGeorge K. Thiruvathukal, John P. Shafaee, Thomas W. Christoper.14aWeb programming in Python aUpper Saddle River, NJ :bPrentice Hall,cc2002. axviii, 745 p. :bill. ;c24 cm. aIncludes bibliographical references (p. 723-725) and index. 0aInternet programming. 0aWeb sitesxDesign.1 aShafaee, John P.1 aChristopher, Thomas W.01023cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550168001560100017003240200035003410400018003760420008003940500026004020820016004281000029004442450067004732500012005402600051005523000035006035000020006386500039006586300021006977000027007181187737320010105091546.0991228s2000 cc a 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc01 12-28-99; jf03 01-04-00 ; jf11 to sl 1-4-00; jf12 to Dewey 01-06-00; aa05 01-10-00; CIP ver. pv08 to BCCD 05-01-00; copy 2 added jf16 to BCCD 01-05-01 a 99085714  a1565926218 (pbk. : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P98bH36 200000a005.2652211 aHammond, Markq(Mark J.)10aPython programming on Win32 /cMark Hammond and Andy Robinson. a1st ed. aBeijing ;aSebastopol, CA :bO'Reilly,cc2000. axvii, 652 p. :bill. ;c24 cm. aIncludes index. 0aPython (Computer program language)00aMicrosoft Win32.1 aRobinson, Andy,d1967-00867cam 22002538a 45000010009000000050017000090080041000269060045000679250044001129550127001560100017002830200015003000400013003150420008003280500026003360820017003621000019003792450080003982600047004782630009005253000011005346500039005459630029005841343237720031222144424.0031211s2003 oru 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc27 2003-12-11 RUSH to ASCDcjf07 2003-12-17 to subjectdjf09 2003-12-17 to slejp05 2003-12-18 to Deweyaaa20 2003-12-22 a 2003064366 a1887902996 aDLCcDLC apcc00aQA76.73.P98bZ45 200300a005.13/32221 aZelle, John M.10aPython programming :ban introduction to computer science /cJohn M. Zelle. aWilsonville, OR :bFranklin, Beedlec2003. a0312 ap. cm. 0aPython (Computer program language) aTom Sumner, 503-682-766801008cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550171001560100017003270200015003440400018003590420008003770500026003850820018004111000026004292450065004552600046005203000034005665000020006006500039006206500026006596500023006857000022007081222727720030509151148.0001109s2002 inua 001 0 eng  a7bcbccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 11-09-00apv11 2002-04-12 2 copies to ASCDajf00 2002-04-18;cjf03 2002-08-20 to Subj.djf09 2002-08-21 to slejf25 2002-09-10 2 copies to Deweyaaa05 2002-10-04 a 00110884  a0735710902 aDLCcDLCdDLC apcc00aQA76.73.P98bH65 200200a005.2/7622211 aHolden, Steve,d1950-10aPython Web programming /cSteve Holden [with David Beazley]. aIndianapolis, Ind. :bNew Riders,cc2002. axxi, 691 p. :bill. ;c23 cm. aIncludes index. 0aPython (Computer program language) 0aInternet programming. 0aWeb sitesxDesign.1 aBeazley, David M.01049cam 22002534a 45000010009000000050017000090080041000269060045000679250044001129550148001560100017003040200015003210400018003360420008003540500026003620820017003881000018004052450047004232600052004703000066005225040051005885380117006396500039007561216916820010522141328.0000911s2000 nju b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc16 09-11-00; jf02 09-12-00 ; jf11 to sl 9-12-00; jf12 to Dewey 09-14-00; aa05 09-14-00; CIP Ver. jf02 05-11-01; jf12 to BCCD 05-22-01 a 00047856  a0130260363 aDLCcDLCdDLC apcc00aQA76.73.P98bC48 200100a005.13/32211 aChun, Wesley.10aCore python programming /cWesley J. Chun. aUpper Saddle River, NJ :bPrentice Hall,c2001. axxix, 771 p. ;c24 cm. +e1 computer optical disc (4 3/4 in.) aIncludes bibliographical references and index. aSystem requirements for accompanying computer disc: Windows 9x/Me/NT/2000; a Web brouser; Macintosh; UNIX/Linux. 0aPython (Computer program language)00948cam 22002654a 45000010009000000050017000090080041000269060045000679250044001129550133001560100017002890200015003060400018003210420008003390500026003470820017003731000021003902450055004112600038004663000036005045040051005406500039005916500036006306300016006661213218820010817152505.0000804s2000 ctua b 001 0 eng  a7bcbccorignewd2encipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pb05 08-04-00;jfoo 08-08-00;cjf03 2001-07-18 to Subj.djf02 2001-07-19 to slejf25 2001-07-31 to Deweyaaa20 2001-08-17 a 00697831  a1884777813 aDLCcDLCdDLC apcc00aQA76.73.P98bG73 200000a005.13/32211 aGrayson, John E.10aPython and Tkinter programming /cJohn E. Grayson. aGreenwich, CT :bManning,cc2000. axxiii, 658 p. :bill. ;c24 cm. aIncludes bibliographical references and index. 0aPython (Computer program language) 0aTcl (Computer program language)00aTk toolkit.00767nam 22002295a 45000010009000000050017000090080041000260350022000679060045000899250044001349550020001780100017001980200015002150400013002300420008002432450081002512600079003322630009004113000012004204400021004329630084004531337832520031020153106.0031020s2003 inu 000 0 eng  a(DLC) 2003114351 a0bibccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc10 2003-10-20 a 2003114351 a1592000770 aDLCcDLC apcc00aGame programming with Python, Lua, and Ruby /c[edited by] Estelle Manticas. aIndianapolis, IN :bPremier Press, a Division of Course Technology,c2003. a0311 ap.ccm. aGame development aMargaret Bauer ; phone (812) 273-0561 ; fax null email margaret_bauer@yahoo.com01121cam 22002414a 45000010009000000050017000090080041000269060045000679250044001129550362001560100017005180200015005350400018005500420008005680500026005760820017006021000027006192450058006462600052007043000033007565040051007896500039008401256552920030227150222.0011016s2002 njua b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2001-10-16 to ASCD;cjf05 2001-10-17 to subj.djf04 2001-10-17 to S.L.ejf25 2001-10-25 to Deweyaaa20 2001-10-26aps11 2002-01-15 bk rec'd, to CIP ver.fjp07 2002-02-13ajp00 2002-03-08gjp85 2002-03-08 to BCCD; copy 2 added jf16 to BCCD 07-18-02ajf00 2003-01-29ajf07 2003-02-27 somehow copy 1 got back into the CIP ver. stream (handed to acting TL) a 2001055411 a0130409561 aDLCcDLCdDLC apcc00aQA76.73.P98bC47 200200a005.13/32211 aChristopher, Thomas W.10aPython programming patterns /cThomas W. Christopher. aUpper Saddle River, NJ :bPrentice Hall,c2002. axix 538 p. :bill. ;c24 cm. aIncludes bibliographical references and index. 0aPython (Computer program language)01062cam 22002778a 45000010009000000050017000090080041000269060045000679250044001129550120001560100017002760200028002930400013003210420008003340500026003420820018003681000024003862450134004102600041005442630009005853000011005946500039006056500037006446500039006819630064007201275256420020426115101.0020424s2002 mau 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc21 2002-04-24 to ASCDcjf05 2002-04-25 to subj.djf09 2002-04-25 to slejf25 2002-04-26 to Deweyaaa20 2002-04-26 a 2002066565 a0201616165 (alk. paper) aDLCcDLC apcc00aQA76.73.P98bH54 200200a005.2/7622211 aHightower, Richard.10aPython programming with the Java class libraries :ba tutorial for building Web and Enterprise applications /cRichard Hightower. aBoston, MA :bAddison-Wesley,c2002. a0207 ap. cm. 0aPython (Computer program language) 0aJava (Computer program language) 0aApplication softwarexDevelopment. aMarilyn Rash, 617-848-6509; email: timothy.nicholls@awl.com01012cam 22002294a 45000010009000000050017000090080041000269060045000679250044001129550192001560100017003480200028003650400018003930420008004110500026004190820017004451000017004622450151004792600042006303000071006726500039007431216723920010608101527.0000908s2001 mau b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc21 09-08-00;jf05 (desc) 09/08/00 ; jf11 to sl 9-11-00; jf12 to Dewey 09-12-00;aa03 9-12-00;CIP ver jf05 to sl 01/11/01; jf12 to BCCD 02-01-01; copy 2 added jf16 to BCCD 04-24-01 a 00046921  a0201709384 (alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P48bG38 200100a005.13/32211 aGauld, Alan.10aLearn to program using Python :ba tutorial for hobbyists, self-starters, and all who want to learn the art of computer programming /cAlan Gauld. aReading, MA :bAddison-Wesley,c2001. axii, 270 p. ;c24 cm.e+ 1 computer laser optical disc (4 3/4 in.) 0aPython (Computer program language)00935cam 22002534a 450000100070000000500170000700800410002403500210006590600450008692500440013195501480017501000170032302000220034004000180036204200080038005000260038808200170041410000160043124500610044726000390050830000750054765000390062270000200066120525620000830103214.0990629s2000 caua 001 0 eng  9(DLC) 99065006 a7bcbccorignewd2eopcnf19gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apn08/e-pcn 06-29-99; to ASCD pb02 06-10-00; jf00 06-13-00; jf03 08-17-00 ; jf11 to sl 8-22-00; jf25 2 copies to Dewey 08-24-00; aa19 08-30-2000 a 99065006  a0761523340 (pbk.) aDLCcDLCdDLC apcc00aQA76.73.P98bA48 199900a005.13/32211 aAltom, Tim.10aProgramming with Python /cTim Altom with Mitch Chapman. aRocklin, CA :bPrima Tech,cc1999. axxxiv, 372 p. :bill. ;c24 cm. +e1 computer optical disc (4 3/4 in.) 0aPython (Computer program language)1 aChapman, Mitch.01214cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550202001560100017003580200047003750400018004220420008004400500024004480820017004721000019004892450079005082600051005873000058006386500026006966500048007226500040007706500049008108560077008591328439520040226131230.0030722s2004 maua 001 0 eng  a7bcbccorignewd1eecipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ajf05 2003-07-22cjf05 2003-07-22 to subj.djf09 2003-07-22 to slejf12 2003-07-23 to Deweyaaa20 2003-07-29ajf00 2004-01-29fjf07 2004-02-02ejf12 2004-02-03 to BCCDajf16 2004-02-26 copy2 to BCCD a 2003016400 a1584502681 (Pbk. with CD-ROM : alk. paper) aDLCcDLCdDLC apcc00aQA76.625b.J66 200400a005.2/762221 aJones, M. Tim.10aBSD Sockets programming from a multi-language perspective /cM. Tim Jones. aHingham, Mass. :bCharles River Media,cc2004. axix, 444 p. :bill. ;c24 cm. +e1 CD-ROM (4 3/4 in.) 0aInternet programming. 0aComputer networksxDesign and construction. 0aInternetworking (Telecommunication) 0aProgramming languages (Electronic computers)413Table of contentsuhttp://www.loc.gov/catdir/toc/ecip047/2003016400.html01113cam 2200277 a 4500001000800000005001700008008004100025035002100066906004500087955011600132010001700248020003300265040001800298050002300316082001600339245009800355260004600453300003300499440004900532504006400581650005100645650003600696650002300732700001800755991006200773159816719981112152315.2940902s1995 maua b 001 0 eng  9(DLC) 94034264 a7bcbccorignewd1eocipf19gy-gencatlg apc18 to ja00 09-02-94; jf06 to subj 09-06-94; jf11 to sl 09-06-94; jf12 09-06-94 to ddc; CIP ver. jc03 11-23-94 a 94034264  a0201633612 (acid-free paper) aDLCcDLCdDLC00aQA76.64b.D47 199500a005.1/222000aDesign patterns :belements of reusable object-oriented software /cErich Gamma ... [et al.]. aReading, Mass. :bAddison-Wesley,cc1995. axv, 395 p. :bill. ;c25 cm. 0aAddison-Wesley professional computing series aIncludes bibliographical references (p. 375-381) and index. 0aObject-oriented programming (Computer science) 0aComputer softwarexReusability. 0aSoftware patterns.1 aGamma, Erich. bc-GenCollhQA76.64i.D47 1995p00011185514tCopy 1wBOOKS01233cam 2200289 a 45000010009000000050017000090080041000269060045000679250044001129550226001560100017003820200034003990400013004330500024004460820014004702450065004842460015005492500012005642600043005763000021006195000111006405040068007516500026008196500025008457000022008707000051008921237004420020812080859.0010405s2001 mau b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc20 to ja00 04-05-01; jp07 04-11-01 sent to sl;jp85 to Dewey 04-19-01; aa20 04-20-01aps13 2001-08-16 bk rec'd, to CIP ver.fjf07 2001-08-20ajf00 2001-08-20gjf12 2001-08-23 to bccdajf01 2001-09-13 copy 2 added to BCCD a 2001031277 a0262032937 (hc. : alk. paper) aDLCcDLC00aQA76.6b.I5858 200100a005.122100aIntroduction to algorithms /cThomas H. Cormen ... [et al.].30aAlgorithms a2nd ed. aCambridge, Mass. :bMIT Press,cc2001. axxi, 1180 p. cm. aRev. ed. of: Introduction to algorithms / Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest. c1990. aIncludes bibliographical references (p. [1127]-1130) and index. 0aComputer programming. 0aComputer algorithms.1 aCormen, Thomas H.1 aCormen, Thomas H.tIntroduction to algorithms.01009pam 2200265 a 4500001000800000005001700008008004100025035002100066906004500087955011600132010001700248020002200265040001800287050002600305082001700331100001800348245003700366260005300403300003500456440005200491500002700543504006400570650004400634991006500678303540919960425075058.2951006s1996 njua b 001 0 eng  9(DLC) 95045017 a7bcbccorignewd1eocipf19gy-gencatlg apc17 RUSH to ja00 10-06-95;jf05 to subj. 10/06/95; jf04 to S.L. 10-06-95; jf14 10-10-95; CIP ver. jk14 04-22-96 a 95045017  a0133708756 (pbk.) aDLCcDLCdDLC00aQA76.73.C28bG69 199600a005.13/32201 aGraham, Paul.10aANSI Common Lisp /cPaul Graham. aEnglewood Cliffs, N.J. :bPrentice Hall,cc1996. axiii, 432 p. :bill. ;c23 cm. 0aPrentice Hall series in artificial intelligence a"An Alan R. Apt book." aIncludes bibliographical references (p. 401-414) and index. 0aCOMMON LISP (Computer program language) bc-GenCollhQA76.73.C28iG69 1996p00034751468tCopy 1wBOOKS \ No newline at end of file diff --git a/tags/rel-0.81/test/one.dat b/tags/rel-0.81/test/one.dat deleted file mode 100644 index a43cf54..0000000 --- a/tags/rel-0.81/test/one.dat +++ /dev/null @@ -1 +0,0 @@ -00755cam 22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500fol05731351 IMchF20000613133448.0000107s2000 nyua 001 0 eng  a 00020737  a0471383147 (paper/cd-rom : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P22bM33 200000a005.13/32211 aMartinsson, Tobias,d1976-10aActivePerl with ASP and ADO /cTobias Martinsson. aNew York :bJohn Wiley & Sons,c2000. axxi, 289 p. :bill. ;c23 cm. +e1 computer laser disc (4 3/4 in.) a"Wiley Computer Publishing." 0aPerl (Computer program language)00aActive server pages.00aActiveX. \ No newline at end of file diff --git a/tags/rel-0.81/test/reader.py b/tags/rel-0.81/test/reader.py deleted file mode 100644 index 6cba456..0000000 --- a/tags/rel-0.81/test/reader.py +++ /dev/null @@ -1,45 +0,0 @@ -import util -import unittest -import pymarc -import re - -class MARCReaderFileTest( unittest.TestCase ): - """ - Tests for the pymarc.MARCReader class which provides iterator - based access to a MARC file. - """ - - def setUp( self ): - self.reader = pymarc.MARCReader(file('test/test.dat')) - - def testIterator( self ): - count = 0 - for record in self.reader: - count += 1 - self.assertEquals(count, 10, 'found expected amt of MARC21 records') - - def testString( self ): - ## basic test of stringification - startsWithLeader = re.compile( "^LDR" ) - hasNumericTag = re.compile( "\n\d\d\d " ) - for record in self.reader: - text = str(record) - self.failUnless( startsWithLeader.search(text), 'got leader') - self.failUnless(hasNumericTag.search(text), 'got a tag') - -class MARCReaderStringTest(MARCReaderFileTest): - - def setUp(self): - raw = file('test/test.dat').read() - self.reader = pymarc.reader.MARCReader(raw) - - # inherit same tests from MARCReaderTestFile - -def suite(): - fileSuite = unittest.makeSuite(MARCReaderFileTest, 'test') - stringSuite = unittest.makeSuite(MARCReaderStringTest, 'test') - suite = unittest.TestSuite((fileSuite, stringSuite)) - return suite - -if __name__ == "__main__": - unittest.main() diff --git a/tags/rel-0.81/test/record.py b/tags/rel-0.81/test/record.py deleted file mode 100644 index 7dd23df..0000000 --- a/tags/rel-0.81/test/record.py +++ /dev/null @@ -1,101 +0,0 @@ -import util -import unittest - -from pymarc import Record, Field -from pymarc.exceptions import * - -class RecordTest( unittest.TestCase ): - - def testAddField( self ): - record = Record() - field = Field( - tag = '245', - indicators = [ '1', '0' ], - data = [ 'a', 'Python', 'c', 'Guido' ] ) - record.addField( field ) - self.failUnless( field in record.fields, msg='found field' ) - - def testQuickAccess( self ): - record = Record() - title = Field( - tag = '245', - indicators = [ '1', '0' ], - data = [ 'a', 'Python', 'c', 'Guido' ] ) - record.addField( title ) - self.assertEqual( record['245'], title, 'short access' ) - self.assertEqual( record['999'], None, 'short access with no field' ) - - def testFieldNotFound( self ): - record = Record() - self.assertEquals( len( record.fields ), 0 ) - - def testFind( self ): - record = Record() - subject1 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Programming Language' ] ) - record.addField( subject1 ) - subject2 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Object Oriented' ] ) - record.addField( subject2 ) - found = record.getFields( '650' ) - self.assertEqual( found[0], subject1, 'getFields() item 1' ) - self.assertEqual( found[0], subject1, 'getFields() item 2' ) - found = record.getFields() - self.assertEqual(len(found), 2, 'getFields() with no tag') - - def testMultiFind( self ): - record = Record() - subject1 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Programming Language' ] ) - record.addField( subject1 ) - subject2 = Field( - tag = '651', - indicators = [ '', '0' ], - data = [ 'a', 'Object Oriented' ] ) - record.addField( subject2 ) - found = record.getFields( '650', '651' ) - self.assertEquals( len(found), 2 ) - - def testBadLeader( self ): - record = Record() - self.failUnlessRaises( RecordLeaderInvalid, - record.decodeMARC, 'foo' ) - - def testBadBaseAddress( self ): - record = Record() - self.failUnlessRaises( BaseAddressInvalid, - record.decodeMARC, '00695cam 2200241Ia 45x00' ) - - def testTitle( self ): - record = Record() - self.assertEquals( record.title(), None ) - record.addField( Field( '245', [0,1], - subfields=[ 'a', "Foo :", 'b', 'bar' ] ) ) - self.assertEquals( record.title(), 'Foo :bar' ) - - record = Record() - record.addField( Field( '245', [0,1], - subfields=[ 'a', "Farghin" ] ) ) - self.assertEquals( record.title(), "Farghin" ) - - def testISBN( self ): - record = Record() - self.assertEquals( record.isbn(), None ) - record.addField( Field( '020', [0,1], subfields=['a', '123456789' ] ) ) - self.assertEquals( record.isbn(), '123456789' ) - - -def suite(): - suite = unittest.makeSuite( RecordTest, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - - diff --git a/tags/rel-0.81/test/test.dat b/tags/rel-0.81/test/test.dat deleted file mode 100644 index 68d6dad..0000000 --- a/tags/rel-0.81/test/test.dat +++ /dev/null @@ -1 +0,0 @@ -00755cam 22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500fol05731351 IMchF20000613133448.0000107s2000 nyua 001 0 eng  a 00020737  a0471383147 (paper/cd-rom : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P22bM33 200000a005.13/32211 aMartinsson, Tobias,d1976-10aActivePerl with ASP and ADO /cTobias Martinsson. aNew York :bJohn Wiley & Sons,c2000. axxi, 289 p. :bill. ;c23 cm. +e1 computer laser disc (4 3/4 in.) a"Wiley Computer Publishing." 0aPerl (Computer program language)00aActive server pages.00aActiveX.00647pam 2200241 a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001500161100002600176245006700202260003800269263000900307300001100316650003700327650002500364700001600389fol05754809 IMchF20000601115601.0000203s2000 mau 001 0 eng  a 00022023  a1565926994 aDLCcDLCdDLC apcc00aQA76.73.P22bD47 200000a005.742211 aDescartes, Alligator.10aProgramming the Perl DBI /cAlligator Descartes and Tim Bunce. aCmabridge, MA :bO'Reilly,c2000. a1111 ap. cm. 0aPerl (Computer program language) 0aDatabase management.1 aBunce, Tim.00605cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077040001800094042000800112050002700120082001700147100002100164245005500185260004500240300002600285504005100311650003700362fol05843555 IMchF20000525142739.0000318s1999 cau b 001 0 eng  a 00501349  aDLCcDLCdDLC apcc00aQA76.73.P22bB763 199900a005.13/32211 aBrown, Martin C.10aPerl :bprogrammer's reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axix, 380 p. ;c22 cm. aIncludes bibliographical references and index. 0aPerl (Computer program language)00579cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002700135082001700162100002100179245005500200260004500255300003600300650003700336fol05843579 IMchF20000525142716.0000318s1999 caua 001 0 eng  a 00502116  a0072120002 aDLCcDLCdDLC apcc00aQA76.73.P22bB762 199900a005.13/32211 aBrown, Martin C.10aPerl :bthe complete reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axxxv, 1179 p. :bill. ;c24 cm. 0aPerl (Computer program language)00801nam 22002778a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001800156100002000174245008800194250003200282260004100314263000900355300001100364650003700375650003600412650002600448700002500474700002400499fol05848297 IMchF20000524125727.0000518s2000 mau 001 0 eng  a 00041664  a1565924193 aDLCcDLC apcc00aQA76.73.P22bG84 200000a005.2/7622211 aGuelich, Scott.10aCGI programming with Perl /cScott Guelich, Shishir Gundavaram & Gunther Birznieks. a2nd ed., expanded & updated aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language) 0aCGI (Computer network protocol) 0aInternet programming.1 aGundavaram, Shishir.1 aBirznieks, Gunther.00665nam 22002298a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002700130082001700157111005200174245008600226250001200312260004100324263000900365300001100374650005000385fol05865950 IMchF20000615103017.0000612s2000 mau 100 0 eng  a 00055759  a0596000138 aDLCcDLC apcc00aQA76.73.P22bP475 200000a005.13/32212 aPerl Conference 4.0d(2000 :cMonterey, Calif.)10aProceedings of the Perl Conference 4.0 :bJuly 17-20, 2000, Monterey, California. a1st ed. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)vCongresses.00579nam 22002178a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100002800173245006200201260004100263263000900304300001100313650003700324fol05865956 IMchF20000615102948.0000612s2000 mau 000 0 eng  a 00055770  a1565926099 aDLCcDLC apcc00aQA76.73.P22bB43 200000a005.13/32211 aBlank-Edelman, David N.10aPerl for system administration /cDavid N. Blank-Edelman. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)00661nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100001700173245006700190250001200257260004100269263000900310300001100319650003700330700002300367700001700390fol05865967 IMchF20000615102611.0000614s2000 mau 000 0 eng  a 00055799  a0596000278 aDLCcDLC apcc00aQA76.73.P22bW35 200000a005.13/32211 aWall, Larry.10aProgramming Perl /cLarry Wall, Tom Christiansen & Jon Orwant. a3rd ed. aCambridge, Mass. :bO'Reilly,c2000. a0007 ap. cm. 0aPerl (Computer program language)1 aChristiansen, Tom.1 aOrwant, Jon.00603cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001700161100003200178245006000210260005700270300003300327650003700360fol05872355 IMchF20000706095105.0000315s1999 njua 001 0 eng  a 00500678  a013020868X aDLCcDLCdDLC apcc00aQA76.73.P22bL69 199900a005.13/32211 aLowe, Vincentq(Vincent D.)10aPerl programmer's interactive workbook /cVincent Lowe. aUpper Saddle River, NJ :bPrentice Hall PTP,cc1999. axx, 633 p. :bill. ;c23 cm. 0aPerl (Computer program language)00696nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020002800094040001300122042000800135050002600143082001700169100002600186245004400212260005100256263000900307300001100316500002000327650003700347650001700384650004100401fol05882032 IMchF20000707091904.0000630s2000 cau 001 0 eng  a 00058174  a0764547291 (alk. paper) aDLCcDLC apcc00aQA76.73.P22bF64 200000a005.13/32212 aFoster-Johnson, Eric.10aCross-platform Perl /cEric F. Johnson. aFoster City, CA :bIDG Books Worldwide,c2000. a0009 ap. cm. aIncludes index. 0aPerl (Computer program language) 0aWeb servers. 0aCross-platform software development. \ No newline at end of file diff --git a/tags/rel-0.81/test/util.py b/tags/rel-0.81/test/util.py deleted file mode 100644 index 7ade343..0000000 --- a/tags/rel-0.81/test/util.py +++ /dev/null @@ -1,4 +0,0 @@ -import sys -sys.path.append( '../pymarc' ); - - diff --git a/tags/rel-0.81/test/writer.py b/tags/rel-0.81/test/writer.py deleted file mode 100644 index da67e79..0000000 --- a/tags/rel-0.81/test/writer.py +++ /dev/null @@ -1,27 +0,0 @@ -import util -import unittest -import pymarc -import re - -class MARCWriterTest(unittest.TestCase): - - def testWrite(self): - - # write a record off to a file - writer = pymarc.MARCWriter(file('test/writer-test.dat','w')) - record = pymarc.Record() - field = pymarc.Field('245', ['0','0'], ['a', 'foo']) - record.addField(field) - writer.write(record) - writer.close() - - # read it back in - reader = pymarc.MARCReader(file('test/writer-test.dat')) - record = reader.next() - -def suite(): - suite = unittest.makeSuite(MARCWriterTest, 'test') - return suite - -if __name__ == "__main__": - unittest.main() diff --git a/tags/rel-0.85/Changes b/tags/rel-0.85/Changes deleted file mode 100644 index e419ee6..0000000 --- a/tags/rel-0.85/Changes +++ /dev/null @@ -1,54 +0,0 @@ -v0.85 Fri Feb 3 13:08:35 EST 2006 - - added default leader template for when records are created - from scratch (thanks Kurt Nordstrom) - -v0.81 Mon Jan 30 16:33:36 EST 2006 - - getFields() wasn't returning all the fields when no tag - was passed in. - -v0.8 Mon Jan 30 07:05:36 CST 2006 - - added the ability to read raw marc from strings THIS MAY BREAK - YOUR CODE. pymarc no longer supports passing file paths to the - MARCReader constructor. You need to simply change: - - reader = MARCReader('marc.dat') - - to: - - reader = MARCReader(file('marc.dat')) - - Thanks to Daniel Hoth for suggesting this. It just makes sense to - be able to pass in MARC that you got from a Z39.50 network connection - or database, etc. - -v0.7 Mon Jan 23 15:08:55 EST 2006 - - added addSubfield() to Subfield (thanks Kurt Nordstrom) - -v0.6 Tue Nov 29 20:48:31 CST 2005 - - fixed test suite to run under the unittest that ships with python2.3 - - allow non-integer field tags - - fixed MARCWriter and added test (thanks Mikel Larreategi) - -v0.5 Thu Feb 10 10:01:12 CST 2005 - - handle empty subfields - -v0.4 Wed Feb 2 22:29:33 CST 2005 - - fixed directory validation: thanks Aaron Lav - - added iterator for pymarc.Field for iterating through subfields - - added pymarc.Field.value() for getting a field value easily - -v0.3 Wed Jan 5 17:03:37 CST 2005 - - changed mind about accessors (again): - removed getField() must use getFields() - renamed subfield() to getSubfields() and have it return a list - - added doctest support to pymarc/__init__.py - - added a test batch file of python data - -v0.2 Tue Jan 4 21:01:22 CST 2005 - - removed getField() and renamed getFields() to find() - -v0.11 Mon Jan 3 20:42:19 CST 2005 - - fixed test suite execution - -v0.1 Wed Dec 29 19:54:23 CST 2004 - - initial release diff --git a/tags/rel-0.85/MANIFEST.in b/tags/rel-0.85/MANIFEST.in deleted file mode 100644 index 591cc6d..0000000 --- a/tags/rel-0.85/MANIFEST.in +++ /dev/null @@ -1,3 +0,0 @@ -global-include *.py *.dat -include README MANIFEST.in - diff --git a/tags/rel-0.85/README b/tags/rel-0.85/README deleted file mode 100644 index 78d586c..0000000 --- a/tags/rel-0.85/README +++ /dev/null @@ -1,30 +0,0 @@ -DESCRIPTION ------------ - -pymarc is a python library for working with MARC21 bibliographic data -loosely based on the MARC/Perl suite of modules (http://marcpm.sf.net). -More about pymarc can be found at http://www.textualize.com/pymarc - -INSTALLATION ------------- - -Run the pymarc test suite to make sure things are in order with the -distribution: - - python test.py - -And then install: - - python setup.py install - -For typical usage of this library look at the documentation in -pymarc/__init__.py - -TODO ----- - -- marc8/utf8 translation -- marcxml support - -LICENSE: BSD -AUTHOR: Ed Summers diff --git a/tags/rel-0.85/pymarc/__init__.py b/tags/rel-0.85/pymarc/__init__.py deleted file mode 100644 index e7556f3..0000000 --- a/tags/rel-0.85/pymarc/__init__.py +++ /dev/null @@ -1,71 +0,0 @@ -# __init__.py - -r''' - -The pymarc module provides an API for reading, writing and modifying -MARC records. MARC (MAchine Readable Cataloging) is a metadata format for -bibliographic data. More about MARC can be found at the Library of Congress: -http://lcweb.loc.gov/marc - -Below are some common examples of how you might want to use pymarc. If you -run across an example that you think should be here please contribute it -by writing to the author. - -1. Reading a batch of records and printing out the 245 subfield a. If you - are curious this example uses the batch file available in the distribution. - - >>> from pymarc import MARCReader - >>> reader = MARCReader( 'test/marc.dat' ) - >>> for record in reader: - ... print record['245']['a'] - The pragmatic programmer : - Programming Python / - Learning Python / - Python cookbook / - Python programming for the absolute beginner / - Web programming : - Python programming on Win32 / - Python programming : - Python Web programming / - Core python programming / - Python and Tkinter programming / - Game programming with Python, Lua, and Ruby / - Python programming patterns / - Python programming with the Java class libraries : - Learn to program using Python : - Programming with Python / - BSD Sockets programming from a multi-language perspective / - Design patterns : - Introduction to algorithms / - ANSI Common Lisp / - -2. Creating a record and writing it out to a file. - - >>> from pymarc import Record, Field - >>> record = Record() - >>> record.addField( \ - ... Field( \ - ... tag = '245', - ... indicators = ['0','1'], - ... subfields = [ \ - ... 'a', 'The pragmatic programmer : ', - ... 'b', 'from journeyman to master /', - ... 'c', 'Andrew Hunt, David Thomas.' ] ) ) - >>> out = file( 'file.dat', 'w' ) - >>> out.write( record.asMARC21() ) - -''' - -__version__ = '0.85' - -from record import * -from field import * -from exceptions import * -from reader import * -from writer import * -from constants import * - -if __name__ == "__main__": - import doctest - doctest.testmod() - diff --git a/tags/rel-0.85/pymarc/constants.py b/tags/rel-0.85/pymarc/constants.py deleted file mode 100644 index bd148c2..0000000 --- a/tags/rel-0.85/pymarc/constants.py +++ /dev/null @@ -1,7 +0,0 @@ -LEADER_LEN = 24 -DIRECTORY_ENTRY_LEN = 12 -SUBFIELD_INDICATOR = chr( 0x1F ) -END_OF_FIELD = chr( 0x1E ) -END_OF_RECORD = chr( 0x1D ) - - diff --git a/tags/rel-0.85/pymarc/exceptions.py b/tags/rel-0.85/pymarc/exceptions.py deleted file mode 100644 index 4be03df..0000000 --- a/tags/rel-0.85/pymarc/exceptions.py +++ /dev/null @@ -1,30 +0,0 @@ -class pymarcException( Exception ): - pass - -class RecordLengthInvalid( pymarcException): - def __str__( self ): - return( "Invalid record length in first 5 bytes of record" ) - -class RecordLeaderInvalid( pymarcException ): - def __str__ ( self ): - return "Unable to extract record leader" - -class RecordDirectoryInvalid( pymarcException ): - def __str__( self ): - return "Invalid directory" - -class NoFieldsFound( pymarcException ): - def __str__ ( self ): - return "Unable to locate fields in record data" - -class BaseAddressInvalid( pymarcException ): - def __str__ ( self ): - return "Base address exceeds size of record" - -class WriteNeedsRecord( pymarcException ): - def __str__( self ): - return "Write requires a pymarc.Record object as an argument" - -class NoActiveFile( pymarcException ): - def __str__( self ): - return "There is no active file to write to in call to write" diff --git a/tags/rel-0.85/pymarc/field.py b/tags/rel-0.85/pymarc/field.py deleted file mode 100644 index fac5897..0000000 --- a/tags/rel-0.85/pymarc/field.py +++ /dev/null @@ -1,127 +0,0 @@ -from constants import * -from exceptions import * - -class Field( object ): - - def __init__( self, tag, indicators=[], subfields=[], data='' ): - """ - Field() pass in the field tag, indicators and subfields for the tag. - - field = Field( \ - tag = '245', - indicators = ['0','1'], - subfields = [ \ - 'a', 'The pragmatic programmer : ', - 'b', 'from journeyman to master /', - 'c', 'Andrew Hunt, David Thomas.' ] - - If you want to create a control field you don't pas in the indicators - and use a data parameter rather than a subfields parameter: - - field = Field( tag='001', data='fol05731351' ) - - """ - tag = "%03s" % tag - if ( tag < '010' ): - self.tag = tag - self.data = data - else: - self.tag = tag - self.indicator1 = indicators[0] - self.indicator2 = indicators[1] - self.subfields = subfields - - def __iter__(self): - self.__pos = 0 - return self - - def __str__( self ): - """ - A Field object in a string context will return the tag, indicators - and subfield as a string. - """ - if ( self.isControlField() ): - text = "%s %s" % ( self.tag, self.data ) - else: - text = "%s %s%s " % ( self.tag, self.indicator1, self.indicator2 ) - for subfield in self: - text += ("$%s%s" % subfield) - return text - - def __getitem__( self, subfield ): - """ - Retrieve the first subfield with a given subfield code in a field: - - field['a'] - - Handy for quick lookups. - """ - subfields = self.getSubfields( subfield ) - if len(subfields) > 0: return subfields[0] - return None - - def next( self ): - while self.__pos < len(self.subfields): - subfield = ( self.subfields[ self.__pos ], \ - self.subfields[ self.__pos+1 ] ) - self.__pos += 2 - return subfield - raise StopIteration - - def value( self ): - """ - Returns the field as a string without tag, indicators, and - subfield indicators. - """ - if self.isControlField(): - return self.data - string = "" - for subfield in self: - string += subfield[1] - return string - - def getSubfields( self, *codes ): - """ - getSubfields() accepts one or more subfield codes and will return a list - of subfield values. The order of the subfield values in the list - will be the order that they appear in the field. - - print field.getSubfields( 'a' ) - - print field.getSubfields( 'a', 'b', 'z' ) - """ - values = [] - for subfield in self: - if subfield[0] in codes: - values.append( subfield[1] ) - return values - - def addSubfield( self, code, value ): - """ - Adds a subfield code/value pair to the field. - - field.addSubfield('u', 'http://www.loc.gov') - """ - self.subfields.append(code) - self.subfields.append(value) - - def isControlField( self ): - """ - returns true or false if the field is considered a control field. - Control fields lack indicators and subfields. - """ - if self.tag < '010': - return True - return False - - def asMARC21( self ): - """ - used during conversion of a field to raw marc - """ - if self.isControlField(): - return self.data + END_OF_FIELD - marc = str(self.indicator1) + str(self.indicator2) - for subfield in self: - marc += SUBFIELD_INDICATOR + subfield[0] + subfield[1] - return marc + END_OF_FIELD - diff --git a/tags/rel-0.85/pymarc/reader.py b/tags/rel-0.85/pymarc/reader.py deleted file mode 100644 index 8258868..0000000 --- a/tags/rel-0.85/pymarc/reader.py +++ /dev/null @@ -1,56 +0,0 @@ -from pymarc import Record, Field -from constants import END_OF_RECORD -from exceptions import * -from types import * -from cStringIO import StringIO - -class Reader( object ): - """ - A base class for all iterating readers in the pymarc package. - """ - def __iter__( self ): - return self - -class MARCReader( Reader ): - """ - An iterator class for reading a file of MARC21 records. - - Simple usage: - - from pymarc import MARCReader - - ## pass in a file object - reader = MARCReader(file('file.dat')) - for record in reader: - ... - - ## pass in marc in transmission format - reader = MARCReader(rawmarc) - for record in reader: - ... - - """ - - def __init__(self, f): - """ - The constructor which you can pass either raw marc or a file object. - """ - if (type(f) == FileType): self.fh = f - else: self.fh = StringIO(f) - - def next( self ): - """ - To support iteration. - """ - first5 = self.fh.read( 5 ) - if not first5: - raise StopIteration - if len( first5 ) < 5: - raise RecordLengthInvalid - - length = int( first5 ) - chunk = self.fh.read( length - 5 ) - chunk = first5 + chunk - r = Record( chunk ) - return r - diff --git a/tags/rel-0.85/pymarc/record.py b/tags/rel-0.85/pymarc/record.py deleted file mode 100644 index 12c070c..0000000 --- a/tags/rel-0.85/pymarc/record.py +++ /dev/null @@ -1,258 +0,0 @@ -from exceptions import * -from constants import * -from field import * -from types import * -import string -import re - - -class Record( object ): - """ - Record - - A class for representing a MARC record. Each Record object is made up of - multiple Field objects. You'll probably want to look at the docs for Field - to see how to fully use a Record object. - - Basic usage: - - field = Field( \ - tag = '245', - indicators = ['0','1'], - subfields = [ \ - 'a', 'The pragmatic programmer : ', - 'b', 'from journeyman to master /', - 'c', 'Andrew Hunt, David Thomas.' ] - - record.addField( field ) - - Or creating a record from a chunk of MARC in transmission format: - - record = Record( data=chunk ) - - Or getting a record as serialized MARC21. - - raw = record.asMARC21() - - You'll normally want to use a MARCReader object to iterate through - MARC records in a file. - """ - - def __init__( self, data='' ): - self.leader = (' '*10) + '22' + (' '*8) + '4500' - self.fields = list() - self.pos = 0 - if len(data) > 0: - ok = self.decodeMARC( data ) - - def __str__( self ): - """ - In a string context a Record object will return a prettified version - of the record resembling something like this: - """ - # join is significantly faster than concatenation - text = "LDR %s\n" % self.leader - text += string.join( map( str, self.fields ), "\n" ) - return text - - def __getitem__( self, tag ): - """ - Allows a shorthand lookup by tag: - - record["245"] - - """ - fields = self.getFields( tag ) - if len(fields) > 0: return fields[0] - return None - - def __iter__( self ): - self.__pos = 0 - return self - - def next(self): - if self.__pos >= len( self.fields ): - raise StopIteration - self.__pos += 1 - return self.fields[ self.__pos-1 ] - - def addField( self, *fields ): - """ - addField() will add pymarc.Field objects to a Record object. - Optionally you can pass in multiple fields. - """ - for field in fields: - self.fields.append( field ) - - def getFields( self, *args ): - """ - When passed a tag ( '245' ) getFields() will return a list of all the - fields in a record with a given tag. - - title = record.getFields( '245' ) - - If no fields with the specified - tag are found then an empty list is returned. If you are interested - in more than one tag you can pass in a list: - - subjects = record.getFields( '600', '610', '650' ) - - If no tag is passed in to fields() a list of all the fields will be - returned. - """ - if (len(args) == 0): - return self.fields - - found = list() - for field in self.fields: - if field.tag in args: - found.append( field ) - return found - - def decodeMARC( self, marc ): - """ - decodeMARC() accepts a MARC record in transmission format as a - a string argument, and will populate the object based on the data - found. The Record constructor actually uses decodeMARC() behind - the scenes when you pass in a chunk of MARC data to it. - - """ - - # extract record leader - self.leader = marc[ 0 : LEADER_LEN ] - if len( self.leader ) != LEADER_LEN: raise RecordLeaderInvalid - - # extract the byte offset where the record data starts - baseAddress = int( marc[ 12 : 17 ] ) - if baseAddress <= 0: raise BaseAddressNotFound - if baseAddress >= len( marc ): raise BaseAddressInvalid - - # extract directory, baseAddress-1 is used since the - # director ends with an END_OF_FIELD byte - directory = marc[ LEADER_LEN : baseAddress-1 ] - - # determine the number of fields in record - if len(directory) % DIRECTORY_ENTRY_LEN <> 0: - raise RecordDirectoryInvalid - numFields = len( directory ) / DIRECTORY_ENTRY_LEN - - # add fields to our record using directory offsets - fieldNum = 0 - while ( fieldNum < numFields ): - entryStart = fieldNum * DIRECTORY_ENTRY_LEN - entryEnd = entryStart + DIRECTORY_ENTRY_LEN - entry = directory[ entryStart : entryEnd ] - entryTag = entry[ 0 : 3 ] - entryLength = int( entry[ 3 : 7 ] ) - entryOffset = int( entry[ 7 : 12 ] ) - entryData = marc[ baseAddress + entryOffset : - baseAddress + entryOffset + entryLength - 1 ] - - if entryTag < '010': - field = Field( tag=entryTag, data=entryData ) - else: - subfields = list() - subs = entryData.split( SUBFIELD_INDICATOR ) - i1 = subs[0][0] - i2 = subs[0][1] - for subfield in subs[1:]: - if len(subfield) == 0: continue - code = subfield[0] - data = subfield[1:] - subfields.append( code ) - subfields.append( data ) - field = Field( - tag = entryTag, - indicators = [ i1, i2 ], - subfields = subfields ) - - self.addField( field ) - fieldNum += 1 - - if fieldNum == 0: raise NoFieldsFound - - def asMARC21( self ): - """ - returns the record serialized as MARC21 - """ - fields = '' - directory = '' - offset = 0 - - # build the directory - # each element of the directory includes the tag, the byte length of - # the field and the offset from the base address where the field data - # can be found - for field in self.fields: - fieldData = field.asMARC21() - fields += fieldData - directory += "%03d%04d%05d" % (int(field.tag),len(fieldData),offset) - offset += len( fieldData ) - - # directory ends with an end of field - directory += END_OF_FIELD - - # field data ends with an end of record - fields += END_OF_RECORD - - # the base address where the directory ends and the field data begins - baseAddress = LEADER_LEN + len(directory) - - # figure out the length of the record - recordLength = baseAddress + len(fields) - - # update the leader with the current record length and base address - # the lengths are fixed width and zero padded - self.leader = "%05d%s%05d%s" % \ - ( recordLength, self.leader[5:12], baseAddress, self.leader[17:] ) - - # return the encoded record - return self.leader + directory + fields - - def title( self ): - """ - Returns the title of the record (245 $a an $b). - """ - title = None - try: - title = self['245']['a'] - title += self['245']['b'] - except TypeError, e: - pass - return title - - def isbn( self ): - """ - Returns an ISBN if appropriate. If not present None will - be returned. - """ - isbn = None - try: - # if anyone ever cares alot about performance - # this compilation could be moved out and compiled once - isbnPattern = re.compile( '^([0-9A-Za-z]+)' ) - isbn = isbnPattern.match( self["020"]["a"] ).group(1) - except Exception, e: - pass - return isbn - - def author( self ): - # todo - pass - - def publisher( self ): - # todo - pass - - def pubyear( self ): - # todo - pass - - def subjects( self ): - # todo - pass - - def notes( self ): - # todo - pass - diff --git a/tags/rel-0.85/pymarc/writer.py b/tags/rel-0.85/pymarc/writer.py deleted file mode 100644 index 23c32ff..0000000 --- a/tags/rel-0.85/pymarc/writer.py +++ /dev/null @@ -1,49 +0,0 @@ -from pymarc import Record, Field, WriteNeedsRecord, NoActiveFile -from types import * -from cStringIO import StringIO - -class Writer( object ): - - def write( self ): - pass - -class MARCWriter( Writer ): - """ - A class for writing MARC21 records in transmission format. - - Simple usage: - - from pymarc import MARCWriter - - ## pass in a file - writer = MARCWriter(file('file.dat','w')) - writer.write(record) - - ## use StringIO if you want to write to a string - string = StringIO() - writer = MARCWriter(string) - writer.write(record) - print string - """ - - def __init__(self, f): - """ - You need to pass in a file like object. - """ - self.fh = f - - def write(self, record): - """ - Writes a record. - """ - if type(record) != Record: - raise WriteNeedsRecord - self.fh.write(record.asMARC21()) - - def close( self ): - """ - Closes the file. - """ - self.fh.close() - self.fh = None - diff --git a/tags/rel-0.85/setup.py b/tags/rel-0.85/setup.py deleted file mode 100644 index 1af4f85..0000000 --- a/tags/rel-0.85/setup.py +++ /dev/null @@ -1,35 +0,0 @@ -import sys -from distutils.core import setup - -classifiers = """\ -Intended Audience :: Education -Intended Audience :: Developers -Intended Audience :: Information Technology -License :: OSI Approved :: BSD License -Programming Language :: Python -Topic :: Text Processing :: General -""" - -# workaround for older pythons that don't -# understand classifiers - -if sys.version_info < (2, 3): - _setup = setup - def setup(**kwargs): - if kwargs.has_key("classifiers"): - del kwargs["classifiers"] - _setup(**kwargs) - -setup( - name = 'pymarc', - version = '0.85', - url = 'http://www.textualize.com/pymarc', - download_url = 'http://www.textualize.com/archive/pymarc/latest.tar.gz', - author = 'Ed Summers', - author_email = 'ehs@pobox.com', - license = 'http://www.opensource.org/licenses/bsd-license.php', - packages = [ 'pymarc' ], - description = "read, write and modify MARC bibliographic data", - classifiers = filter( None, classifiers.split("\n") ), -) - diff --git a/tags/rel-0.85/test.py b/tags/rel-0.85/test.py deleted file mode 100644 index 8ea1517..0000000 --- a/tags/rel-0.85/test.py +++ /dev/null @@ -1,19 +0,0 @@ -import unittest -import test.record -import test.field -import test.reader -import test.encode -import test.writer - -def suite(): - suite = unittest.TestSuite() - suite.addTest( test.record.suite() ) - suite.addTest( test.field.suite() ) - suite.addTest( test.reader.suite() ) - suite.addTest( test.encode.suite() ) - suite.addTest( test.writer.suite() ) - return suite - -runner = unittest.TextTestRunner() -runner.run( suite() ) - diff --git a/tags/rel-0.85/test/__init__.py b/tags/rel-0.85/test/__init__.py deleted file mode 100644 index c297d12..0000000 --- a/tags/rel-0.85/test/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -import record -import field -import reader diff --git a/tags/rel-0.85/test/encode.py b/tags/rel-0.85/test/encode.py deleted file mode 100644 index 17454e1..0000000 --- a/tags/rel-0.85/test/encode.py +++ /dev/null @@ -1,25 +0,0 @@ -import util -from pymarc import MARCReader, Record, Field -import unittest -import os - -class Encode( unittest.TestCase ): - - def testEncodeDecode( self ): - # get raw data from file - original = file( 'test/one.dat' ).read() - # create a record object for the file - reader = MARCReader(file('test/one.dat')) - record = reader.next() - # make sure original data is the same as - # the record encoded as MARC - raw = record.asMARC21() - self.assertEqual( original, raw ) - -def suite(): - suite = unittest.makeSuite( Encode, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - diff --git a/tags/rel-0.85/test/field.py b/tags/rel-0.85/test/field.py deleted file mode 100644 index e7366a0..0000000 --- a/tags/rel-0.85/test/field.py +++ /dev/null @@ -1,73 +0,0 @@ -import util -import unittest -from pymarc.record import Record, Field - -class FieldTest( unittest.TestCase ): - - def setUp( self ): - self.field = Field( - tag = '245', - indicators = [ 0, 1 ], - subfields = [ - 'a', 'Huckleberry Finn: ', - 'b', 'An American Odyssey' - ] - ) - - def testString( self ): - self.assertEquals( str(self.field), - '245 01 $aHuckleberry Finn: $bAn American Odyssey') - - def testIndicators( self ): - assert self.field.indicator1 is 0 - self.assertEqual( self.field.indicator2, 1 ) - - def testSubfieldsCreated( self ): - subfields = self.field.subfields - self.assertEqual( len( subfields ), 4 ) - - def testSubfieldShort( self ): - self.assertEqual( self.field['a'], 'Huckleberry Finn: ' ) - self.assertEqual( self.field['z'], None ) - - def testSubfields( self ): - self.assertEqual( self.field.getSubfields( 'a' ), - ['Huckleberry Finn: '] ) - - def testSubfieldsMulti( self ): - self.assertEqual( self.field.getSubfields( 'a','b' ), - ['Huckleberry Finn: ', 'An American Odyssey' ] ) - - def testEncode( self ): - self.field.asMARC21() - - def testIterator( self ): - string = "" - for subfield in self.field: - string += subfield[0] - string += subfield[1] - self.assertEquals( string, "aHuckleberry Finn: bAn American Odyssey" ) - - def testValue( self ): - self.assertEquals( self.field.value(), - 'Huckleberry Finn: An American Odyssey' ) - controlField = Field( tag='001', data='foobar' ) - self.assertEquals( controlField.value(), "foobar" ) - - def testNonIntegerTag( self ): - # make sure this doesn't throw an exception - f = Field( tag="3 0", indicators=[0,1], subfields=['a', 'foo'] ) - - def testAddSubfield( self ): - f = Field( tag="245", indicators=[0,1], subfields=['a', 'foo'] ) - f.addSubfield('a','bar') - self.assertEquals( f.__str__(), '245 01 $afoo$abar') - -def suite(): - suite = unittest.makeSuite( FieldTest, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - - diff --git a/tags/rel-0.85/test/marc.dat b/tags/rel-0.85/test/marc.dat deleted file mode 100644 index 9c52c7d..0000000 --- a/tags/rel-0.85/test/marc.dat +++ /dev/null @@ -1 +0,0 @@ -01060cam 22002894a 45000010009000000050017000090080041000260350021000679060045000889250044001339550160001779550053003370100017003900200015004070400018004220420008004400500023004480820014004711000025004852450088005102600044005983000027006425040041006696500026007107000026007369850008007621177850420040816084925.0990802s2000 mau b 001 0 eng  a(DLC) 99043581 a0bvipcorignewd1eocipf19gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc05 to ja00 08-02-99; jf05 to subj. 08/02/99; jf11 to sl 08-03-99; jf25 08-05-99 to ddc; bk rec'd, to CIP ver. ps07 01-07-00; CIP ver jf05 to sl 04/05/00 aADDED COPIES: another copy to ASCD ps15 01-12-00 a 99043581  a020161622X aDLCcDLCdDLC apcc00aQA76.6b.H857 200000a005.12211 aHunt, Andrew,d1964-14aThe pragmatic programmer :bfrom journeyman to master /cAndrew Hunt, David Thomas. aReading, Mass :bAddison-Wesley,c2000. axxiv, 321 p. ;c24 cm. aIncludes bibliographical references. 0aComputer programming.1 aThomas, David,d1956- eGAP00979cam 2200241 a 45000010009000000050017000090080041000269060045000679250042001129550206001540100017003600200015003770400018003920500026004100820017004361000016004532450037004692500012005062600051005183000078005695040051006476500039006981251588220020923085341.0010827s2001 cc a b 001 0 eng  a7bcbccorigcopd2encipf20gy-gencatlg0 aacquireb2 shelf copyxpolicy default apb07 2001-08-27 to ASCDajf00 2001-08-31ajf00 2001-09-05;cjf03 2001-10-16 to Subj.djf01 2001-10-25 to slejf12 2001-11-23; jf12 to Dewey 11-23-01aaa20 2001-12-07; copy 2 added jf16 to BCCD 09-23-02 a 2001276084 a0596000855 aDLCcDLCdDLC00aQA76.73.P98bL88 200100a005.13/32211 aLutz, Mark.10aProgramming Python /cMark Lutz. a2nd ed. aBeijing :aSebastopol, CA :bO'Reilly,cc2001. axxxvii, 1255 p. :bill. ;c24 cm. +e1 computer optical disc (4 3/4 in.). aIncludes bibliographical references and index. 0aPython (Computer program language)00887cam 2200253 a 45000010009000000050017000090080041000269060045000679250044001129550151001560100017003070200015003240400018003390500027003570820017003841000016004012450051004172500012004682600040004803000035005205040020005556500039005757000019006141361051220040714135238.0040601s2004 caua 001 0 eng  a7bcbccorigcopd2encipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apv17 2004-06-01 Preprocessor to ASCDajf00 2004-06-03;cjf03 2004-06-24 to Subj.djf09 2004-06-28 to slejf12 2004-07-01 to Deweyaaa25 2004-07-14 a 2004273129 a0596002815 aDLCcDLCdDLC00aQA76.73.P98bL877 200400a005.13/32221 aLutz, Mark.10aLearning Python /cMark Lutz and David Ascher. a2nd ed. aSebastopol, CA :bO'Reilly,cc2004. axxvi, 591 p. :bill. ;c24 cm. aIncludes index. 0aPython (Computer program language)1 aAscher, David.01038cam 2200289 a 45000010009000000050017000090080041000269060045000679250042001129550167001540100017003210150015003380200015003530350023003680400023003910420014004140500026004280820017004542450065004712600039005363000027005755000048006025000020006506500039006707000020007097000019007291306994220030606071827.0030127s2002 cau 001 0 eng  a7bcbcccopycatd2encipf20gy-gencatlg0 aacquireb2 shelf copyxpolicy default aps04 2003-01-27 to ASCDajf00 2003-01-30cjf05 2003-01-30 to subj.djf09 2003-01-30 to slejf12 2003-02-03 to Deweyaaa20 2003-03-10ajg07 2003-06-06 copy 2 added a 2003268354 aGBA2-Y6761 a0596001673 a(OCoLC)ocm49044543 aUKMcUKMdCUSdDLC alccopycat00aQA76.73.P98bP95 200200a005.13/322100aPython cookbook /cedited by Alex Martelli and David Ascher. aSebastopol, CA :bO'Reilly,c2002. axxix, 574 p. ;c24 cm. a"Recipes from the Python community"--Cover. aIncludes index. 0aPython (Computer program language)1 aMartelli, Alex.1 aAscher, David.00759nam 22002295a 45000010009000000050017000090080041000260350022000679060045000899250044001349550020001780100017001980200015002150400013002300420008002431000021002512450068002722600084003402630009004243000012004339630084004451312796220030318153335.0030318s2003 inu 000 0 eng  a(DLC) 2003104024 a0bibccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2003-03-18 a 2003104024 a1592000738 aDLCcDLC apcc1 aDawson, Michael.10aPython programming for the absolute beginner /cMichael Dawson. aIndianapolis, IN :bPremier Press Inc., a division of Course Technology,c2003. a0306 ap.ccm. aMargaret Bauer ; phone (812) 273-0561 ; fax null email margaret_bauer@yahoo.com01304cam 22002894a 45000010009000000050017000090080041000269060045000679250044001129550280001560100017004360200015004530400018004680420008004860500024004940820017005181000049005352450150005842460030007342600053007643000036008175040064008536500026009176500023009437000021009667000027009871256551420020718085037.0011016s2002 njua b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2001-10-16 to ASCD;cjf03 2001-10-17 to Subj.djf01 2001-10-25 to slejf25 2001-10-25 to Deweyaaa20 2001-10-26aps16 2002-01-11 bk rec'd, to CIP ver.ajf00 2002-01-16fjf04 2002-01-18 to S.L.gjf12 2002-01-18 to bccdajf00 2002-03-26; copy 2 added jf16 to BCCD 07-18-02 a 2001055410 a0130410659 aDLCcDLCdDLC apcc00aQA76.625b.T48 200200a005.2/762211 aThiruvathukal, George K.q(George Kuriakose)10aWeb programming :btechniques for integrating Python, Linux, Apache, and MySQL /cGeorge K. Thiruvathukal, John P. Shafaee, Thomas W. Christoper.14aWeb programming in Python aUpper Saddle River, NJ :bPrentice Hall,cc2002. axviii, 745 p. :bill. ;c24 cm. aIncludes bibliographical references (p. 723-725) and index. 0aInternet programming. 0aWeb sitesxDesign.1 aShafaee, John P.1 aChristopher, Thomas W.01023cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550168001560100017003240200035003410400018003760420008003940500026004020820016004281000029004442450067004732500012005402600051005523000035006035000020006386500039006586300021006977000027007181187737320010105091546.0991228s2000 cc a 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc01 12-28-99; jf03 01-04-00 ; jf11 to sl 1-4-00; jf12 to Dewey 01-06-00; aa05 01-10-00; CIP ver. pv08 to BCCD 05-01-00; copy 2 added jf16 to BCCD 01-05-01 a 99085714  a1565926218 (pbk. : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P98bH36 200000a005.2652211 aHammond, Markq(Mark J.)10aPython programming on Win32 /cMark Hammond and Andy Robinson. a1st ed. aBeijing ;aSebastopol, CA :bO'Reilly,cc2000. axvii, 652 p. :bill. ;c24 cm. aIncludes index. 0aPython (Computer program language)00aMicrosoft Win32.1 aRobinson, Andy,d1967-00867cam 22002538a 45000010009000000050017000090080041000269060045000679250044001129550127001560100017002830200015003000400013003150420008003280500026003360820017003621000019003792450080003982600047004782630009005253000011005346500039005459630029005841343237720031222144424.0031211s2003 oru 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc27 2003-12-11 RUSH to ASCDcjf07 2003-12-17 to subjectdjf09 2003-12-17 to slejp05 2003-12-18 to Deweyaaa20 2003-12-22 a 2003064366 a1887902996 aDLCcDLC apcc00aQA76.73.P98bZ45 200300a005.13/32221 aZelle, John M.10aPython programming :ban introduction to computer science /cJohn M. Zelle. aWilsonville, OR :bFranklin, Beedlec2003. a0312 ap. cm. 0aPython (Computer program language) aTom Sumner, 503-682-766801008cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550171001560100017003270200015003440400018003590420008003770500026003850820018004111000026004292450065004552600046005203000034005665000020006006500039006206500026006596500023006857000022007081222727720030509151148.0001109s2002 inua 001 0 eng  a7bcbccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 11-09-00apv11 2002-04-12 2 copies to ASCDajf00 2002-04-18;cjf03 2002-08-20 to Subj.djf09 2002-08-21 to slejf25 2002-09-10 2 copies to Deweyaaa05 2002-10-04 a 00110884  a0735710902 aDLCcDLCdDLC apcc00aQA76.73.P98bH65 200200a005.2/7622211 aHolden, Steve,d1950-10aPython Web programming /cSteve Holden [with David Beazley]. aIndianapolis, Ind. :bNew Riders,cc2002. axxi, 691 p. :bill. ;c23 cm. aIncludes index. 0aPython (Computer program language) 0aInternet programming. 0aWeb sitesxDesign.1 aBeazley, David M.01049cam 22002534a 45000010009000000050017000090080041000269060045000679250044001129550148001560100017003040200015003210400018003360420008003540500026003620820017003881000018004052450047004232600052004703000066005225040051005885380117006396500039007561216916820010522141328.0000911s2000 nju b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc16 09-11-00; jf02 09-12-00 ; jf11 to sl 9-12-00; jf12 to Dewey 09-14-00; aa05 09-14-00; CIP Ver. jf02 05-11-01; jf12 to BCCD 05-22-01 a 00047856  a0130260363 aDLCcDLCdDLC apcc00aQA76.73.P98bC48 200100a005.13/32211 aChun, Wesley.10aCore python programming /cWesley J. Chun. aUpper Saddle River, NJ :bPrentice Hall,c2001. axxix, 771 p. ;c24 cm. +e1 computer optical disc (4 3/4 in.) aIncludes bibliographical references and index. aSystem requirements for accompanying computer disc: Windows 9x/Me/NT/2000; a Web brouser; Macintosh; UNIX/Linux. 0aPython (Computer program language)00948cam 22002654a 45000010009000000050017000090080041000269060045000679250044001129550133001560100017002890200015003060400018003210420008003390500026003470820017003731000021003902450055004112600038004663000036005045040051005406500039005916500036006306300016006661213218820010817152505.0000804s2000 ctua b 001 0 eng  a7bcbccorignewd2encipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pb05 08-04-00;jfoo 08-08-00;cjf03 2001-07-18 to Subj.djf02 2001-07-19 to slejf25 2001-07-31 to Deweyaaa20 2001-08-17 a 00697831  a1884777813 aDLCcDLCdDLC apcc00aQA76.73.P98bG73 200000a005.13/32211 aGrayson, John E.10aPython and Tkinter programming /cJohn E. Grayson. aGreenwich, CT :bManning,cc2000. axxiii, 658 p. :bill. ;c24 cm. aIncludes bibliographical references and index. 0aPython (Computer program language) 0aTcl (Computer program language)00aTk toolkit.00767nam 22002295a 45000010009000000050017000090080041000260350022000679060045000899250044001349550020001780100017001980200015002150400013002300420008002432450081002512600079003322630009004113000012004204400021004329630084004531337832520031020153106.0031020s2003 inu 000 0 eng  a(DLC) 2003114351 a0bibccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc10 2003-10-20 a 2003114351 a1592000770 aDLCcDLC apcc00aGame programming with Python, Lua, and Ruby /c[edited by] Estelle Manticas. aIndianapolis, IN :bPremier Press, a Division of Course Technology,c2003. a0311 ap.ccm. aGame development aMargaret Bauer ; phone (812) 273-0561 ; fax null email margaret_bauer@yahoo.com01121cam 22002414a 45000010009000000050017000090080041000269060045000679250044001129550362001560100017005180200015005350400018005500420008005680500026005760820017006021000027006192450058006462600052007043000033007565040051007896500039008401256552920030227150222.0011016s2002 njua b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2001-10-16 to ASCD;cjf05 2001-10-17 to subj.djf04 2001-10-17 to S.L.ejf25 2001-10-25 to Deweyaaa20 2001-10-26aps11 2002-01-15 bk rec'd, to CIP ver.fjp07 2002-02-13ajp00 2002-03-08gjp85 2002-03-08 to BCCD; copy 2 added jf16 to BCCD 07-18-02ajf00 2003-01-29ajf07 2003-02-27 somehow copy 1 got back into the CIP ver. stream (handed to acting TL) a 2001055411 a0130409561 aDLCcDLCdDLC apcc00aQA76.73.P98bC47 200200a005.13/32211 aChristopher, Thomas W.10aPython programming patterns /cThomas W. Christopher. aUpper Saddle River, NJ :bPrentice Hall,c2002. axix 538 p. :bill. ;c24 cm. aIncludes bibliographical references and index. 0aPython (Computer program language)01062cam 22002778a 45000010009000000050017000090080041000269060045000679250044001129550120001560100017002760200028002930400013003210420008003340500026003420820018003681000024003862450134004102600041005442630009005853000011005946500039006056500037006446500039006819630064007201275256420020426115101.0020424s2002 mau 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc21 2002-04-24 to ASCDcjf05 2002-04-25 to subj.djf09 2002-04-25 to slejf25 2002-04-26 to Deweyaaa20 2002-04-26 a 2002066565 a0201616165 (alk. paper) aDLCcDLC apcc00aQA76.73.P98bH54 200200a005.2/7622211 aHightower, Richard.10aPython programming with the Java class libraries :ba tutorial for building Web and Enterprise applications /cRichard Hightower. aBoston, MA :bAddison-Wesley,c2002. a0207 ap. cm. 0aPython (Computer program language) 0aJava (Computer program language) 0aApplication softwarexDevelopment. aMarilyn Rash, 617-848-6509; email: timothy.nicholls@awl.com01012cam 22002294a 45000010009000000050017000090080041000269060045000679250044001129550192001560100017003480200028003650400018003930420008004110500026004190820017004451000017004622450151004792600042006303000071006726500039007431216723920010608101527.0000908s2001 mau b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc21 09-08-00;jf05 (desc) 09/08/00 ; jf11 to sl 9-11-00; jf12 to Dewey 09-12-00;aa03 9-12-00;CIP ver jf05 to sl 01/11/01; jf12 to BCCD 02-01-01; copy 2 added jf16 to BCCD 04-24-01 a 00046921  a0201709384 (alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P48bG38 200100a005.13/32211 aGauld, Alan.10aLearn to program using Python :ba tutorial for hobbyists, self-starters, and all who want to learn the art of computer programming /cAlan Gauld. aReading, MA :bAddison-Wesley,c2001. axii, 270 p. ;c24 cm.e+ 1 computer laser optical disc (4 3/4 in.) 0aPython (Computer program language)00935cam 22002534a 450000100070000000500170000700800410002403500210006590600450008692500440013195501480017501000170032302000220034004000180036204200080038005000260038808200170041410000160043124500610044726000390050830000750054765000390062270000200066120525620000830103214.0990629s2000 caua 001 0 eng  9(DLC) 99065006 a7bcbccorignewd2eopcnf19gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apn08/e-pcn 06-29-99; to ASCD pb02 06-10-00; jf00 06-13-00; jf03 08-17-00 ; jf11 to sl 8-22-00; jf25 2 copies to Dewey 08-24-00; aa19 08-30-2000 a 99065006  a0761523340 (pbk.) aDLCcDLCdDLC apcc00aQA76.73.P98bA48 199900a005.13/32211 aAltom, Tim.10aProgramming with Python /cTim Altom with Mitch Chapman. aRocklin, CA :bPrima Tech,cc1999. axxxiv, 372 p. :bill. ;c24 cm. +e1 computer optical disc (4 3/4 in.) 0aPython (Computer program language)1 aChapman, Mitch.01214cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550202001560100017003580200047003750400018004220420008004400500024004480820017004721000019004892450079005082600051005873000058006386500026006966500048007226500040007706500049008108560077008591328439520040226131230.0030722s2004 maua 001 0 eng  a7bcbccorignewd1eecipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ajf05 2003-07-22cjf05 2003-07-22 to subj.djf09 2003-07-22 to slejf12 2003-07-23 to Deweyaaa20 2003-07-29ajf00 2004-01-29fjf07 2004-02-02ejf12 2004-02-03 to BCCDajf16 2004-02-26 copy2 to BCCD a 2003016400 a1584502681 (Pbk. with CD-ROM : alk. paper) aDLCcDLCdDLC apcc00aQA76.625b.J66 200400a005.2/762221 aJones, M. Tim.10aBSD Sockets programming from a multi-language perspective /cM. Tim Jones. aHingham, Mass. :bCharles River Media,cc2004. axix, 444 p. :bill. ;c24 cm. +e1 CD-ROM (4 3/4 in.) 0aInternet programming. 0aComputer networksxDesign and construction. 0aInternetworking (Telecommunication) 0aProgramming languages (Electronic computers)413Table of contentsuhttp://www.loc.gov/catdir/toc/ecip047/2003016400.html01113cam 2200277 a 4500001000800000005001700008008004100025035002100066906004500087955011600132010001700248020003300265040001800298050002300316082001600339245009800355260004600453300003300499440004900532504006400581650005100645650003600696650002300732700001800755991006200773159816719981112152315.2940902s1995 maua b 001 0 eng  9(DLC) 94034264 a7bcbccorignewd1eocipf19gy-gencatlg apc18 to ja00 09-02-94; jf06 to subj 09-06-94; jf11 to sl 09-06-94; jf12 09-06-94 to ddc; CIP ver. jc03 11-23-94 a 94034264  a0201633612 (acid-free paper) aDLCcDLCdDLC00aQA76.64b.D47 199500a005.1/222000aDesign patterns :belements of reusable object-oriented software /cErich Gamma ... [et al.]. aReading, Mass. :bAddison-Wesley,cc1995. axv, 395 p. :bill. ;c25 cm. 0aAddison-Wesley professional computing series aIncludes bibliographical references (p. 375-381) and index. 0aObject-oriented programming (Computer science) 0aComputer softwarexReusability. 0aSoftware patterns.1 aGamma, Erich. bc-GenCollhQA76.64i.D47 1995p00011185514tCopy 1wBOOKS01233cam 2200289 a 45000010009000000050017000090080041000269060045000679250044001129550226001560100017003820200034003990400013004330500024004460820014004702450065004842460015005492500012005642600043005763000021006195000111006405040068007516500026008196500025008457000022008707000051008921237004420020812080859.0010405s2001 mau b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc20 to ja00 04-05-01; jp07 04-11-01 sent to sl;jp85 to Dewey 04-19-01; aa20 04-20-01aps13 2001-08-16 bk rec'd, to CIP ver.fjf07 2001-08-20ajf00 2001-08-20gjf12 2001-08-23 to bccdajf01 2001-09-13 copy 2 added to BCCD a 2001031277 a0262032937 (hc. : alk. paper) aDLCcDLC00aQA76.6b.I5858 200100a005.122100aIntroduction to algorithms /cThomas H. Cormen ... [et al.].30aAlgorithms a2nd ed. aCambridge, Mass. :bMIT Press,cc2001. axxi, 1180 p. cm. aRev. ed. of: Introduction to algorithms / Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest. c1990. aIncludes bibliographical references (p. [1127]-1130) and index. 0aComputer programming. 0aComputer algorithms.1 aCormen, Thomas H.1 aCormen, Thomas H.tIntroduction to algorithms.01009pam 2200265 a 4500001000800000005001700008008004100025035002100066906004500087955011600132010001700248020002200265040001800287050002600305082001700331100001800348245003700366260005300403300003500456440005200491500002700543504006400570650004400634991006500678303540919960425075058.2951006s1996 njua b 001 0 eng  9(DLC) 95045017 a7bcbccorignewd1eocipf19gy-gencatlg apc17 RUSH to ja00 10-06-95;jf05 to subj. 10/06/95; jf04 to S.L. 10-06-95; jf14 10-10-95; CIP ver. jk14 04-22-96 a 95045017  a0133708756 (pbk.) aDLCcDLCdDLC00aQA76.73.C28bG69 199600a005.13/32201 aGraham, Paul.10aANSI Common Lisp /cPaul Graham. aEnglewood Cliffs, N.J. :bPrentice Hall,cc1996. axiii, 432 p. :bill. ;c23 cm. 0aPrentice Hall series in artificial intelligence a"An Alan R. Apt book." aIncludes bibliographical references (p. 401-414) and index. 0aCOMMON LISP (Computer program language) bc-GenCollhQA76.73.C28iG69 1996p00034751468tCopy 1wBOOKS \ No newline at end of file diff --git a/tags/rel-0.85/test/one.dat b/tags/rel-0.85/test/one.dat deleted file mode 100644 index a43cf54..0000000 --- a/tags/rel-0.85/test/one.dat +++ /dev/null @@ -1 +0,0 @@ -00755cam 22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500fol05731351 IMchF20000613133448.0000107s2000 nyua 001 0 eng  a 00020737  a0471383147 (paper/cd-rom : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P22bM33 200000a005.13/32211 aMartinsson, Tobias,d1976-10aActivePerl with ASP and ADO /cTobias Martinsson. aNew York :bJohn Wiley & Sons,c2000. axxi, 289 p. :bill. ;c23 cm. +e1 computer laser disc (4 3/4 in.) a"Wiley Computer Publishing." 0aPerl (Computer program language)00aActive server pages.00aActiveX. \ No newline at end of file diff --git a/tags/rel-0.85/test/reader.py b/tags/rel-0.85/test/reader.py deleted file mode 100644 index 6cba456..0000000 --- a/tags/rel-0.85/test/reader.py +++ /dev/null @@ -1,45 +0,0 @@ -import util -import unittest -import pymarc -import re - -class MARCReaderFileTest( unittest.TestCase ): - """ - Tests for the pymarc.MARCReader class which provides iterator - based access to a MARC file. - """ - - def setUp( self ): - self.reader = pymarc.MARCReader(file('test/test.dat')) - - def testIterator( self ): - count = 0 - for record in self.reader: - count += 1 - self.assertEquals(count, 10, 'found expected amt of MARC21 records') - - def testString( self ): - ## basic test of stringification - startsWithLeader = re.compile( "^LDR" ) - hasNumericTag = re.compile( "\n\d\d\d " ) - for record in self.reader: - text = str(record) - self.failUnless( startsWithLeader.search(text), 'got leader') - self.failUnless(hasNumericTag.search(text), 'got a tag') - -class MARCReaderStringTest(MARCReaderFileTest): - - def setUp(self): - raw = file('test/test.dat').read() - self.reader = pymarc.reader.MARCReader(raw) - - # inherit same tests from MARCReaderTestFile - -def suite(): - fileSuite = unittest.makeSuite(MARCReaderFileTest, 'test') - stringSuite = unittest.makeSuite(MARCReaderStringTest, 'test') - suite = unittest.TestSuite((fileSuite, stringSuite)) - return suite - -if __name__ == "__main__": - unittest.main() diff --git a/tags/rel-0.85/test/record.py b/tags/rel-0.85/test/record.py deleted file mode 100644 index 7dd23df..0000000 --- a/tags/rel-0.85/test/record.py +++ /dev/null @@ -1,101 +0,0 @@ -import util -import unittest - -from pymarc import Record, Field -from pymarc.exceptions import * - -class RecordTest( unittest.TestCase ): - - def testAddField( self ): - record = Record() - field = Field( - tag = '245', - indicators = [ '1', '0' ], - data = [ 'a', 'Python', 'c', 'Guido' ] ) - record.addField( field ) - self.failUnless( field in record.fields, msg='found field' ) - - def testQuickAccess( self ): - record = Record() - title = Field( - tag = '245', - indicators = [ '1', '0' ], - data = [ 'a', 'Python', 'c', 'Guido' ] ) - record.addField( title ) - self.assertEqual( record['245'], title, 'short access' ) - self.assertEqual( record['999'], None, 'short access with no field' ) - - def testFieldNotFound( self ): - record = Record() - self.assertEquals( len( record.fields ), 0 ) - - def testFind( self ): - record = Record() - subject1 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Programming Language' ] ) - record.addField( subject1 ) - subject2 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Object Oriented' ] ) - record.addField( subject2 ) - found = record.getFields( '650' ) - self.assertEqual( found[0], subject1, 'getFields() item 1' ) - self.assertEqual( found[0], subject1, 'getFields() item 2' ) - found = record.getFields() - self.assertEqual(len(found), 2, 'getFields() with no tag') - - def testMultiFind( self ): - record = Record() - subject1 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Programming Language' ] ) - record.addField( subject1 ) - subject2 = Field( - tag = '651', - indicators = [ '', '0' ], - data = [ 'a', 'Object Oriented' ] ) - record.addField( subject2 ) - found = record.getFields( '650', '651' ) - self.assertEquals( len(found), 2 ) - - def testBadLeader( self ): - record = Record() - self.failUnlessRaises( RecordLeaderInvalid, - record.decodeMARC, 'foo' ) - - def testBadBaseAddress( self ): - record = Record() - self.failUnlessRaises( BaseAddressInvalid, - record.decodeMARC, '00695cam 2200241Ia 45x00' ) - - def testTitle( self ): - record = Record() - self.assertEquals( record.title(), None ) - record.addField( Field( '245', [0,1], - subfields=[ 'a', "Foo :", 'b', 'bar' ] ) ) - self.assertEquals( record.title(), 'Foo :bar' ) - - record = Record() - record.addField( Field( '245', [0,1], - subfields=[ 'a', "Farghin" ] ) ) - self.assertEquals( record.title(), "Farghin" ) - - def testISBN( self ): - record = Record() - self.assertEquals( record.isbn(), None ) - record.addField( Field( '020', [0,1], subfields=['a', '123456789' ] ) ) - self.assertEquals( record.isbn(), '123456789' ) - - -def suite(): - suite = unittest.makeSuite( RecordTest, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - - diff --git a/tags/rel-0.85/test/test.dat b/tags/rel-0.85/test/test.dat deleted file mode 100644 index 68d6dad..0000000 --- a/tags/rel-0.85/test/test.dat +++ /dev/null @@ -1 +0,0 @@ -00755cam 22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500fol05731351 IMchF20000613133448.0000107s2000 nyua 001 0 eng  a 00020737  a0471383147 (paper/cd-rom : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P22bM33 200000a005.13/32211 aMartinsson, Tobias,d1976-10aActivePerl with ASP and ADO /cTobias Martinsson. aNew York :bJohn Wiley & Sons,c2000. axxi, 289 p. :bill. ;c23 cm. +e1 computer laser disc (4 3/4 in.) a"Wiley Computer Publishing." 0aPerl (Computer program language)00aActive server pages.00aActiveX.00647pam 2200241 a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001500161100002600176245006700202260003800269263000900307300001100316650003700327650002500364700001600389fol05754809 IMchF20000601115601.0000203s2000 mau 001 0 eng  a 00022023  a1565926994 aDLCcDLCdDLC apcc00aQA76.73.P22bD47 200000a005.742211 aDescartes, Alligator.10aProgramming the Perl DBI /cAlligator Descartes and Tim Bunce. aCmabridge, MA :bO'Reilly,c2000. a1111 ap. cm. 0aPerl (Computer program language) 0aDatabase management.1 aBunce, Tim.00605cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077040001800094042000800112050002700120082001700147100002100164245005500185260004500240300002600285504005100311650003700362fol05843555 IMchF20000525142739.0000318s1999 cau b 001 0 eng  a 00501349  aDLCcDLCdDLC apcc00aQA76.73.P22bB763 199900a005.13/32211 aBrown, Martin C.10aPerl :bprogrammer's reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axix, 380 p. ;c22 cm. aIncludes bibliographical references and index. 0aPerl (Computer program language)00579cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002700135082001700162100002100179245005500200260004500255300003600300650003700336fol05843579 IMchF20000525142716.0000318s1999 caua 001 0 eng  a 00502116  a0072120002 aDLCcDLCdDLC apcc00aQA76.73.P22bB762 199900a005.13/32211 aBrown, Martin C.10aPerl :bthe complete reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axxxv, 1179 p. :bill. ;c24 cm. 0aPerl (Computer program language)00801nam 22002778a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001800156100002000174245008800194250003200282260004100314263000900355300001100364650003700375650003600412650002600448700002500474700002400499fol05848297 IMchF20000524125727.0000518s2000 mau 001 0 eng  a 00041664  a1565924193 aDLCcDLC apcc00aQA76.73.P22bG84 200000a005.2/7622211 aGuelich, Scott.10aCGI programming with Perl /cScott Guelich, Shishir Gundavaram & Gunther Birznieks. a2nd ed., expanded & updated aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language) 0aCGI (Computer network protocol) 0aInternet programming.1 aGundavaram, Shishir.1 aBirznieks, Gunther.00665nam 22002298a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002700130082001700157111005200174245008600226250001200312260004100324263000900365300001100374650005000385fol05865950 IMchF20000615103017.0000612s2000 mau 100 0 eng  a 00055759  a0596000138 aDLCcDLC apcc00aQA76.73.P22bP475 200000a005.13/32212 aPerl Conference 4.0d(2000 :cMonterey, Calif.)10aProceedings of the Perl Conference 4.0 :bJuly 17-20, 2000, Monterey, California. a1st ed. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)vCongresses.00579nam 22002178a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100002800173245006200201260004100263263000900304300001100313650003700324fol05865956 IMchF20000615102948.0000612s2000 mau 000 0 eng  a 00055770  a1565926099 aDLCcDLC apcc00aQA76.73.P22bB43 200000a005.13/32211 aBlank-Edelman, David N.10aPerl for system administration /cDavid N. Blank-Edelman. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)00661nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100001700173245006700190250001200257260004100269263000900310300001100319650003700330700002300367700001700390fol05865967 IMchF20000615102611.0000614s2000 mau 000 0 eng  a 00055799  a0596000278 aDLCcDLC apcc00aQA76.73.P22bW35 200000a005.13/32211 aWall, Larry.10aProgramming Perl /cLarry Wall, Tom Christiansen & Jon Orwant. a3rd ed. aCambridge, Mass. :bO'Reilly,c2000. a0007 ap. cm. 0aPerl (Computer program language)1 aChristiansen, Tom.1 aOrwant, Jon.00603cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001700161100003200178245006000210260005700270300003300327650003700360fol05872355 IMchF20000706095105.0000315s1999 njua 001 0 eng  a 00500678  a013020868X aDLCcDLCdDLC apcc00aQA76.73.P22bL69 199900a005.13/32211 aLowe, Vincentq(Vincent D.)10aPerl programmer's interactive workbook /cVincent Lowe. aUpper Saddle River, NJ :bPrentice Hall PTP,cc1999. axx, 633 p. :bill. ;c23 cm. 0aPerl (Computer program language)00696nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020002800094040001300122042000800135050002600143082001700169100002600186245004400212260005100256263000900307300001100316500002000327650003700347650001700384650004100401fol05882032 IMchF20000707091904.0000630s2000 cau 001 0 eng  a 00058174  a0764547291 (alk. paper) aDLCcDLC apcc00aQA76.73.P22bF64 200000a005.13/32212 aFoster-Johnson, Eric.10aCross-platform Perl /cEric F. Johnson. aFoster City, CA :bIDG Books Worldwide,c2000. a0009 ap. cm. aIncludes index. 0aPerl (Computer program language) 0aWeb servers. 0aCross-platform software development. \ No newline at end of file diff --git a/tags/rel-0.85/test/util.py b/tags/rel-0.85/test/util.py deleted file mode 100644 index 7ade343..0000000 --- a/tags/rel-0.85/test/util.py +++ /dev/null @@ -1,4 +0,0 @@ -import sys -sys.path.append( '../pymarc' ); - - diff --git a/tags/rel-0.85/test/writer.py b/tags/rel-0.85/test/writer.py deleted file mode 100644 index da67e79..0000000 --- a/tags/rel-0.85/test/writer.py +++ /dev/null @@ -1,27 +0,0 @@ -import util -import unittest -import pymarc -import re - -class MARCWriterTest(unittest.TestCase): - - def testWrite(self): - - # write a record off to a file - writer = pymarc.MARCWriter(file('test/writer-test.dat','w')) - record = pymarc.Record() - field = pymarc.Field('245', ['0','0'], ['a', 'foo']) - record.addField(field) - writer.write(record) - writer.close() - - # read it back in - reader = pymarc.MARCReader(file('test/writer-test.dat')) - record = reader.next() - -def suite(): - suite = unittest.makeSuite(MARCWriterTest, 'test') - return suite - -if __name__ == "__main__": - unittest.main() diff --git a/tags/rel-0.9/Changes b/tags/rel-0.9/Changes deleted file mode 100644 index 4beb61a..0000000 --- a/tags/rel-0.9/Changes +++ /dev/null @@ -1,58 +0,0 @@ -v0.9 Tue Apr 10 21:54:02 EDT 2007 - - various simplifications and pythonifications (thanks Dan Chudnov) - - added easy_install support - -v0.85 Fri Feb 3 13:08:35 EST 2006 - - added default leader template for when records are created - from scratch (thanks Kurt Nordstrom) - -v0.81 Mon Jan 30 16:33:36 EST 2006 - - getFields() wasn't returning all the fields when no tag - was passed in. - -v0.8 Mon Jan 30 07:05:36 CST 2006 - - added the ability to read raw marc from strings THIS MAY BREAK - YOUR CODE. pymarc no longer supports passing file paths to the - MARCReader constructor. You need to simply change: - - reader = MARCReader('marc.dat') - - to: - - reader = MARCReader(file('marc.dat')) - - Thanks to Daniel Hoth for suggesting this. It just makes sense to - be able to pass in MARC that you got from a Z39.50 network connection - or database, etc. - -v0.7 Mon Jan 23 15:08:55 EST 2006 - - added addSubfield() to Subfield (thanks Kurt Nordstrom) - -v0.6 Tue Nov 29 20:48:31 CST 2005 - - fixed test suite to run under the unittest that ships with python2.3 - - allow non-integer field tags - - fixed MARCWriter and added test (thanks Mikel Larreategi) - -v0.5 Thu Feb 10 10:01:12 CST 2005 - - handle empty subfields - -v0.4 Wed Feb 2 22:29:33 CST 2005 - - fixed directory validation: thanks Aaron Lav - - added iterator for pymarc.Field for iterating through subfields - - added pymarc.Field.value() for getting a field value easily - -v0.3 Wed Jan 5 17:03:37 CST 2005 - - changed mind about accessors (again): - removed getField() must use getFields() - renamed subfield() to getSubfields() and have it return a list - - added doctest support to pymarc/__init__.py - - added a test batch file of python data - -v0.2 Tue Jan 4 21:01:22 CST 2005 - - removed getField() and renamed getFields() to find() - -v0.11 Mon Jan 3 20:42:19 CST 2005 - - fixed test suite execution - -v0.1 Wed Dec 29 19:54:23 CST 2004 - - initial release diff --git a/tags/rel-0.9/MANIFEST.in b/tags/rel-0.9/MANIFEST.in deleted file mode 100644 index 591cc6d..0000000 --- a/tags/rel-0.9/MANIFEST.in +++ /dev/null @@ -1,3 +0,0 @@ -global-include *.py *.dat -include README MANIFEST.in - diff --git a/tags/rel-0.9/README b/tags/rel-0.9/README deleted file mode 100644 index 78d586c..0000000 --- a/tags/rel-0.9/README +++ /dev/null @@ -1,30 +0,0 @@ -DESCRIPTION ------------ - -pymarc is a python library for working with MARC21 bibliographic data -loosely based on the MARC/Perl suite of modules (http://marcpm.sf.net). -More about pymarc can be found at http://www.textualize.com/pymarc - -INSTALLATION ------------- - -Run the pymarc test suite to make sure things are in order with the -distribution: - - python test.py - -And then install: - - python setup.py install - -For typical usage of this library look at the documentation in -pymarc/__init__.py - -TODO ----- - -- marc8/utf8 translation -- marcxml support - -LICENSE: BSD -AUTHOR: Ed Summers diff --git a/tags/rel-0.9/pymarc/__init__.py b/tags/rel-0.9/pymarc/__init__.py deleted file mode 100644 index e7556f3..0000000 --- a/tags/rel-0.9/pymarc/__init__.py +++ /dev/null @@ -1,71 +0,0 @@ -# __init__.py - -r''' - -The pymarc module provides an API for reading, writing and modifying -MARC records. MARC (MAchine Readable Cataloging) is a metadata format for -bibliographic data. More about MARC can be found at the Library of Congress: -http://lcweb.loc.gov/marc - -Below are some common examples of how you might want to use pymarc. If you -run across an example that you think should be here please contribute it -by writing to the author. - -1. Reading a batch of records and printing out the 245 subfield a. If you - are curious this example uses the batch file available in the distribution. - - >>> from pymarc import MARCReader - >>> reader = MARCReader( 'test/marc.dat' ) - >>> for record in reader: - ... print record['245']['a'] - The pragmatic programmer : - Programming Python / - Learning Python / - Python cookbook / - Python programming for the absolute beginner / - Web programming : - Python programming on Win32 / - Python programming : - Python Web programming / - Core python programming / - Python and Tkinter programming / - Game programming with Python, Lua, and Ruby / - Python programming patterns / - Python programming with the Java class libraries : - Learn to program using Python : - Programming with Python / - BSD Sockets programming from a multi-language perspective / - Design patterns : - Introduction to algorithms / - ANSI Common Lisp / - -2. Creating a record and writing it out to a file. - - >>> from pymarc import Record, Field - >>> record = Record() - >>> record.addField( \ - ... Field( \ - ... tag = '245', - ... indicators = ['0','1'], - ... subfields = [ \ - ... 'a', 'The pragmatic programmer : ', - ... 'b', 'from journeyman to master /', - ... 'c', 'Andrew Hunt, David Thomas.' ] ) ) - >>> out = file( 'file.dat', 'w' ) - >>> out.write( record.asMARC21() ) - -''' - -__version__ = '0.85' - -from record import * -from field import * -from exceptions import * -from reader import * -from writer import * -from constants import * - -if __name__ == "__main__": - import doctest - doctest.testmod() - diff --git a/tags/rel-0.9/pymarc/constants.py b/tags/rel-0.9/pymarc/constants.py deleted file mode 100644 index bd148c2..0000000 --- a/tags/rel-0.9/pymarc/constants.py +++ /dev/null @@ -1,7 +0,0 @@ -LEADER_LEN = 24 -DIRECTORY_ENTRY_LEN = 12 -SUBFIELD_INDICATOR = chr( 0x1F ) -END_OF_FIELD = chr( 0x1E ) -END_OF_RECORD = chr( 0x1D ) - - diff --git a/tags/rel-0.9/pymarc/exceptions.py b/tags/rel-0.9/pymarc/exceptions.py deleted file mode 100644 index 4be03df..0000000 --- a/tags/rel-0.9/pymarc/exceptions.py +++ /dev/null @@ -1,30 +0,0 @@ -class pymarcException( Exception ): - pass - -class RecordLengthInvalid( pymarcException): - def __str__( self ): - return( "Invalid record length in first 5 bytes of record" ) - -class RecordLeaderInvalid( pymarcException ): - def __str__ ( self ): - return "Unable to extract record leader" - -class RecordDirectoryInvalid( pymarcException ): - def __str__( self ): - return "Invalid directory" - -class NoFieldsFound( pymarcException ): - def __str__ ( self ): - return "Unable to locate fields in record data" - -class BaseAddressInvalid( pymarcException ): - def __str__ ( self ): - return "Base address exceeds size of record" - -class WriteNeedsRecord( pymarcException ): - def __str__( self ): - return "Write requires a pymarc.Record object as an argument" - -class NoActiveFile( pymarcException ): - def __str__( self ): - return "There is no active file to write to in call to write" diff --git a/tags/rel-0.9/pymarc/field.py b/tags/rel-0.9/pymarc/field.py deleted file mode 100644 index fac5897..0000000 --- a/tags/rel-0.9/pymarc/field.py +++ /dev/null @@ -1,127 +0,0 @@ -from constants import * -from exceptions import * - -class Field( object ): - - def __init__( self, tag, indicators=[], subfields=[], data='' ): - """ - Field() pass in the field tag, indicators and subfields for the tag. - - field = Field( \ - tag = '245', - indicators = ['0','1'], - subfields = [ \ - 'a', 'The pragmatic programmer : ', - 'b', 'from journeyman to master /', - 'c', 'Andrew Hunt, David Thomas.' ] - - If you want to create a control field you don't pas in the indicators - and use a data parameter rather than a subfields parameter: - - field = Field( tag='001', data='fol05731351' ) - - """ - tag = "%03s" % tag - if ( tag < '010' ): - self.tag = tag - self.data = data - else: - self.tag = tag - self.indicator1 = indicators[0] - self.indicator2 = indicators[1] - self.subfields = subfields - - def __iter__(self): - self.__pos = 0 - return self - - def __str__( self ): - """ - A Field object in a string context will return the tag, indicators - and subfield as a string. - """ - if ( self.isControlField() ): - text = "%s %s" % ( self.tag, self.data ) - else: - text = "%s %s%s " % ( self.tag, self.indicator1, self.indicator2 ) - for subfield in self: - text += ("$%s%s" % subfield) - return text - - def __getitem__( self, subfield ): - """ - Retrieve the first subfield with a given subfield code in a field: - - field['a'] - - Handy for quick lookups. - """ - subfields = self.getSubfields( subfield ) - if len(subfields) > 0: return subfields[0] - return None - - def next( self ): - while self.__pos < len(self.subfields): - subfield = ( self.subfields[ self.__pos ], \ - self.subfields[ self.__pos+1 ] ) - self.__pos += 2 - return subfield - raise StopIteration - - def value( self ): - """ - Returns the field as a string without tag, indicators, and - subfield indicators. - """ - if self.isControlField(): - return self.data - string = "" - for subfield in self: - string += subfield[1] - return string - - def getSubfields( self, *codes ): - """ - getSubfields() accepts one or more subfield codes and will return a list - of subfield values. The order of the subfield values in the list - will be the order that they appear in the field. - - print field.getSubfields( 'a' ) - - print field.getSubfields( 'a', 'b', 'z' ) - """ - values = [] - for subfield in self: - if subfield[0] in codes: - values.append( subfield[1] ) - return values - - def addSubfield( self, code, value ): - """ - Adds a subfield code/value pair to the field. - - field.addSubfield('u', 'http://www.loc.gov') - """ - self.subfields.append(code) - self.subfields.append(value) - - def isControlField( self ): - """ - returns true or false if the field is considered a control field. - Control fields lack indicators and subfields. - """ - if self.tag < '010': - return True - return False - - def asMARC21( self ): - """ - used during conversion of a field to raw marc - """ - if self.isControlField(): - return self.data + END_OF_FIELD - marc = str(self.indicator1) + str(self.indicator2) - for subfield in self: - marc += SUBFIELD_INDICATOR + subfield[0] + subfield[1] - return marc + END_OF_FIELD - diff --git a/tags/rel-0.9/pymarc/reader.py b/tags/rel-0.9/pymarc/reader.py deleted file mode 100644 index 8258868..0000000 --- a/tags/rel-0.9/pymarc/reader.py +++ /dev/null @@ -1,56 +0,0 @@ -from pymarc import Record, Field -from constants import END_OF_RECORD -from exceptions import * -from types import * -from cStringIO import StringIO - -class Reader( object ): - """ - A base class for all iterating readers in the pymarc package. - """ - def __iter__( self ): - return self - -class MARCReader( Reader ): - """ - An iterator class for reading a file of MARC21 records. - - Simple usage: - - from pymarc import MARCReader - - ## pass in a file object - reader = MARCReader(file('file.dat')) - for record in reader: - ... - - ## pass in marc in transmission format - reader = MARCReader(rawmarc) - for record in reader: - ... - - """ - - def __init__(self, f): - """ - The constructor which you can pass either raw marc or a file object. - """ - if (type(f) == FileType): self.fh = f - else: self.fh = StringIO(f) - - def next( self ): - """ - To support iteration. - """ - first5 = self.fh.read( 5 ) - if not first5: - raise StopIteration - if len( first5 ) < 5: - raise RecordLengthInvalid - - length = int( first5 ) - chunk = self.fh.read( length - 5 ) - chunk = first5 + chunk - r = Record( chunk ) - return r - diff --git a/tags/rel-0.9/pymarc/record.py b/tags/rel-0.9/pymarc/record.py deleted file mode 100644 index 3ed2d57..0000000 --- a/tags/rel-0.9/pymarc/record.py +++ /dev/null @@ -1,253 +0,0 @@ -from exceptions import * -from constants import * -from field import * -from types import * -import string -import re - - -class Record( object ): - """ - Record - - A class for representing a MARC record. Each Record object is made up of - multiple Field objects. You'll probably want to look at the docs for Field - to see how to fully use a Record object. - - Basic usage: - - field = Field( \ - tag = '245', - indicators = ['0','1'], - subfields = [ \ - 'a', 'The pragmatic programmer : ', - 'b', 'from journeyman to master /', - 'c', 'Andrew Hunt, David Thomas.' ] - - record.addField( field ) - - Or creating a record from a chunk of MARC in transmission format: - - record = Record( data=chunk ) - - Or getting a record as serialized MARC21. - - raw = record.asMARC21() - - You'll normally want to use a MARCReader object to iterate through - MARC records in a file. - """ - - def __init__( self, data='' ): - self.leader = (' '*10) + '22' + (' '*8) + '4500' - self.fields = list() - self.pos = 0 - if len(data) > 0: - ok = self.decodeMARC( data ) - - def __str__( self ): - """ - In a string context a Record object will return a prettified version - of the record resembling something like this: - """ - # join is significantly faster than concatenation - text = "LDR %s\n" % self.leader - text += string.join( map( str, self.fields ), "\n" ) - return text - - def __getitem__( self, tag ): - """ - Allows a shorthand lookup by tag: - - record["245"] - - """ - fields = self.getFields( tag ) - if len(fields) > 0: return fields[0] - return None - - def __iter__( self ): - self.__pos = 0 - return self - - def next(self): - if self.__pos >= len( self.fields ): - raise StopIteration - self.__pos += 1 - return self.fields[ self.__pos-1 ] - - def addField( self, *fields ): - """ - addField() will add pymarc.Field objects to a Record object. - Optionally you can pass in multiple fields. - """ - self.fields.extend(fields) - - def getFields( self, *args ): - """ - When passed a tag ( '245' ) getFields() will return a list of all the - fields in a record with a given tag. - - title = record.getFields( '245' ) - - If no fields with the specified - tag are found then an empty list is returned. If you are interested - in more than one tag you can pass in a list: - - subjects = record.getFields( '600', '610', '650' ) - - If no tag is passed in to fields() a list of all the fields will be - returned. - """ - if (len(args) == 0): - return self.fields - - return [f for f in self.fields if f.tag in args] - - def decodeMARC( self, marc ): - """ - decodeMARC() accepts a MARC record in transmission format as a - a string argument, and will populate the object based on the data - found. The Record constructor actually uses decodeMARC() behind - the scenes when you pass in a chunk of MARC data to it. - - """ - - # extract record leader - self.leader = marc[ 0 : LEADER_LEN ] - if len( self.leader ) != LEADER_LEN: raise RecordLeaderInvalid - - # extract the byte offset where the record data starts - baseAddress = int( marc[ 12 : 17 ] ) - if baseAddress <= 0: raise BaseAddressNotFound - if baseAddress >= len( marc ): raise BaseAddressInvalid - - # extract directory, baseAddress-1 is used since the - # director ends with an END_OF_FIELD byte - directory = marc[ LEADER_LEN : baseAddress-1 ] - - # determine the number of fields in record - if len(directory) % DIRECTORY_ENTRY_LEN <> 0: - raise RecordDirectoryInvalid - numFields = len( directory ) / DIRECTORY_ENTRY_LEN - - # add fields to our record using directory offsets - fieldNum = 0 - while ( fieldNum < numFields ): - entryStart = fieldNum * DIRECTORY_ENTRY_LEN - entryEnd = entryStart + DIRECTORY_ENTRY_LEN - entry = directory[ entryStart : entryEnd ] - entryTag = entry[ 0 : 3 ] - entryLength = int( entry[ 3 : 7 ] ) - entryOffset = int( entry[ 7 : 12 ] ) - entryData = marc[ baseAddress + entryOffset : - baseAddress + entryOffset + entryLength - 1 ] - - if entryTag < '010': - field = Field( tag=entryTag, data=entryData ) - else: - subfields = list() - subs = entryData.split( SUBFIELD_INDICATOR ) - i1 = subs[0][0] - i2 = subs[0][1] - for subfield in subs[1:]: - if len(subfield) == 0: continue - code = subfield[0] - data = subfield[1:] - subfields.append( code ) - subfields.append( data ) - field = Field( - tag = entryTag, - indicators = [ i1, i2 ], - subfields = subfields ) - - self.addField( field ) - fieldNum += 1 - - if fieldNum == 0: raise NoFieldsFound - - def asMARC21( self ): - """ - returns the record serialized as MARC21 - """ - fields = '' - directory = '' - offset = 0 - - # build the directory - # each element of the directory includes the tag, the byte length of - # the field and the offset from the base address where the field data - # can be found - for field in self.fields: - fieldData = field.asMARC21() - fields += fieldData - directory += "%03d%04d%05d" % (int(field.tag),len(fieldData),offset) - offset += len( fieldData ) - - # directory ends with an end of field - directory += END_OF_FIELD - - # field data ends with an end of record - fields += END_OF_RECORD - - # the base address where the directory ends and the field data begins - baseAddress = LEADER_LEN + len(directory) - - # figure out the length of the record - recordLength = baseAddress + len(fields) - - # update the leader with the current record length and base address - # the lengths are fixed width and zero padded - self.leader = "%05d%s%05d%s" % \ - ( recordLength, self.leader[5:12], baseAddress, self.leader[17:] ) - - # return the encoded record - return self.leader + directory + fields - - def title( self ): - """ - Returns the title of the record (245 $a an $b). - """ - title = None - try: - title = self['245']['a'] - title += self['245']['b'] - except TypeError, e: - pass - return title - - def isbn( self ): - """ - Returns an ISBN if appropriate. If not present None will - be returned. - """ - isbn = None - try: - # if anyone ever cares alot about performance - # this compilation could be moved out and compiled once - isbnPattern = re.compile( '^([0-9A-Za-z]+)' ) - isbn = isbnPattern.match( self["020"]["a"] ).group(1) - except Exception, e: - pass - return isbn - - def author( self ): - # todo - pass - - def publisher( self ): - # todo - pass - - def pubyear( self ): - # todo - pass - - def subjects( self ): - # todo - pass - - def notes( self ): - # todo - pass - diff --git a/tags/rel-0.9/pymarc/writer.py b/tags/rel-0.9/pymarc/writer.py deleted file mode 100644 index 23c32ff..0000000 --- a/tags/rel-0.9/pymarc/writer.py +++ /dev/null @@ -1,49 +0,0 @@ -from pymarc import Record, Field, WriteNeedsRecord, NoActiveFile -from types import * -from cStringIO import StringIO - -class Writer( object ): - - def write( self ): - pass - -class MARCWriter( Writer ): - """ - A class for writing MARC21 records in transmission format. - - Simple usage: - - from pymarc import MARCWriter - - ## pass in a file - writer = MARCWriter(file('file.dat','w')) - writer.write(record) - - ## use StringIO if you want to write to a string - string = StringIO() - writer = MARCWriter(string) - writer.write(record) - print string - """ - - def __init__(self, f): - """ - You need to pass in a file like object. - """ - self.fh = f - - def write(self, record): - """ - Writes a record. - """ - if type(record) != Record: - raise WriteNeedsRecord - self.fh.write(record.asMARC21()) - - def close( self ): - """ - Closes the file. - """ - self.fh.close() - self.fh = None - diff --git a/tags/rel-0.9/setup.py b/tags/rel-0.9/setup.py deleted file mode 100644 index d2b6d3b..0000000 --- a/tags/rel-0.9/setup.py +++ /dev/null @@ -1,40 +0,0 @@ -# bootstrap easy_install -import ez_setup -ez_setup.use_setuptools() - -from setuptools import setup -from sys import version_info - -classifiers = """\ -Intended Audience :: Education -Intended Audience :: Developers -Intended Audience :: Information Technology -License :: OSI Approved :: BSD License -Programming Language :: Python -Topic :: Text Processing :: General -""" - -# workaround for older pythons that don't -# understand classifiers - -if version_info < (2, 3): - _setup = setup - def setup(**kwargs): - if kwargs.has_key("classifiers"): - del kwargs["classifiers"] - _setup(**kwargs) - -setup( - name = 'pymarc', - version = '0.9', - url = 'http://www.textualize.com/pymarc', - download_url = 'http://www.textualize.com/archive/pymarc/latest.tar.gz', - author = 'Ed Summers', - author_email = 'ehs@pobox.com', - license = 'http://www.opensource.org/licenses/bsd-license.php', - packages = [ 'pymarc' ], - description = "read, write and modify MARC bibliographic data", - classifiers = filter( None, classifiers.split("\n") ), - test_suite = 'test' -) - diff --git a/tags/rel-0.9/test.py b/tags/rel-0.9/test.py deleted file mode 100644 index 8ea1517..0000000 --- a/tags/rel-0.9/test.py +++ /dev/null @@ -1,19 +0,0 @@ -import unittest -import test.record -import test.field -import test.reader -import test.encode -import test.writer - -def suite(): - suite = unittest.TestSuite() - suite.addTest( test.record.suite() ) - suite.addTest( test.field.suite() ) - suite.addTest( test.reader.suite() ) - suite.addTest( test.encode.suite() ) - suite.addTest( test.writer.suite() ) - return suite - -runner = unittest.TextTestRunner() -runner.run( suite() ) - diff --git a/tags/rel-0.9/test/__init__.py b/tags/rel-0.9/test/__init__.py deleted file mode 100644 index c297d12..0000000 --- a/tags/rel-0.9/test/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -import record -import field -import reader diff --git a/tags/rel-0.9/test/encode.py b/tags/rel-0.9/test/encode.py deleted file mode 100644 index 17454e1..0000000 --- a/tags/rel-0.9/test/encode.py +++ /dev/null @@ -1,25 +0,0 @@ -import util -from pymarc import MARCReader, Record, Field -import unittest -import os - -class Encode( unittest.TestCase ): - - def testEncodeDecode( self ): - # get raw data from file - original = file( 'test/one.dat' ).read() - # create a record object for the file - reader = MARCReader(file('test/one.dat')) - record = reader.next() - # make sure original data is the same as - # the record encoded as MARC - raw = record.asMARC21() - self.assertEqual( original, raw ) - -def suite(): - suite = unittest.makeSuite( Encode, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - diff --git a/tags/rel-0.9/test/field.py b/tags/rel-0.9/test/field.py deleted file mode 100644 index e7366a0..0000000 --- a/tags/rel-0.9/test/field.py +++ /dev/null @@ -1,73 +0,0 @@ -import util -import unittest -from pymarc.record import Record, Field - -class FieldTest( unittest.TestCase ): - - def setUp( self ): - self.field = Field( - tag = '245', - indicators = [ 0, 1 ], - subfields = [ - 'a', 'Huckleberry Finn: ', - 'b', 'An American Odyssey' - ] - ) - - def testString( self ): - self.assertEquals( str(self.field), - '245 01 $aHuckleberry Finn: $bAn American Odyssey') - - def testIndicators( self ): - assert self.field.indicator1 is 0 - self.assertEqual( self.field.indicator2, 1 ) - - def testSubfieldsCreated( self ): - subfields = self.field.subfields - self.assertEqual( len( subfields ), 4 ) - - def testSubfieldShort( self ): - self.assertEqual( self.field['a'], 'Huckleberry Finn: ' ) - self.assertEqual( self.field['z'], None ) - - def testSubfields( self ): - self.assertEqual( self.field.getSubfields( 'a' ), - ['Huckleberry Finn: '] ) - - def testSubfieldsMulti( self ): - self.assertEqual( self.field.getSubfields( 'a','b' ), - ['Huckleberry Finn: ', 'An American Odyssey' ] ) - - def testEncode( self ): - self.field.asMARC21() - - def testIterator( self ): - string = "" - for subfield in self.field: - string += subfield[0] - string += subfield[1] - self.assertEquals( string, "aHuckleberry Finn: bAn American Odyssey" ) - - def testValue( self ): - self.assertEquals( self.field.value(), - 'Huckleberry Finn: An American Odyssey' ) - controlField = Field( tag='001', data='foobar' ) - self.assertEquals( controlField.value(), "foobar" ) - - def testNonIntegerTag( self ): - # make sure this doesn't throw an exception - f = Field( tag="3 0", indicators=[0,1], subfields=['a', 'foo'] ) - - def testAddSubfield( self ): - f = Field( tag="245", indicators=[0,1], subfields=['a', 'foo'] ) - f.addSubfield('a','bar') - self.assertEquals( f.__str__(), '245 01 $afoo$abar') - -def suite(): - suite = unittest.makeSuite( FieldTest, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - - diff --git a/tags/rel-0.9/test/marc.dat b/tags/rel-0.9/test/marc.dat deleted file mode 100644 index 9c52c7d..0000000 --- a/tags/rel-0.9/test/marc.dat +++ /dev/null @@ -1 +0,0 @@ -01060cam 22002894a 45000010009000000050017000090080041000260350021000679060045000889250044001339550160001779550053003370100017003900200015004070400018004220420008004400500023004480820014004711000025004852450088005102600044005983000027006425040041006696500026007107000026007369850008007621177850420040816084925.0990802s2000 mau b 001 0 eng  a(DLC) 99043581 a0bvipcorignewd1eocipf19gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc05 to ja00 08-02-99; jf05 to subj. 08/02/99; jf11 to sl 08-03-99; jf25 08-05-99 to ddc; bk rec'd, to CIP ver. ps07 01-07-00; CIP ver jf05 to sl 04/05/00 aADDED COPIES: another copy to ASCD ps15 01-12-00 a 99043581  a020161622X aDLCcDLCdDLC apcc00aQA76.6b.H857 200000a005.12211 aHunt, Andrew,d1964-14aThe pragmatic programmer :bfrom journeyman to master /cAndrew Hunt, David Thomas. aReading, Mass :bAddison-Wesley,c2000. axxiv, 321 p. ;c24 cm. aIncludes bibliographical references. 0aComputer programming.1 aThomas, David,d1956- eGAP00979cam 2200241 a 45000010009000000050017000090080041000269060045000679250042001129550206001540100017003600200015003770400018003920500026004100820017004361000016004532450037004692500012005062600051005183000078005695040051006476500039006981251588220020923085341.0010827s2001 cc a b 001 0 eng  a7bcbccorigcopd2encipf20gy-gencatlg0 aacquireb2 shelf copyxpolicy default apb07 2001-08-27 to ASCDajf00 2001-08-31ajf00 2001-09-05;cjf03 2001-10-16 to Subj.djf01 2001-10-25 to slejf12 2001-11-23; jf12 to Dewey 11-23-01aaa20 2001-12-07; copy 2 added jf16 to BCCD 09-23-02 a 2001276084 a0596000855 aDLCcDLCdDLC00aQA76.73.P98bL88 200100a005.13/32211 aLutz, Mark.10aProgramming Python /cMark Lutz. a2nd ed. aBeijing :aSebastopol, CA :bO'Reilly,cc2001. axxxvii, 1255 p. :bill. ;c24 cm. +e1 computer optical disc (4 3/4 in.). aIncludes bibliographical references and index. 0aPython (Computer program language)00887cam 2200253 a 45000010009000000050017000090080041000269060045000679250044001129550151001560100017003070200015003240400018003390500027003570820017003841000016004012450051004172500012004682600040004803000035005205040020005556500039005757000019006141361051220040714135238.0040601s2004 caua 001 0 eng  a7bcbccorigcopd2encipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apv17 2004-06-01 Preprocessor to ASCDajf00 2004-06-03;cjf03 2004-06-24 to Subj.djf09 2004-06-28 to slejf12 2004-07-01 to Deweyaaa25 2004-07-14 a 2004273129 a0596002815 aDLCcDLCdDLC00aQA76.73.P98bL877 200400a005.13/32221 aLutz, Mark.10aLearning Python /cMark Lutz and David Ascher. a2nd ed. aSebastopol, CA :bO'Reilly,cc2004. axxvi, 591 p. :bill. ;c24 cm. aIncludes index. 0aPython (Computer program language)1 aAscher, David.01038cam 2200289 a 45000010009000000050017000090080041000269060045000679250042001129550167001540100017003210150015003380200015003530350023003680400023003910420014004140500026004280820017004542450065004712600039005363000027005755000048006025000020006506500039006707000020007097000019007291306994220030606071827.0030127s2002 cau 001 0 eng  a7bcbcccopycatd2encipf20gy-gencatlg0 aacquireb2 shelf copyxpolicy default aps04 2003-01-27 to ASCDajf00 2003-01-30cjf05 2003-01-30 to subj.djf09 2003-01-30 to slejf12 2003-02-03 to Deweyaaa20 2003-03-10ajg07 2003-06-06 copy 2 added a 2003268354 aGBA2-Y6761 a0596001673 a(OCoLC)ocm49044543 aUKMcUKMdCUSdDLC alccopycat00aQA76.73.P98bP95 200200a005.13/322100aPython cookbook /cedited by Alex Martelli and David Ascher. aSebastopol, CA :bO'Reilly,c2002. axxix, 574 p. ;c24 cm. a"Recipes from the Python community"--Cover. aIncludes index. 0aPython (Computer program language)1 aMartelli, Alex.1 aAscher, David.00759nam 22002295a 45000010009000000050017000090080041000260350022000679060045000899250044001349550020001780100017001980200015002150400013002300420008002431000021002512450068002722600084003402630009004243000012004339630084004451312796220030318153335.0030318s2003 inu 000 0 eng  a(DLC) 2003104024 a0bibccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2003-03-18 a 2003104024 a1592000738 aDLCcDLC apcc1 aDawson, Michael.10aPython programming for the absolute beginner /cMichael Dawson. aIndianapolis, IN :bPremier Press Inc., a division of Course Technology,c2003. a0306 ap.ccm. aMargaret Bauer ; phone (812) 273-0561 ; fax null email margaret_bauer@yahoo.com01304cam 22002894a 45000010009000000050017000090080041000269060045000679250044001129550280001560100017004360200015004530400018004680420008004860500024004940820017005181000049005352450150005842460030007342600053007643000036008175040064008536500026009176500023009437000021009667000027009871256551420020718085037.0011016s2002 njua b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2001-10-16 to ASCD;cjf03 2001-10-17 to Subj.djf01 2001-10-25 to slejf25 2001-10-25 to Deweyaaa20 2001-10-26aps16 2002-01-11 bk rec'd, to CIP ver.ajf00 2002-01-16fjf04 2002-01-18 to S.L.gjf12 2002-01-18 to bccdajf00 2002-03-26; copy 2 added jf16 to BCCD 07-18-02 a 2001055410 a0130410659 aDLCcDLCdDLC apcc00aQA76.625b.T48 200200a005.2/762211 aThiruvathukal, George K.q(George Kuriakose)10aWeb programming :btechniques for integrating Python, Linux, Apache, and MySQL /cGeorge K. Thiruvathukal, John P. Shafaee, Thomas W. Christoper.14aWeb programming in Python aUpper Saddle River, NJ :bPrentice Hall,cc2002. axviii, 745 p. :bill. ;c24 cm. aIncludes bibliographical references (p. 723-725) and index. 0aInternet programming. 0aWeb sitesxDesign.1 aShafaee, John P.1 aChristopher, Thomas W.01023cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550168001560100017003240200035003410400018003760420008003940500026004020820016004281000029004442450067004732500012005402600051005523000035006035000020006386500039006586300021006977000027007181187737320010105091546.0991228s2000 cc a 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc01 12-28-99; jf03 01-04-00 ; jf11 to sl 1-4-00; jf12 to Dewey 01-06-00; aa05 01-10-00; CIP ver. pv08 to BCCD 05-01-00; copy 2 added jf16 to BCCD 01-05-01 a 99085714  a1565926218 (pbk. : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P98bH36 200000a005.2652211 aHammond, Markq(Mark J.)10aPython programming on Win32 /cMark Hammond and Andy Robinson. a1st ed. aBeijing ;aSebastopol, CA :bO'Reilly,cc2000. axvii, 652 p. :bill. ;c24 cm. aIncludes index. 0aPython (Computer program language)00aMicrosoft Win32.1 aRobinson, Andy,d1967-00867cam 22002538a 45000010009000000050017000090080041000269060045000679250044001129550127001560100017002830200015003000400013003150420008003280500026003360820017003621000019003792450080003982600047004782630009005253000011005346500039005459630029005841343237720031222144424.0031211s2003 oru 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc27 2003-12-11 RUSH to ASCDcjf07 2003-12-17 to subjectdjf09 2003-12-17 to slejp05 2003-12-18 to Deweyaaa20 2003-12-22 a 2003064366 a1887902996 aDLCcDLC apcc00aQA76.73.P98bZ45 200300a005.13/32221 aZelle, John M.10aPython programming :ban introduction to computer science /cJohn M. Zelle. aWilsonville, OR :bFranklin, Beedlec2003. a0312 ap. cm. 0aPython (Computer program language) aTom Sumner, 503-682-766801008cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550171001560100017003270200015003440400018003590420008003770500026003850820018004111000026004292450065004552600046005203000034005665000020006006500039006206500026006596500023006857000022007081222727720030509151148.0001109s2002 inua 001 0 eng  a7bcbccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 11-09-00apv11 2002-04-12 2 copies to ASCDajf00 2002-04-18;cjf03 2002-08-20 to Subj.djf09 2002-08-21 to slejf25 2002-09-10 2 copies to Deweyaaa05 2002-10-04 a 00110884  a0735710902 aDLCcDLCdDLC apcc00aQA76.73.P98bH65 200200a005.2/7622211 aHolden, Steve,d1950-10aPython Web programming /cSteve Holden [with David Beazley]. aIndianapolis, Ind. :bNew Riders,cc2002. axxi, 691 p. :bill. ;c23 cm. aIncludes index. 0aPython (Computer program language) 0aInternet programming. 0aWeb sitesxDesign.1 aBeazley, David M.01049cam 22002534a 45000010009000000050017000090080041000269060045000679250044001129550148001560100017003040200015003210400018003360420008003540500026003620820017003881000018004052450047004232600052004703000066005225040051005885380117006396500039007561216916820010522141328.0000911s2000 nju b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc16 09-11-00; jf02 09-12-00 ; jf11 to sl 9-12-00; jf12 to Dewey 09-14-00; aa05 09-14-00; CIP Ver. jf02 05-11-01; jf12 to BCCD 05-22-01 a 00047856  a0130260363 aDLCcDLCdDLC apcc00aQA76.73.P98bC48 200100a005.13/32211 aChun, Wesley.10aCore python programming /cWesley J. Chun. aUpper Saddle River, NJ :bPrentice Hall,c2001. axxix, 771 p. ;c24 cm. +e1 computer optical disc (4 3/4 in.) aIncludes bibliographical references and index. aSystem requirements for accompanying computer disc: Windows 9x/Me/NT/2000; a Web brouser; Macintosh; UNIX/Linux. 0aPython (Computer program language)00948cam 22002654a 45000010009000000050017000090080041000269060045000679250044001129550133001560100017002890200015003060400018003210420008003390500026003470820017003731000021003902450055004112600038004663000036005045040051005406500039005916500036006306300016006661213218820010817152505.0000804s2000 ctua b 001 0 eng  a7bcbccorignewd2encipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pb05 08-04-00;jfoo 08-08-00;cjf03 2001-07-18 to Subj.djf02 2001-07-19 to slejf25 2001-07-31 to Deweyaaa20 2001-08-17 a 00697831  a1884777813 aDLCcDLCdDLC apcc00aQA76.73.P98bG73 200000a005.13/32211 aGrayson, John E.10aPython and Tkinter programming /cJohn E. Grayson. aGreenwich, CT :bManning,cc2000. axxiii, 658 p. :bill. ;c24 cm. aIncludes bibliographical references and index. 0aPython (Computer program language) 0aTcl (Computer program language)00aTk toolkit.00767nam 22002295a 45000010009000000050017000090080041000260350022000679060045000899250044001349550020001780100017001980200015002150400013002300420008002432450081002512600079003322630009004113000012004204400021004329630084004531337832520031020153106.0031020s2003 inu 000 0 eng  a(DLC) 2003114351 a0bibccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc10 2003-10-20 a 2003114351 a1592000770 aDLCcDLC apcc00aGame programming with Python, Lua, and Ruby /c[edited by] Estelle Manticas. aIndianapolis, IN :bPremier Press, a Division of Course Technology,c2003. a0311 ap.ccm. aGame development aMargaret Bauer ; phone (812) 273-0561 ; fax null email margaret_bauer@yahoo.com01121cam 22002414a 45000010009000000050017000090080041000269060045000679250044001129550362001560100017005180200015005350400018005500420008005680500026005760820017006021000027006192450058006462600052007043000033007565040051007896500039008401256552920030227150222.0011016s2002 njua b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2001-10-16 to ASCD;cjf05 2001-10-17 to subj.djf04 2001-10-17 to S.L.ejf25 2001-10-25 to Deweyaaa20 2001-10-26aps11 2002-01-15 bk rec'd, to CIP ver.fjp07 2002-02-13ajp00 2002-03-08gjp85 2002-03-08 to BCCD; copy 2 added jf16 to BCCD 07-18-02ajf00 2003-01-29ajf07 2003-02-27 somehow copy 1 got back into the CIP ver. stream (handed to acting TL) a 2001055411 a0130409561 aDLCcDLCdDLC apcc00aQA76.73.P98bC47 200200a005.13/32211 aChristopher, Thomas W.10aPython programming patterns /cThomas W. Christopher. aUpper Saddle River, NJ :bPrentice Hall,c2002. axix 538 p. :bill. ;c24 cm. aIncludes bibliographical references and index. 0aPython (Computer program language)01062cam 22002778a 45000010009000000050017000090080041000269060045000679250044001129550120001560100017002760200028002930400013003210420008003340500026003420820018003681000024003862450134004102600041005442630009005853000011005946500039006056500037006446500039006819630064007201275256420020426115101.0020424s2002 mau 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc21 2002-04-24 to ASCDcjf05 2002-04-25 to subj.djf09 2002-04-25 to slejf25 2002-04-26 to Deweyaaa20 2002-04-26 a 2002066565 a0201616165 (alk. paper) aDLCcDLC apcc00aQA76.73.P98bH54 200200a005.2/7622211 aHightower, Richard.10aPython programming with the Java class libraries :ba tutorial for building Web and Enterprise applications /cRichard Hightower. aBoston, MA :bAddison-Wesley,c2002. a0207 ap. cm. 0aPython (Computer program language) 0aJava (Computer program language) 0aApplication softwarexDevelopment. aMarilyn Rash, 617-848-6509; email: timothy.nicholls@awl.com01012cam 22002294a 45000010009000000050017000090080041000269060045000679250044001129550192001560100017003480200028003650400018003930420008004110500026004190820017004451000017004622450151004792600042006303000071006726500039007431216723920010608101527.0000908s2001 mau b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc21 09-08-00;jf05 (desc) 09/08/00 ; jf11 to sl 9-11-00; jf12 to Dewey 09-12-00;aa03 9-12-00;CIP ver jf05 to sl 01/11/01; jf12 to BCCD 02-01-01; copy 2 added jf16 to BCCD 04-24-01 a 00046921  a0201709384 (alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P48bG38 200100a005.13/32211 aGauld, Alan.10aLearn to program using Python :ba tutorial for hobbyists, self-starters, and all who want to learn the art of computer programming /cAlan Gauld. aReading, MA :bAddison-Wesley,c2001. axii, 270 p. ;c24 cm.e+ 1 computer laser optical disc (4 3/4 in.) 0aPython (Computer program language)00935cam 22002534a 450000100070000000500170000700800410002403500210006590600450008692500440013195501480017501000170032302000220034004000180036204200080038005000260038808200170041410000160043124500610044726000390050830000750054765000390062270000200066120525620000830103214.0990629s2000 caua 001 0 eng  9(DLC) 99065006 a7bcbccorignewd2eopcnf19gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apn08/e-pcn 06-29-99; to ASCD pb02 06-10-00; jf00 06-13-00; jf03 08-17-00 ; jf11 to sl 8-22-00; jf25 2 copies to Dewey 08-24-00; aa19 08-30-2000 a 99065006  a0761523340 (pbk.) aDLCcDLCdDLC apcc00aQA76.73.P98bA48 199900a005.13/32211 aAltom, Tim.10aProgramming with Python /cTim Altom with Mitch Chapman. aRocklin, CA :bPrima Tech,cc1999. axxxiv, 372 p. :bill. ;c24 cm. +e1 computer optical disc (4 3/4 in.) 0aPython (Computer program language)1 aChapman, Mitch.01214cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550202001560100017003580200047003750400018004220420008004400500024004480820017004721000019004892450079005082600051005873000058006386500026006966500048007226500040007706500049008108560077008591328439520040226131230.0030722s2004 maua 001 0 eng  a7bcbccorignewd1eecipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ajf05 2003-07-22cjf05 2003-07-22 to subj.djf09 2003-07-22 to slejf12 2003-07-23 to Deweyaaa20 2003-07-29ajf00 2004-01-29fjf07 2004-02-02ejf12 2004-02-03 to BCCDajf16 2004-02-26 copy2 to BCCD a 2003016400 a1584502681 (Pbk. with CD-ROM : alk. paper) aDLCcDLCdDLC apcc00aQA76.625b.J66 200400a005.2/762221 aJones, M. Tim.10aBSD Sockets programming from a multi-language perspective /cM. Tim Jones. aHingham, Mass. :bCharles River Media,cc2004. axix, 444 p. :bill. ;c24 cm. +e1 CD-ROM (4 3/4 in.) 0aInternet programming. 0aComputer networksxDesign and construction. 0aInternetworking (Telecommunication) 0aProgramming languages (Electronic computers)413Table of contentsuhttp://www.loc.gov/catdir/toc/ecip047/2003016400.html01113cam 2200277 a 4500001000800000005001700008008004100025035002100066906004500087955011600132010001700248020003300265040001800298050002300316082001600339245009800355260004600453300003300499440004900532504006400581650005100645650003600696650002300732700001800755991006200773159816719981112152315.2940902s1995 maua b 001 0 eng  9(DLC) 94034264 a7bcbccorignewd1eocipf19gy-gencatlg apc18 to ja00 09-02-94; jf06 to subj 09-06-94; jf11 to sl 09-06-94; jf12 09-06-94 to ddc; CIP ver. jc03 11-23-94 a 94034264  a0201633612 (acid-free paper) aDLCcDLCdDLC00aQA76.64b.D47 199500a005.1/222000aDesign patterns :belements of reusable object-oriented software /cErich Gamma ... [et al.]. aReading, Mass. :bAddison-Wesley,cc1995. axv, 395 p. :bill. ;c25 cm. 0aAddison-Wesley professional computing series aIncludes bibliographical references (p. 375-381) and index. 0aObject-oriented programming (Computer science) 0aComputer softwarexReusability. 0aSoftware patterns.1 aGamma, Erich. bc-GenCollhQA76.64i.D47 1995p00011185514tCopy 1wBOOKS01233cam 2200289 a 45000010009000000050017000090080041000269060045000679250044001129550226001560100017003820200034003990400013004330500024004460820014004702450065004842460015005492500012005642600043005763000021006195000111006405040068007516500026008196500025008457000022008707000051008921237004420020812080859.0010405s2001 mau b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc20 to ja00 04-05-01; jp07 04-11-01 sent to sl;jp85 to Dewey 04-19-01; aa20 04-20-01aps13 2001-08-16 bk rec'd, to CIP ver.fjf07 2001-08-20ajf00 2001-08-20gjf12 2001-08-23 to bccdajf01 2001-09-13 copy 2 added to BCCD a 2001031277 a0262032937 (hc. : alk. paper) aDLCcDLC00aQA76.6b.I5858 200100a005.122100aIntroduction to algorithms /cThomas H. Cormen ... [et al.].30aAlgorithms a2nd ed. aCambridge, Mass. :bMIT Press,cc2001. axxi, 1180 p. cm. aRev. ed. of: Introduction to algorithms / Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest. c1990. aIncludes bibliographical references (p. [1127]-1130) and index. 0aComputer programming. 0aComputer algorithms.1 aCormen, Thomas H.1 aCormen, Thomas H.tIntroduction to algorithms.01009pam 2200265 a 4500001000800000005001700008008004100025035002100066906004500087955011600132010001700248020002200265040001800287050002600305082001700331100001800348245003700366260005300403300003500456440005200491500002700543504006400570650004400634991006500678303540919960425075058.2951006s1996 njua b 001 0 eng  9(DLC) 95045017 a7bcbccorignewd1eocipf19gy-gencatlg apc17 RUSH to ja00 10-06-95;jf05 to subj. 10/06/95; jf04 to S.L. 10-06-95; jf14 10-10-95; CIP ver. jk14 04-22-96 a 95045017  a0133708756 (pbk.) aDLCcDLCdDLC00aQA76.73.C28bG69 199600a005.13/32201 aGraham, Paul.10aANSI Common Lisp /cPaul Graham. aEnglewood Cliffs, N.J. :bPrentice Hall,cc1996. axiii, 432 p. :bill. ;c23 cm. 0aPrentice Hall series in artificial intelligence a"An Alan R. Apt book." aIncludes bibliographical references (p. 401-414) and index. 0aCOMMON LISP (Computer program language) bc-GenCollhQA76.73.C28iG69 1996p00034751468tCopy 1wBOOKS \ No newline at end of file diff --git a/tags/rel-0.9/test/one.dat b/tags/rel-0.9/test/one.dat deleted file mode 100644 index a43cf54..0000000 --- a/tags/rel-0.9/test/one.dat +++ /dev/null @@ -1 +0,0 @@ -00755cam 22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500fol05731351 IMchF20000613133448.0000107s2000 nyua 001 0 eng  a 00020737  a0471383147 (paper/cd-rom : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P22bM33 200000a005.13/32211 aMartinsson, Tobias,d1976-10aActivePerl with ASP and ADO /cTobias Martinsson. aNew York :bJohn Wiley & Sons,c2000. axxi, 289 p. :bill. ;c23 cm. +e1 computer laser disc (4 3/4 in.) a"Wiley Computer Publishing." 0aPerl (Computer program language)00aActive server pages.00aActiveX. \ No newline at end of file diff --git a/tags/rel-0.9/test/reader.py b/tags/rel-0.9/test/reader.py deleted file mode 100644 index 6cba456..0000000 --- a/tags/rel-0.9/test/reader.py +++ /dev/null @@ -1,45 +0,0 @@ -import util -import unittest -import pymarc -import re - -class MARCReaderFileTest( unittest.TestCase ): - """ - Tests for the pymarc.MARCReader class which provides iterator - based access to a MARC file. - """ - - def setUp( self ): - self.reader = pymarc.MARCReader(file('test/test.dat')) - - def testIterator( self ): - count = 0 - for record in self.reader: - count += 1 - self.assertEquals(count, 10, 'found expected amt of MARC21 records') - - def testString( self ): - ## basic test of stringification - startsWithLeader = re.compile( "^LDR" ) - hasNumericTag = re.compile( "\n\d\d\d " ) - for record in self.reader: - text = str(record) - self.failUnless( startsWithLeader.search(text), 'got leader') - self.failUnless(hasNumericTag.search(text), 'got a tag') - -class MARCReaderStringTest(MARCReaderFileTest): - - def setUp(self): - raw = file('test/test.dat').read() - self.reader = pymarc.reader.MARCReader(raw) - - # inherit same tests from MARCReaderTestFile - -def suite(): - fileSuite = unittest.makeSuite(MARCReaderFileTest, 'test') - stringSuite = unittest.makeSuite(MARCReaderStringTest, 'test') - suite = unittest.TestSuite((fileSuite, stringSuite)) - return suite - -if __name__ == "__main__": - unittest.main() diff --git a/tags/rel-0.9/test/record.py b/tags/rel-0.9/test/record.py deleted file mode 100644 index 7dd23df..0000000 --- a/tags/rel-0.9/test/record.py +++ /dev/null @@ -1,101 +0,0 @@ -import util -import unittest - -from pymarc import Record, Field -from pymarc.exceptions import * - -class RecordTest( unittest.TestCase ): - - def testAddField( self ): - record = Record() - field = Field( - tag = '245', - indicators = [ '1', '0' ], - data = [ 'a', 'Python', 'c', 'Guido' ] ) - record.addField( field ) - self.failUnless( field in record.fields, msg='found field' ) - - def testQuickAccess( self ): - record = Record() - title = Field( - tag = '245', - indicators = [ '1', '0' ], - data = [ 'a', 'Python', 'c', 'Guido' ] ) - record.addField( title ) - self.assertEqual( record['245'], title, 'short access' ) - self.assertEqual( record['999'], None, 'short access with no field' ) - - def testFieldNotFound( self ): - record = Record() - self.assertEquals( len( record.fields ), 0 ) - - def testFind( self ): - record = Record() - subject1 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Programming Language' ] ) - record.addField( subject1 ) - subject2 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Object Oriented' ] ) - record.addField( subject2 ) - found = record.getFields( '650' ) - self.assertEqual( found[0], subject1, 'getFields() item 1' ) - self.assertEqual( found[0], subject1, 'getFields() item 2' ) - found = record.getFields() - self.assertEqual(len(found), 2, 'getFields() with no tag') - - def testMultiFind( self ): - record = Record() - subject1 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Programming Language' ] ) - record.addField( subject1 ) - subject2 = Field( - tag = '651', - indicators = [ '', '0' ], - data = [ 'a', 'Object Oriented' ] ) - record.addField( subject2 ) - found = record.getFields( '650', '651' ) - self.assertEquals( len(found), 2 ) - - def testBadLeader( self ): - record = Record() - self.failUnlessRaises( RecordLeaderInvalid, - record.decodeMARC, 'foo' ) - - def testBadBaseAddress( self ): - record = Record() - self.failUnlessRaises( BaseAddressInvalid, - record.decodeMARC, '00695cam 2200241Ia 45x00' ) - - def testTitle( self ): - record = Record() - self.assertEquals( record.title(), None ) - record.addField( Field( '245', [0,1], - subfields=[ 'a', "Foo :", 'b', 'bar' ] ) ) - self.assertEquals( record.title(), 'Foo :bar' ) - - record = Record() - record.addField( Field( '245', [0,1], - subfields=[ 'a', "Farghin" ] ) ) - self.assertEquals( record.title(), "Farghin" ) - - def testISBN( self ): - record = Record() - self.assertEquals( record.isbn(), None ) - record.addField( Field( '020', [0,1], subfields=['a', '123456789' ] ) ) - self.assertEquals( record.isbn(), '123456789' ) - - -def suite(): - suite = unittest.makeSuite( RecordTest, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - - diff --git a/tags/rel-0.9/test/test.dat b/tags/rel-0.9/test/test.dat deleted file mode 100644 index 68d6dad..0000000 --- a/tags/rel-0.9/test/test.dat +++ /dev/null @@ -1 +0,0 @@ -00755cam 22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500fol05731351 IMchF20000613133448.0000107s2000 nyua 001 0 eng  a 00020737  a0471383147 (paper/cd-rom : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P22bM33 200000a005.13/32211 aMartinsson, Tobias,d1976-10aActivePerl with ASP and ADO /cTobias Martinsson. aNew York :bJohn Wiley & Sons,c2000. axxi, 289 p. :bill. ;c23 cm. +e1 computer laser disc (4 3/4 in.) a"Wiley Computer Publishing." 0aPerl (Computer program language)00aActive server pages.00aActiveX.00647pam 2200241 a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001500161100002600176245006700202260003800269263000900307300001100316650003700327650002500364700001600389fol05754809 IMchF20000601115601.0000203s2000 mau 001 0 eng  a 00022023  a1565926994 aDLCcDLCdDLC apcc00aQA76.73.P22bD47 200000a005.742211 aDescartes, Alligator.10aProgramming the Perl DBI /cAlligator Descartes and Tim Bunce. aCmabridge, MA :bO'Reilly,c2000. a1111 ap. cm. 0aPerl (Computer program language) 0aDatabase management.1 aBunce, Tim.00605cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077040001800094042000800112050002700120082001700147100002100164245005500185260004500240300002600285504005100311650003700362fol05843555 IMchF20000525142739.0000318s1999 cau b 001 0 eng  a 00501349  aDLCcDLCdDLC apcc00aQA76.73.P22bB763 199900a005.13/32211 aBrown, Martin C.10aPerl :bprogrammer's reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axix, 380 p. ;c22 cm. aIncludes bibliographical references and index. 0aPerl (Computer program language)00579cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002700135082001700162100002100179245005500200260004500255300003600300650003700336fol05843579 IMchF20000525142716.0000318s1999 caua 001 0 eng  a 00502116  a0072120002 aDLCcDLCdDLC apcc00aQA76.73.P22bB762 199900a005.13/32211 aBrown, Martin C.10aPerl :bthe complete reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axxxv, 1179 p. :bill. ;c24 cm. 0aPerl (Computer program language)00801nam 22002778a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001800156100002000174245008800194250003200282260004100314263000900355300001100364650003700375650003600412650002600448700002500474700002400499fol05848297 IMchF20000524125727.0000518s2000 mau 001 0 eng  a 00041664  a1565924193 aDLCcDLC apcc00aQA76.73.P22bG84 200000a005.2/7622211 aGuelich, Scott.10aCGI programming with Perl /cScott Guelich, Shishir Gundavaram & Gunther Birznieks. a2nd ed., expanded & updated aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language) 0aCGI (Computer network protocol) 0aInternet programming.1 aGundavaram, Shishir.1 aBirznieks, Gunther.00665nam 22002298a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002700130082001700157111005200174245008600226250001200312260004100324263000900365300001100374650005000385fol05865950 IMchF20000615103017.0000612s2000 mau 100 0 eng  a 00055759  a0596000138 aDLCcDLC apcc00aQA76.73.P22bP475 200000a005.13/32212 aPerl Conference 4.0d(2000 :cMonterey, Calif.)10aProceedings of the Perl Conference 4.0 :bJuly 17-20, 2000, Monterey, California. a1st ed. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)vCongresses.00579nam 22002178a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100002800173245006200201260004100263263000900304300001100313650003700324fol05865956 IMchF20000615102948.0000612s2000 mau 000 0 eng  a 00055770  a1565926099 aDLCcDLC apcc00aQA76.73.P22bB43 200000a005.13/32211 aBlank-Edelman, David N.10aPerl for system administration /cDavid N. Blank-Edelman. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)00661nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100001700173245006700190250001200257260004100269263000900310300001100319650003700330700002300367700001700390fol05865967 IMchF20000615102611.0000614s2000 mau 000 0 eng  a 00055799  a0596000278 aDLCcDLC apcc00aQA76.73.P22bW35 200000a005.13/32211 aWall, Larry.10aProgramming Perl /cLarry Wall, Tom Christiansen & Jon Orwant. a3rd ed. aCambridge, Mass. :bO'Reilly,c2000. a0007 ap. cm. 0aPerl (Computer program language)1 aChristiansen, Tom.1 aOrwant, Jon.00603cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001700161100003200178245006000210260005700270300003300327650003700360fol05872355 IMchF20000706095105.0000315s1999 njua 001 0 eng  a 00500678  a013020868X aDLCcDLCdDLC apcc00aQA76.73.P22bL69 199900a005.13/32211 aLowe, Vincentq(Vincent D.)10aPerl programmer's interactive workbook /cVincent Lowe. aUpper Saddle River, NJ :bPrentice Hall PTP,cc1999. axx, 633 p. :bill. ;c23 cm. 0aPerl (Computer program language)00696nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020002800094040001300122042000800135050002600143082001700169100002600186245004400212260005100256263000900307300001100316500002000327650003700347650001700384650004100401fol05882032 IMchF20000707091904.0000630s2000 cau 001 0 eng  a 00058174  a0764547291 (alk. paper) aDLCcDLC apcc00aQA76.73.P22bF64 200000a005.13/32212 aFoster-Johnson, Eric.10aCross-platform Perl /cEric F. Johnson. aFoster City, CA :bIDG Books Worldwide,c2000. a0009 ap. cm. aIncludes index. 0aPerl (Computer program language) 0aWeb servers. 0aCross-platform software development. \ No newline at end of file diff --git a/tags/rel-0.9/test/util.py b/tags/rel-0.9/test/util.py deleted file mode 100644 index 7ade343..0000000 --- a/tags/rel-0.9/test/util.py +++ /dev/null @@ -1,4 +0,0 @@ -import sys -sys.path.append( '../pymarc' ); - - diff --git a/tags/rel-0.9/test/writer.py b/tags/rel-0.9/test/writer.py deleted file mode 100644 index 98b68d0..0000000 --- a/tags/rel-0.9/test/writer.py +++ /dev/null @@ -1,31 +0,0 @@ -import util -import unittest -import pymarc -import re -import os - -class MARCWriterTest(unittest.TestCase): - - def testWrite(self): - - # write a record off to a file - writer = pymarc.MARCWriter(file('test/writer-test.dat','w')) - record = pymarc.Record() - field = pymarc.Field('245', ['0','0'], ['a', 'foo']) - record.addField(field) - writer.write(record) - writer.close() - - # read it back in - reader = pymarc.MARCReader(file('test/writer-test.dat')) - record = reader.next() - - # remove it - os.remove('test/writer-test.dat') - -def suite(): - suite = unittest.makeSuite(MARCWriterTest, 'test') - return suite - -if __name__ == "__main__": - unittest.main() diff --git a/tags/rel-1.1/Changes b/tags/rel-1.1/Changes deleted file mode 100644 index dd08b0d..0000000 --- a/tags/rel-1.1/Changes +++ /dev/null @@ -1,80 +0,0 @@ -v1.0 Wed Jul 18 14:55:19 EDT 2007 - - added marc8_to_unicode() support for applications that need to - convert marc8 data to unicode ... many thanks for Aaron Lav - for allowing relevant bits of code to be lifted from PyZ3950; - also thanks to Mark Matienzo for the idea and for testing. - - added some tests for new marc8_to_unicode functionality. Thanks - to the Library of Congress for providing equivalent marc8 and - utf8 marc record batches to use for constructing test data - - The folowing changes are courtesy of Mark Matienzo: - - modified __str__ methods for Field and Record to produce - data in MARCMaker [1] format. THIS MAY BREAK YOUR CODE. This is - not a complete implementation as support for special character - mnemonics [2] has yet to be added - - modified test cases for string conversion and added tests for - control fields - - added formatField() and isSubjectField() methods to Field and - the author(), uniformtitle(), subjects(), addedentries(), - and location() methods to Record, and tests for those methods - - [1] http://www.loc.gov/marc/makrbrkr.html - [2] http://www.loc.gov/marc/mnemonics.html - -v0.9 Tue Apr 10 21:54:02 EDT 2007 - - various simplifications and pythonifications (thanks Dan Chudnov) - - added easy_install support - -v0.85 Fri Feb 3 13:08:35 EST 2006 - - added default leader template for when records are created - from scratch (thanks Kurt Nordstrom) - -v0.81 Mon Jan 30 16:33:36 EST 2006 - - getFields() wasn't returning all the fields when no tag - was passed in. - -v0.8 Mon Jan 30 07:05:36 CST 2006 - - added the ability to read raw marc from strings THIS MAY BREAK - YOUR CODE. pymarc no longer supports passing file paths to the - MARCReader constructor. You need to simply change: - - reader = MARCReader('marc.dat') - - to: - - reader = MARCReader(file('marc.dat')) - - Thanks to Daniel Hoth for suggesting this. It just makes sense to - be able to pass in MARC that you got from a Z39.50 network connection - or database, etc. - -v0.7 Mon Jan 23 15:08:55 EST 2006 - - added addSubfield() to Subfield (thanks Kurt Nordstrom) - -v0.6 Tue Nov 29 20:48:31 CST 2005 - - fixed test suite to run under the unittest that ships with python2.3 - - allow non-integer field tags - - fixed MARCWriter and added test (thanks Mikel Larreategi) - -v0.5 Thu Feb 10 10:01:12 CST 2005 - - handle empty subfields - -v0.4 Wed Feb 2 22:29:33 CST 2005 - - fixed directory validation: thanks Aaron Lav - - added iterator for pymarc.Field for iterating through subfields - - added pymarc.Field.value() for getting a field value easily - -v0.3 Wed Jan 5 17:03:37 CST 2005 - - changed mind about accessors (again): - removed getField() must use getFields() - renamed subfield() to getSubfields() and have it return a list - - added doctest support to pymarc/__init__.py - - added a test batch file of python data - -v0.2 Tue Jan 4 21:01:22 CST 2005 - - removed getField() and renamed getFields() to find() - -v0.11 Mon Jan 3 20:42:19 CST 2005 - - fixed test suite execution - -v0.1 Wed Dec 29 19:54:23 CST 2004 - - initial release diff --git a/tags/rel-1.1/MANIFEST.in b/tags/rel-1.1/MANIFEST.in deleted file mode 100644 index 591cc6d..0000000 --- a/tags/rel-1.1/MANIFEST.in +++ /dev/null @@ -1,3 +0,0 @@ -global-include *.py *.dat -include README MANIFEST.in - diff --git a/tags/rel-1.1/README b/tags/rel-1.1/README deleted file mode 100644 index b5860af..0000000 --- a/tags/rel-1.1/README +++ /dev/null @@ -1,29 +0,0 @@ -DESCRIPTION ------------ - -pymarc is a python library for working with MARC21 bibliographic data -loosely based on the MARC/Perl suite of modules (http://marcpm.sf.net). -More about pymarc can be found at: http://www.textualize.com/pymarc - -INSTALLATION ------------- - -Run the pymarc test suite to make sure things are in order with the -distribution: - - python test.py - -And then install: - - python setup.py install - -For typical usage of this library look at the documentation in -pymarc/__init__.py or at the unittests found in the test directory. - -TODO ----- - -- marcxml support - -LICENSE: BSD -AUTHOR: Ed Summers diff --git a/tags/rel-1.1/ez_setup.py b/tags/rel-1.1/ez_setup.py deleted file mode 100644 index 38c09c6..0000000 --- a/tags/rel-1.1/ez_setup.py +++ /dev/null @@ -1,228 +0,0 @@ -#!python -"""Bootstrap setuptools installation - -If you want to use setuptools in your package's setup.py, just include this -file in the same directory with it, and add this to the top of your setup.py:: - - from ez_setup import use_setuptools - use_setuptools() - -If you want to require a specific version of setuptools, set a download -mirror, or use an alternate download directory, you can do so by supplying -the appropriate options to ``use_setuptools()``. - -This file can also be run as a script to install or upgrade setuptools. -""" -import sys -DEFAULT_VERSION = "0.6c5" -DEFAULT_URL = "http://cheeseshop.python.org/packages/%s/s/setuptools/" % sys.version[:3] - -md5_data = { - 'setuptools-0.6b1-py2.3.egg': '8822caf901250d848b996b7f25c6e6ca', - 'setuptools-0.6b1-py2.4.egg': 'b79a8a403e4502fbb85ee3f1941735cb', - 'setuptools-0.6b2-py2.3.egg': '5657759d8a6d8fc44070a9d07272d99b', - 'setuptools-0.6b2-py2.4.egg': '4996a8d169d2be661fa32a6e52e4f82a', - 'setuptools-0.6b3-py2.3.egg': 'bb31c0fc7399a63579975cad9f5a0618', - 'setuptools-0.6b3-py2.4.egg': '38a8c6b3d6ecd22247f179f7da669fac', - 'setuptools-0.6b4-py2.3.egg': '62045a24ed4e1ebc77fe039aa4e6f7e5', - 'setuptools-0.6b4-py2.4.egg': '4cb2a185d228dacffb2d17f103b3b1c4', - 'setuptools-0.6c1-py2.3.egg': 'b3f2b5539d65cb7f74ad79127f1a908c', - 'setuptools-0.6c1-py2.4.egg': 'b45adeda0667d2d2ffe14009364f2a4b', - 'setuptools-0.6c2-py2.3.egg': 'f0064bf6aa2b7d0f3ba0b43f20817c27', - 'setuptools-0.6c2-py2.4.egg': '616192eec35f47e8ea16cd6a122b7277', - 'setuptools-0.6c3-py2.3.egg': 'f181fa125dfe85a259c9cd6f1d7b78fa', - 'setuptools-0.6c3-py2.4.egg': 'e0ed74682c998bfb73bf803a50e7b71e', - 'setuptools-0.6c3-py2.5.egg': 'abef16fdd61955514841c7c6bd98965e', - 'setuptools-0.6c4-py2.3.egg': 'b0b9131acab32022bfac7f44c5d7971f', - 'setuptools-0.6c4-py2.4.egg': '2a1f9656d4fbf3c97bf946c0a124e6e2', - 'setuptools-0.6c4-py2.5.egg': '8f5a052e32cdb9c72bcf4b5526f28afc', - 'setuptools-0.6c5-py2.3.egg': 'ee9fd80965da04f2f3e6b3576e9d8167', - 'setuptools-0.6c5-py2.4.egg': 'afe2adf1c01701ee841761f5bcd8aa64', - 'setuptools-0.6c5-py2.5.egg': 'a8d3f61494ccaa8714dfed37bccd3d5d', -} - -import sys, os - -def _validate_md5(egg_name, data): - if egg_name in md5_data: - from md5 import md5 - digest = md5(data).hexdigest() - if digest != md5_data[egg_name]: - print >>sys.stderr, ( - "md5 validation of %s failed! (Possible download problem?)" - % egg_name - ) - sys.exit(2) - return data - - -def use_setuptools( - version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, - download_delay=15 -): - """Automatically find/download setuptools and make it available on sys.path - - `version` should be a valid setuptools version number that is available - as an egg for download under the `download_base` URL (which should end with - a '/'). `to_dir` is the directory where setuptools will be downloaded, if - it is not already available. If `download_delay` is specified, it should - be the number of seconds that will be paused before initiating a download, - should one be required. If an older version of setuptools is installed, - this routine will print a message to ``sys.stderr`` and raise SystemExit in - an attempt to abort the calling script. - """ - try: - import setuptools - if setuptools.__version__ == '0.0.1': - print >>sys.stderr, ( - "You have an obsolete version of setuptools installed. Please\n" - "remove it from your system entirely before rerunning this script." - ) - sys.exit(2) - except ImportError: - egg = download_setuptools(version, download_base, to_dir, download_delay) - sys.path.insert(0, egg) - import setuptools; setuptools.bootstrap_install_from = egg - - import pkg_resources - try: - pkg_resources.require("setuptools>="+version) - - except pkg_resources.VersionConflict, e: - # XXX could we install in a subprocess here? - print >>sys.stderr, ( - "The required version of setuptools (>=%s) is not available, and\n" - "can't be installed while this script is running. Please install\n" - " a more recent version first.\n\n(Currently using %r)" - ) % (version, e.args[0]) - sys.exit(2) - -def download_setuptools( - version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, - delay = 15 -): - """Download setuptools from a specified location and return its filename - - `version` should be a valid setuptools version number that is available - as an egg for download under the `download_base` URL (which should end - with a '/'). `to_dir` is the directory where the egg will be downloaded. - `delay` is the number of seconds to pause before an actual download attempt. - """ - import urllib2, shutil - egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3]) - url = download_base + egg_name - saveto = os.path.join(to_dir, egg_name) - src = dst = None - if not os.path.exists(saveto): # Avoid repeated downloads - try: - from distutils import log - if delay: - log.warn(""" ---------------------------------------------------------------------------- -This script requires setuptools version %s to run (even to display -help). I will attempt to download it for you (from -%s), but -you may need to enable firewall access for this script first. -I will start the download in %d seconds. - -(Note: if this machine does not have network access, please obtain the file - - %s - -and place it in this directory before rerunning this script.) ----------------------------------------------------------------------------""", - version, download_base, delay, url - ); from time import sleep; sleep(delay) - log.warn("Downloading %s", url) - src = urllib2.urlopen(url) - # Read/write all in one block, so we don't create a corrupt file - # if the download is interrupted. - data = _validate_md5(egg_name, src.read()) - dst = open(saveto,"wb"); dst.write(data) - finally: - if src: src.close() - if dst: dst.close() - return os.path.realpath(saveto) - -def main(argv, version=DEFAULT_VERSION): - """Install or upgrade setuptools and EasyInstall""" - - try: - import setuptools - except ImportError: - egg = None - try: - egg = download_setuptools(version, delay=0) - sys.path.insert(0,egg) - from setuptools.command.easy_install import main - return main(list(argv)+[egg]) # we're done here - finally: - if egg and os.path.exists(egg): - os.unlink(egg) - else: - if setuptools.__version__ == '0.0.1': - # tell the user to uninstall obsolete version - use_setuptools(version) - - req = "setuptools>="+version - import pkg_resources - try: - pkg_resources.require(req) - except pkg_resources.VersionConflict: - try: - from setuptools.command.easy_install import main - except ImportError: - from easy_install import main - main(list(argv)+[download_setuptools(delay=0)]) - sys.exit(0) # try to force an exit - else: - if argv: - from setuptools.command.easy_install import main - main(argv) - else: - print "Setuptools version",version,"or greater has been installed." - print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)' - - - -def update_md5(filenames): - """Update our built-in md5 registry""" - - import re - from md5 import md5 - - for name in filenames: - base = os.path.basename(name) - f = open(name,'rb') - md5_data[base] = md5(f.read()).hexdigest() - f.close() - - data = [" %r: %r,\n" % it for it in md5_data.items()] - data.sort() - repl = "".join(data) - - import inspect - srcfile = inspect.getsourcefile(sys.modules[__name__]) - f = open(srcfile, 'rb'); src = f.read(); f.close() - - match = re.search("\nmd5_data = {\n([^}]+)}", src) - if not match: - print >>sys.stderr, "Internal error!" - sys.exit(2) - - src = src[:match.start(1)] + repl + src[match.end(1):] - f = open(srcfile,'w') - f.write(src) - f.close() - - -if __name__=='__main__': - if len(sys.argv)>2 and sys.argv[1]=='--md5update': - update_md5(sys.argv[2:]) - else: - main(sys.argv[1:]) - - - - - diff --git a/tags/rel-1.1/pymarc/__init__.py b/tags/rel-1.1/pymarc/__init__.py deleted file mode 100644 index 25b59b6..0000000 --- a/tags/rel-1.1/pymarc/__init__.py +++ /dev/null @@ -1,72 +0,0 @@ -# __init__.py - -r''' - -The pymarc module provides an API for reading, writing and modifying -MARC records. MARC (MAchine Readable Cataloging) is a metadata format for -bibliographic data. More about MARC can be found at the Library of Congress: -http://lcweb.loc.gov/marc - -Below are some common examples of how you might want to use pymarc. If you -run across an example that you think should be here please contribute it -by writing to the author. - -1. Reading a batch of records and printing out the 245 subfield a. If you - are curious this example uses the batch file available in the distribution. - - >>> from pymarc import MARCReader - >>> reader = MARCReader( 'test/marc.dat' ) - >>> for record in reader: - ... print record['245']['a'] - The pragmatic programmer : - Programming Python / - Learning Python / - Python cookbook / - Python programming for the absolute beginner / - Web programming : - Python programming on Win32 / - Python programming : - Python Web programming / - Core python programming / - Python and Tkinter programming / - Game programming with Python, Lua, and Ruby / - Python programming patterns / - Python programming with the Java class libraries : - Learn to program using Python : - Programming with Python / - BSD Sockets programming from a multi-language perspective / - Design patterns : - Introduction to algorithms / - ANSI Common Lisp / - -2. Creating a record and writing it out to a file. - - >>> from pymarc import Record, Field - >>> record = Record() - >>> record.addField( \ - ... Field( \ - ... tag = '245', - ... indicators = ['0','1'], - ... subfields = [ \ - ... 'a', 'The pragmatic programmer : ', - ... 'b', 'from journeyman to master /', - ... 'c', 'Andrew Hunt, David Thomas.' ] ) ) - >>> out = file( 'file.dat', 'w' ) - >>> out.write( record.asMARC21() ) - -''' - -__version__ = '1.0' - -from record import * -from field import * -from exceptions import * -from reader import * -from writer import * -from constants import * -from marc8 import marc8_to_unicode - -if __name__ == "__main__": - import doctest - doctest.testmod() - diff --git a/tags/rel-1.1/pymarc/constants.py b/tags/rel-1.1/pymarc/constants.py deleted file mode 100644 index bd148c2..0000000 --- a/tags/rel-1.1/pymarc/constants.py +++ /dev/null @@ -1,7 +0,0 @@ -LEADER_LEN = 24 -DIRECTORY_ENTRY_LEN = 12 -SUBFIELD_INDICATOR = chr( 0x1F ) -END_OF_FIELD = chr( 0x1E ) -END_OF_RECORD = chr( 0x1D ) - - diff --git a/tags/rel-1.1/pymarc/exceptions.py b/tags/rel-1.1/pymarc/exceptions.py deleted file mode 100644 index 4be03df..0000000 --- a/tags/rel-1.1/pymarc/exceptions.py +++ /dev/null @@ -1,30 +0,0 @@ -class pymarcException( Exception ): - pass - -class RecordLengthInvalid( pymarcException): - def __str__( self ): - return( "Invalid record length in first 5 bytes of record" ) - -class RecordLeaderInvalid( pymarcException ): - def __str__ ( self ): - return "Unable to extract record leader" - -class RecordDirectoryInvalid( pymarcException ): - def __str__( self ): - return "Invalid directory" - -class NoFieldsFound( pymarcException ): - def __str__ ( self ): - return "Unable to locate fields in record data" - -class BaseAddressInvalid( pymarcException ): - def __str__ ( self ): - return "Base address exceeds size of record" - -class WriteNeedsRecord( pymarcException ): - def __str__( self ): - return "Write requires a pymarc.Record object as an argument" - -class NoActiveFile( pymarcException ): - def __str__( self ): - return "There is no active file to write to in call to write" diff --git a/tags/rel-1.1/pymarc/field.py b/tags/rel-1.1/pymarc/field.py deleted file mode 100644 index 7e52d81..0000000 --- a/tags/rel-1.1/pymarc/field.py +++ /dev/null @@ -1,162 +0,0 @@ -from constants import * -from exceptions import * - -class Field( object ): - - def __init__( self, tag, indicators=[], subfields=[], data='' ): - """ - Field() pass in the field tag, indicators and subfields for the tag. - - field = Field( \ - tag = '245', - indicators = ['0','1'], - subfields = [ \ - 'a', 'The pragmatic programmer : ', - 'b', 'from journeyman to master /', - 'c', 'Andrew Hunt, David Thomas.' ] - - If you want to create a control field you don't pas in the indicators - and use a data parameter rather than a subfields parameter: - - field = Field( tag='001', data='fol05731351' ) - - """ - tag = "%03s" % tag - if ( tag < '010' ): - self.tag = tag - self.data = data - else: - self.tag = tag - self.indicators = indicators - self.indicator1 = indicators[0] - self.indicator2 = indicators[1] - self.subfields = subfields - - def __iter__(self): - self.__pos = 0 - return self - - def __str__( self ): - """ - A Field object in a string context will return the tag, indicators - and subfield as a string. This follows MARCMaker format; see [1] - and [2] for further reference. Special character mnemonic strings - have yet to be implemented (see [3]), so be forewarned. Note also - for complete MARCMaker compatibility, you will need to change your - newlines to DOS format ('\r\n'). - - [1] http://www.loc.gov/marc/makrbrkr.html#mechanics - [2] http://search.cpan.org/~eijabb/MARC-File-MARCMaker/ - [3] http://www.loc.gov/marc/mnemonics.html - """ - if ( self.isControlField() ): - text = "=%s %s" % ( self.tag, self.data.replace(' ','\\') ) - else: - text = "=%s " % ( self.tag ) - for indicator in self.indicators: - if indicator in (' ','\\'): - text += "\\" - else: - text += "%s" % indicator - for subfield in self: - text += ("$%s%s" % subfield) - return text - - def __getitem__( self, subfield ): - """ - Retrieve the first subfield with a given subfield code in a field: - - field['a'] - - Handy for quick lookups. - """ - subfields = self.getSubfields( subfield ) - if len(subfields) > 0: return subfields[0] - return None - - def next( self ): - while self.__pos < len(self.subfields): - subfield = ( self.subfields[ self.__pos ], \ - self.subfields[ self.__pos+1 ] ) - self.__pos += 2 - return subfield - raise StopIteration - - def value( self ): - """ - Returns the field as a string without tag, indicators, and - subfield indicators. - """ - if self.isControlField(): - return self.data - string = "" - for subfield in self: - string += subfield[1] - return string - - def getSubfields( self, *codes ): - """ - getSubfields() accepts one or more subfield codes and will return a list - of subfield values. The order of the subfield values in the list - will be the order that they appear in the field. - - print field.getSubfields( 'a' ) - - print field.getSubfields( 'a', 'b', 'z' ) - """ - values = [] - for subfield in self: - if subfield[0] in codes: - values.append( subfield[1] ) - return values - - def addSubfield( self, code, value ): - """ - Adds a subfield code/value pair to the field. - - field.addSubfield('u', 'http://www.loc.gov') - """ - self.subfields.append(code) - self.subfields.append(value) - - def isControlField( self ): - """ - returns true or false if the field is considered a control field. - Control fields lack indicators and subfields. - """ - if self.tag < '010': - return True - return False - - def asMARC21( self ): - """ - used during conversion of a field to raw marc - """ - if self.isControlField(): - return self.data + END_OF_FIELD - marc = str(self.indicator1) + str(self.indicator2) - for subfield in self: - marc += SUBFIELD_INDICATOR + subfield[0] + subfield[1] - return marc + END_OF_FIELD - - def formatField( self ): - """ - Returns the field as a string without tag, indicators, and subfield indicators. Like pymarc.Field.value(), but prettier (adds spaces, formats subject headings). - """ - if self.isControlField(): return self.data - fielddata = '' - for subfield in self: - if not self.isSubjectField(): - fielddata += ' %s' % subfield[1] - else: - if subfield[0] not in ('v','x','y','z'): - fielddata += ' %s' % subfield[1] - else: fielddata += ' -- %s' % subfield[1] - return fielddata.strip() - - def isSubjectField( self ): - """ - returns True or False if the field is considered a subject field - used by formatField - """ - if self.tag.startswith('6'): return True - return False diff --git a/tags/rel-1.1/pymarc/marc8.py b/tags/rel-1.1/pymarc/marc8.py deleted file mode 100644 index cb1c894..0000000 --- a/tags/rel-1.1/pymarc/marc8.py +++ /dev/null @@ -1,101 +0,0 @@ -# see http://www.loc.gov/marc/specifications/speccharmarc8.html - -import unicodedata -import marc8_mapping - -def marc8_to_unicode(marc8): - converter = MARC8_to_Unicode() - return converter.translate(marc8) - -class MARC8_to_Unicode: - """Converts MARC-8 to Unicode. Note that currently, unicode strings - aren't normalized, and some codecs (e.g. iso8859-1) will fail on - such strings. When I can require python 2.3, this will go away. - - Warning: MARC-8 EACC (East Asian characters) makes some - distinctions which aren't captured in Unicode. The LC tables give - the option of mapping such characters either to a Unicode private - use area, or a substitute character which (usually) gives the - sense. I've picked the second, so this means that the MARC data - should be treated as primary and the Unicode data used for display - purposes only. (If you know of either of fonts designed for use - with LC's private-use Unicode assignments, or of attempts to - standardize Unicode characters to allow round-trips from EACC, - or if you need the private-use Unicode character translations, - please inform me, asl2@pobox.com.""" - - basic_latin = 0x42 - ansel = 0x45 - def __init__ (self, G0 = basic_latin, G1 = ansel): - self.g0 = G0 - self.g1 = G1 - - def is_multibyte (self, charset): - return charset == 0x31 - - g0_set = set(['(', ',', '$']) - g1_set = set([')', '-', '$']) - - def translate (self, s): - uni_list = [] - combinings = [] - pos = 0 - while pos < len (s): -## http://www.loc.gov/marc/specifications/speccharmarc8.html - if s[pos] == '\x1b': - next = s[pos+1] - if (next in self.g0_set): - if s[pos+2] == ',' and next == '$': - pos += 1 - self.g0 = ord(s[pos+2]) - pos = pos + 3 - continue - elif next in self.g1_set: - if s[pos+2] == '-' and next == '$': - pos += 1 - self.g1 = ord(s[pos+2]) - pos = pos + 3 - continue - - mb_flag = self.is_multibyte(self.g0) - - if mb_flag: - d = (ord (s[pos]) * 65536 + - ord (s[pos+1]) * 256 + - ord (s[pos+2])) - pos += 3 - else: - d = ord (s[pos]) - pos += 1 - - if (d < 0x20 or - (d > 0x80 and d < 0xa0)): - uni = unichr (d) - continue - - try: - if d > 0x80 and not mb_flag: - (uni, cflag) = marc8_mapping.codesets [self.g1] [d] - else: - (uni, cflag) = marc8_mapping.codesets [self.g0] [d] - except KeyError, e: - print "couldn't find", self.g0, self.g1, d, str(e) - uni = ord(' ') - cflag = False - - if cflag: - combinings.append (unichr (uni)) - else: - uni_list.append (unichr (uni)) - if len (combinings) > 0: - uni_list += combinings - combinings = [] - - # what to do if combining chars left over? - uni_str = u"".join (uni_list) - - # unicodedata.normalize not available until Python 2.3 - if hasattr (unicodedata, 'normalize'): - uni_str = unicodedata.normalize ('NFC', uni_str) - - return uni_str diff --git a/tags/rel-1.1/pymarc/marc8_mapping.py b/tags/rel-1.1/pymarc/marc8_mapping.py deleted file mode 100644 index e69de29..0000000 diff --git a/tags/rel-1.1/pymarc/reader.py b/tags/rel-1.1/pymarc/reader.py deleted file mode 100644 index 8258868..0000000 --- a/tags/rel-1.1/pymarc/reader.py +++ /dev/null @@ -1,56 +0,0 @@ -from pymarc import Record, Field -from constants import END_OF_RECORD -from exceptions import * -from types import * -from cStringIO import StringIO - -class Reader( object ): - """ - A base class for all iterating readers in the pymarc package. - """ - def __iter__( self ): - return self - -class MARCReader( Reader ): - """ - An iterator class for reading a file of MARC21 records. - - Simple usage: - - from pymarc import MARCReader - - ## pass in a file object - reader = MARCReader(file('file.dat')) - for record in reader: - ... - - ## pass in marc in transmission format - reader = MARCReader(rawmarc) - for record in reader: - ... - - """ - - def __init__(self, f): - """ - The constructor which you can pass either raw marc or a file object. - """ - if (type(f) == FileType): self.fh = f - else: self.fh = StringIO(f) - - def next( self ): - """ - To support iteration. - """ - first5 = self.fh.read( 5 ) - if not first5: - raise StopIteration - if len( first5 ) < 5: - raise RecordLengthInvalid - - length = int( first5 ) - chunk = self.fh.read( length - 5 ) - chunk = first5 + chunk - r = Record( chunk ) - return r - diff --git a/tags/rel-1.1/pymarc/record.py b/tags/rel-1.1/pymarc/record.py deleted file mode 100644 index 92062bb..0000000 --- a/tags/rel-1.1/pymarc/record.py +++ /dev/null @@ -1,289 +0,0 @@ -from exceptions import * -from constants import * -from field import * -from types import * -import string -import re - - -class Record( object ): - """ - Record - - A class for representing a MARC record. Each Record object is made up of - multiple Field objects. You'll probably want to look at the docs for Field - to see how to fully use a Record object. - - Basic usage: - - field = Field( \ - tag = '245', - indicators = ['0','1'], - subfields = [ \ - 'a', 'The pragmatic programmer : ', - 'b', 'from journeyman to master /', - 'c', 'Andrew Hunt, David Thomas.' ] - - record.addField( field ) - - Or creating a record from a chunk of MARC in transmission format: - - record = Record( data=chunk ) - - Or getting a record as serialized MARC21. - - raw = record.asMARC21() - - You'll normally want to use a MARCReader object to iterate through - MARC records in a file. - """ - - def __init__( self, data='' ): - self.leader = (' '*10) + '22' + (' '*8) + '4500' - self.fields = list() - self.pos = 0 - if len(data) > 0: - ok = self.decodeMARC( data ) - - def __str__( self ): - """ - In a string context a Record object will return a prettified version - of the record in MARCMaker format. See the docstring for Field.__str__ - for more information. - """ - # join is significantly faster than concatenation - text = "=LDR %s\n" % self.leader - text += string.join( map( str, self.fields ), "\n" ) - text += '\n' - return text - - def __getitem__( self, tag ): - """ - Allows a shorthand lookup by tag: - - record["245"] - - """ - fields = self.getFields( tag ) - if len(fields) > 0: return fields[0] - return None - - def __iter__( self ): - self.__pos = 0 - return self - - def next(self): - if self.__pos >= len( self.fields ): - raise StopIteration - self.__pos += 1 - return self.fields[ self.__pos-1 ] - - def addField( self, *fields ): - """ - addField() will add pymarc.Field objects to a Record object. - Optionally you can pass in multiple fields. - """ - self.fields.extend(fields) - - def getFields( self, *args ): - """ - When passed a tag ( '245' ) getFields() will return a list of all the - fields in a record with a given tag. - - title = record.getFields( '245' ) - - If no fields with the specified - tag are found then an empty list is returned. If you are interested - in more than one tag you can pass in a list: - - subjects = record.getFields( '600', '610', '650' ) - - If no tag is passed in to fields() a list of all the fields will be - returned. - """ - if (len(args) == 0): - return self.fields - - return [f for f in self.fields if f.tag in args] - - def decodeMARC( self, marc ): - """ - decodeMARC() accepts a MARC record in transmission format as a - a string argument, and will populate the object based on the data - found. The Record constructor actually uses decodeMARC() behind - the scenes when you pass in a chunk of MARC data to it. - - """ - - # extract record leader - self.leader = marc[ 0 : LEADER_LEN ] - if len( self.leader ) != LEADER_LEN: raise RecordLeaderInvalid - - # extract the byte offset where the record data starts - baseAddress = int( marc[ 12 : 17 ] ) - if baseAddress <= 0: raise BaseAddressNotFound - if baseAddress >= len( marc ): raise BaseAddressInvalid - - # extract directory, baseAddress-1 is used since the - # director ends with an END_OF_FIELD byte - directory = marc[ LEADER_LEN : baseAddress-1 ] - - # determine the number of fields in record - if len(directory) % DIRECTORY_ENTRY_LEN <> 0: - raise RecordDirectoryInvalid - numFields = len( directory ) / DIRECTORY_ENTRY_LEN - - # add fields to our record using directory offsets - fieldNum = 0 - while ( fieldNum < numFields ): - entryStart = fieldNum * DIRECTORY_ENTRY_LEN - entryEnd = entryStart + DIRECTORY_ENTRY_LEN - entry = directory[ entryStart : entryEnd ] - entryTag = entry[ 0 : 3 ] - entryLength = int( entry[ 3 : 7 ] ) - entryOffset = int( entry[ 7 : 12 ] ) - entryData = marc[ baseAddress + entryOffset : - baseAddress + entryOffset + entryLength - 1 ] - - if entryTag < '010': - field = Field( tag=entryTag, data=entryData ) - else: - subfields = list() - subs = entryData.split( SUBFIELD_INDICATOR ) - i1 = subs[0][0] - i2 = subs[0][1] - for subfield in subs[1:]: - if len(subfield) == 0: continue - code = subfield[0] - data = subfield[1:] - subfields.append( code ) - subfields.append( data ) - field = Field( - tag = entryTag, - indicators = [ i1, i2 ], - subfields = subfields ) - - self.addField( field ) - fieldNum += 1 - - if fieldNum == 0: raise NoFieldsFound - - def asMARC21( self ): - """ - returns the record serialized as MARC21 - """ - fields = '' - directory = '' - offset = 0 - - # build the directory - # each element of the directory includes the tag, the byte length of - # the field and the offset from the base address where the field data - # can be found - for field in self.fields: - fieldData = field.asMARC21() - fields += fieldData - directory += "%03d%04d%05d" % (int(field.tag),len(fieldData),offset) - offset += len( fieldData ) - - # directory ends with an end of field - directory += END_OF_FIELD - - # field data ends with an end of record - fields += END_OF_RECORD - - # the base address where the directory ends and the field data begins - baseAddress = LEADER_LEN + len(directory) - - # figure out the length of the record - recordLength = baseAddress + len(fields) - - # update the leader with the current record length and base address - # the lengths are fixed width and zero padded - self.leader = "%05d%s%05d%s" % \ - ( recordLength, self.leader[5:12], baseAddress, self.leader[17:] ) - - # return the encoded record - return self.leader + directory + fields - - def title( self ): - """ - Returns the title of the record (245 $a an $b). - """ - title = None - try: - title = self['245']['a'] - title += self['245']['b'] - except TypeError, e: - pass - return title - - def isbn( self ): - """ - Returns an ISBN if appropriate. If not present None will - be returned. - """ - isbn = None - try: - # if anyone ever cares alot about performance - # this compilation could be moved out and compiled once - isbnPattern = re.compile( '^([0-9A-Za-z]+)' ) - isbn = isbnPattern.match( self["020"]["a"] ).group(1) - except Exception, e: - pass - return isbn - - def author( self ): - if self['100']: - return self['100'].formatField() - elif self['110']: - return self['110'].formatField() - elif self['111']: - return self['111'].formatField() - return None - - def uniformtitle( self ): - if self['130']: - return self['130'].formatField() - elif self['240']: - return self['240'].formatField() - return None - - def subjects( self ): - """ - Note: Fields 690-699 are considered "local" added entry fields but - occur with some frequency in OCLC and RLIN records. - """ - subjlist = self.getFields ( - '600', '610', '611', '630', '648', '650', '651', '653', '654', - '655', '656', '657', '658', '662', '690', '691', '696', '697', - '698', '699' - ) - return subjlist - - def addedentries( self ): - """ - Note: Fields 790-799 are considered "local" added entry fields but - occur with some frequency in OCLC and RLIN records. - """ - aelist = self.getFields ( - '700', '710', '711', '720', '730', '740', '752', '753', '754', - '790', '791', '792', '793', '796', '797', '798', '799' - ) - return aelist - - def location( self ): - loc = self.getFields('852') - return loc - - def notes( self ): - # todo - pass - - def publisher( self ): - # todo - pass - - def pubyear( self ): - # todo - pass diff --git a/tags/rel-1.1/pymarc/writer.py b/tags/rel-1.1/pymarc/writer.py deleted file mode 100644 index 23c32ff..0000000 --- a/tags/rel-1.1/pymarc/writer.py +++ /dev/null @@ -1,49 +0,0 @@ -from pymarc import Record, Field, WriteNeedsRecord, NoActiveFile -from types import * -from cStringIO import StringIO - -class Writer( object ): - - def write( self ): - pass - -class MARCWriter( Writer ): - """ - A class for writing MARC21 records in transmission format. - - Simple usage: - - from pymarc import MARCWriter - - ## pass in a file - writer = MARCWriter(file('file.dat','w')) - writer.write(record) - - ## use StringIO if you want to write to a string - string = StringIO() - writer = MARCWriter(string) - writer.write(record) - print string - """ - - def __init__(self, f): - """ - You need to pass in a file like object. - """ - self.fh = f - - def write(self, record): - """ - Writes a record. - """ - if type(record) != Record: - raise WriteNeedsRecord - self.fh.write(record.asMARC21()) - - def close( self ): - """ - Closes the file. - """ - self.fh.close() - self.fh = None - diff --git a/tags/rel-1.1/setup.py b/tags/rel-1.1/setup.py deleted file mode 100644 index 92aebab..0000000 --- a/tags/rel-1.1/setup.py +++ /dev/null @@ -1,39 +0,0 @@ -# bootstrap easy_install -import ez_setup -ez_setup.use_setuptools() - -from setuptools import setup -from sys import version_info - -classifiers = """\ -Intended Audience :: Education -Intended Audience :: Developers -Intended Audience :: Information Technology -License :: OSI Approved :: BSD License -Programming Language :: Python -Topic :: Text Processing :: General -""" - -# workaround for older pythons that don't -# understand classifiers - -if version_info < (2, 3): - _setup = setup - def setup(**kwargs): - if kwargs.has_key("classifiers"): - del kwargs["classifiers"] - _setup(**kwargs) - -setup( - name = 'pymarc', - version = '1.1', - url = 'http://cheeseshop.python.org/pypi/pymarc', - author = 'Ed Summers', - author_email = 'ehs@pobox.com', - license = 'http://www.opensource.org/licenses/bsd-license.php', - packages = [ 'pymarc' ], - description = "read, write and modify MARC bibliographic data", - classifiers = filter( None, classifiers.split("\n") ), - test_suite = 'test' -) - diff --git a/tags/rel-1.1/test.py b/tags/rel-1.1/test.py deleted file mode 100644 index 8ea1517..0000000 --- a/tags/rel-1.1/test.py +++ /dev/null @@ -1,19 +0,0 @@ -import unittest -import test.record -import test.field -import test.reader -import test.encode -import test.writer - -def suite(): - suite = unittest.TestSuite() - suite.addTest( test.record.suite() ) - suite.addTest( test.field.suite() ) - suite.addTest( test.reader.suite() ) - suite.addTest( test.encode.suite() ) - suite.addTest( test.writer.suite() ) - return suite - -runner = unittest.TextTestRunner() -runner.run( suite() ) - diff --git a/tags/rel-1.1/test/bad.dat b/tags/rel-1.1/test/bad.dat deleted file mode 100644 index 4800dc9..0000000 --- a/tags/rel-1.1/test/bad.dat +++ /dev/null @@ -1,191 +0,0 @@ - - Date: 03/15/2007 - - When searching the Florida State University Library catalog, - you sent the following records: - - -FMT BK -LDR 00000nam 2200409Ia 4500 -006 m d -007 cr cnu|||unuuu -008 041015s2004 caua sb s000|0 eng d -020 |a 1417545372 (electronic bk.) -035 |a (OCoLC)56733780 -0359 |a AMR9920 |b FS -TKR |a (Source)B0013464- 321 -TKR |a (FTaSU)NETLIBY20050112 -OWN |a FS -040 |a N$T |c N$T -05014 |a PS1303 |b .S25 2004eb -08204 |a 818/.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24510 |a Mark Twain's helpful hints for good living |h [electronic resource] : |b a handbook for the damned human race / |c edited by Lin Salamo, Victor Fischer, and Michael B. Frank of the Mark Twain Project. -260 |a Berkeley : |b University of California Press, |c c2004. -300 |a xiv, 207 p. : |b ill. |c 21 cm. -4901 |a Jumping frogs ; |v 2 -504 |a Includes bibliographical references (p. 203-206). -533 |a Electronic reproduction. |b Boulder, Colo. : |c NetLibrary, |d 2004. |n Available via World Wide Web. |n Access may be limited to NetLibrary affiliated libraries. -650 0 |a Conduct of life |v Quotations, maxims, etc. -650 0 |a Conduct of life |v Literary collections. -60010 |a Twain, Mark, |d 1835-1910 |v Quotations. -655 7 |a Electronic books. |2 local -7001 |a Salamo, Lin. -7001 |a Fischer, Victor, |d 1942- -7001 |a Frank, Michael B. -7102 |a Bancroft Library. |b Mark Twain Project. -7102 |a NetLibrary, Inc. -7761 |c Original |z 0520242459 |w (DLC) 2003024224 |w (OCoLC)53398020 -8001 |a Twain, Mark, |d 1835-1910. |t Jumping frogs ; |v 2. -85640 |3 Bibliographic record display |u http://www.netLibrary.com/urlapi.asp?action=summary&v=1&bookid=119359 |z An electronic book accessible through the World Wide Web; click for information -CAT |a NCRD |b 20 |c 20041222 -NCO |a I -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST8 |0 HOL |1 FSU60-002387996 |n 8 |a FTaSU |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -LOC8 |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -SYS 002249954 - -FMT BK -LDR 00000pam 2200301 a 4500 -008 040820s2004 nyu b 000|0 eng -010 |a 2004057341 -020 |a 0142437751 -035 |a (OCoLC)56413662 -0359 |a AMS5114 |b FS -TKR |a (Source)ONIFS141- 49 -OWN |a FS -040 |a DLC |c DLC |d YDX |d FDA -049 |a FDAA ksm -05000 |a PS1302 |b .Q56 2004 -08200 |a 818/.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24514 |a The portable Mark Twain / |c edited with an introduction by Tom Quirk. -260 |a New York : |b Penguin Books, |c 2004. -300 |a liv, 583 p. ; |c 20 cm. -440 0 |a Penguin classics -504 |a Includes bibliographical references (p. [xli]-xlv). -60010 |a Twain, Mark, |d 1835-1910 |v Correspondence. -650 0 |a Humorous stories, American. -650 0 |a Authors, American |y 19th century |v Correspondence. -7001 |a Quirk, Tom, |d 1946- -CAT |a NCRD |b 20 |c 20050218 -CAT |a NUPD |b 20 |c 20050324 -NCO |a blank -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST0 |0 Z30 |1 002255004000010 |b FSULC |c GEN |o BOOK |d 01 |f N |r FSU60-002393331 |n 0 |h PS1302 |i .Q56 2004 |3 Book Sort |4 STROZIER LIBRARY |6 Regular Loan -LOC0 |b FSULC |c GEN |o BOOK |h PS1302 |i .Q56 2004 |3 Book Sort |4 STROZIER LIBRARY |6 Regular Loan -SYS 002255004 - -FMT BK -LDR 00000nam 2200361Ia 4500 -006 m d -007 cr cnu|||unuuu -008 031127s2003 cau s 000|i eng d -020 |a 0520900995 (electronic bk.) -035 |a (OCoLC)53798433 -0359 |a ALU9407 |b FS -TKR |a (Source)B0011135- 96 -TKR |a (FTaSU)NETLIBY20040302 -OWN |a FS -040 |a N$T |c N$T -05014 |a PS1331 |b .A4 2003eb -08214 |a 818.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24010 |a Correspondence. |k Selections -24510 |a Mark Twain's letters 1876-1880. |n Volume 2, |p 1877 |h [electronic resource] / |c edited by the Mark Twain Project. -250 |a Electronic ed. -260 |a Berkeley, Calif. : |b Published for the University of California Press by the Mark Twain Project of the Bancroft Library, |c 2003. -538 |a Mode of access: World Wide Web. -506 |a Made available through NetLibrary; access may be limited to NetLibrary affiliated libraries. -500 |a Title from ebook title screen. -60010 |a Twain, Mark, |d 1835-1910 |v Correspondence. -650 0 |a Authors, American |y 19th century |v Correspondence. -650 0 |a Humorists, American |y 19th century |v Correspondence. -655 7 |a Electronic books. |2 local -7102 |a Bancroft Library. |b Mark Twain Project. -7102 |a NetLibrary, Inc. -8564 |3 Bibliographic record display |u http://www.netLibrary.com/urlapi.asp?action=summary&v=1&bookid=100194 |z An electronic book accessible through the World Wide Web; click for information -CAT |a NCRD |b 20 |c 20040224 -NCO |a I -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST8 |0 HOL |1 FSU60-002178151 |n 8 |a FTaSU |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -LOC8 |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -SYS 002042593 - -FMT BK -LDR 00000nam 2200373Ia 4500 -006 m d -007 cr cnu|||unuuu -008 031127s2003 cau s 000|i eng d -020 |a 0520900987 (electronic bk.) -035 |a (OCoLC)53798432 -0359 |a ALU9406 |b FS -TKR |a (Source)B0011135- 95 -TKR |a (FTaSU)NETLIBY20040302 -OWN |a FS -040 |a N$T |c N$T -05014 |a PS1331 |b .A4 2003eb -08214 |a 818.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24010 |a Correspondence. |k Selections -24510 |a Mark Twain's letters 1876-1880. |n Volume 1, |p 1876 |h [electronic resource] / |c edited by the Mark Twain Project. -250 |a Electronic ed. -260 |a Berkeley, Calif. : |b Published for the University of California Press by the Mark Twain Project of the Bancroft Library, |c 2003. -538 |a Mode of access: World Wide Web. -506 |a Made available through NetLibrary; access may be limited to NetLibrary affiliated libraries. -500 |a Title from ebook title screen. -60010 |a Twain, Mark, |d 1835-1910 |v Correspondence. -650 0 |a Authors, American |y 19th century |v Correspondence. -650 0 |a Humorists, American |y 19th century |v Correspondence. -655 7 |a Electronic books. |2 local -7102 |a Bancroft Library. |b Mark Twain Project. -7102 |a NetLibrary, Inc. -7102 |a NetLibrary, Inc. -8564 |3 Bibliographic record display |u http://www.netLibrary.com/urlapi.asp?action=summary&v=1&bookid=100193 |z An electronic book accessible through the World Wide Web; click for information -CAT |a NCRD |b 20 |c 20040224 -NCO |a I -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST8 |0 HOL |1 FSU60-002178150 |n 8 |a FTaSU |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -LOC8 |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -SYS 002042592 - -FMT BK -LDR 00000nam 2200361Ia 4500 -006 m d -007 cr cnu|||unuuu -008 031202s2003 cau s 000|i eng d -020 |a 0520901010 (electronic bk.) -035 |a (OCoLC)53817958 -0359 |a ALU9412 |b FS -TKR |a (Source)B0011135- 101 -TKR |a (FTaSU)NETLIBY20040302 -OWN |a FS -040 |a N$T |c N$T -05014 |a PS1331 |b .A4 2003eb -08214 |a 818.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24010 |a Correspondence. |k Selections -24510 |a Mark Twain's letters 1876-1880. |n Volume 4, |p 1879 |h [electronic resource] / |c edited by the Mark Twain Project. -250 |a Electronic ed. -260 |a Berkeley, Calif. : |b Published for the University of California Press by the Mark Twain Project of the Bancroft Library, |c 2003. -538 |a Mode of access: World Wide Web. -506 |a Made available through NetLibrary; access may be limited to NetLibrary affiliated libraries. -500 |a Title from ebook title screen. -60010 |a Twain, Mark, |d 1835-1910 |v Correspondence. -650 0 |a Authors, American |y 19th century |v Correspondence. -650 0 |a Humorists, American |y 19th century |v Correspondence. -655 7 |a Electronic books. |2 local -7102 |a Bancroft Library. |b Mark Twain Project. -7102 |a NetLibrary, Inc. -8564 |3 Bibliographic record display |u http://www.netLibrary.com/urlapi.asp?action=summary&v=1&bookid=100196 |z An electronic book accessible through the World Wide Web; click for information -CAT |a NCRD |b 20 |c 20040224 -NCO |a I -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST8 |0 HOL |1 FSU60-002178156 |n 8 |a FTaSU |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -LOC8 |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -SYS 002042598 - - - - Florida State University - Library Staff diff --git a/tags/rel-1.1/test/encode.py b/tags/rel-1.1/test/encode.py deleted file mode 100644 index 27e0c76..0000000 --- a/tags/rel-1.1/test/encode.py +++ /dev/null @@ -1,25 +0,0 @@ -import util -from pymarc import MARCReader, Record, Field -import unittest -import os - -class Encode( unittest.TestCase ): - - def test_encode_decode( self ): - # get raw data from file - original = file( 'test/one.dat' ).read() - # create a record object for the file - reader = MARCReader(file('test/one.dat')) - record = reader.next() - # make sure original data is the same as - # the record encoded as MARC - raw = record.asMARC21() - self.assertEqual( original, raw ) - -def suite(): - suite = unittest.makeSuite( Encode, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - diff --git a/tags/rel-1.1/test/field.py b/tags/rel-1.1/test/field.py deleted file mode 100644 index 0642098..0000000 --- a/tags/rel-1.1/test/field.py +++ /dev/null @@ -1,103 +0,0 @@ -import util -import unittest -from pymarc.record import Record, Field - -class FieldTest( unittest.TestCase ): - - def setUp( self ): - self.field = Field( - tag = '245', - indicators = [ 0, 1 ], - subfields = [ - 'a', 'Huckleberry Finn: ', - 'b', 'An American Odyssey' - ] - ) - - self.controlfield = Field( - tag = '008', - data = '831227m19799999nyu ||| | ger ' - ) - - self.subjectfield = Field( - tag = '650', - indicators = [' ', '0'], - subfields = [ - 'a', 'Python (Computer program language)', - 'v', 'Poetry.' - ] - ) - - def test_string( self ): - self.assertEquals( str(self.field), - '=245 01$aHuckleberry Finn: $bAn American Odyssey') - - def test_controlfield_string( self ): - self.assertEquals( str(self.controlfield), - r'=008 831227m19799999nyu\\\\\\\\\\\|||\|\ger\\') - - def test_indicators( self ): - assert self.field.indicator1 is 0 - self.assertEqual( self.field.indicator2, 1 ) - - def test_subfields_created( self ): - subfields = self.field.subfields - self.assertEqual( len( subfields ), 4 ) - - def test_subfield_short( self ): - self.assertEqual( self.field['a'], 'Huckleberry Finn: ' ) - self.assertEqual( self.field['z'], None ) - - def test_subfields( self ): - self.assertEqual( self.field.getSubfields( 'a' ), - ['Huckleberry Finn: '] ) - self.assertEqual( self.subjectfield.getSubfields( 'a' ), - ['Python (Computer program language)']) - - def test_subfields_multi( self ): - self.assertEqual( self.field.getSubfields( 'a','b' ), - ['Huckleberry Finn: ', 'An American Odyssey' ] ) - self.assertEqual( self.subjectfield.getSubfields( 'a','v' ), - ['Python (Computer program language)', 'Poetry.' ] ) - - def test_encode( self ): - self.field.asMARC21() - - def testIterator( self ): - string = "" - for subfield in self.field: - string += subfield[0] - string += subfield[1] - self.assertEquals( string, "aHuckleberry Finn: bAn American Odyssey" ) - - def testValue( self ): - self.assertEquals( self.field.value(), - 'Huckleberry Finn: An American Odyssey' ) - self.assertEquals( self.controlfield.value(), "831227m19799999nyu ||| | ger " ) - - def testNonIntegerTag( self ): - # make sure this doesn't throw an exception - f = Field( tag="3 0", indicators=[0,1], subfields=['a', 'foo'] ) - - def testAddSubfield( self ): - f = Field( tag="245", indicators=[0,1], subfields=['a', 'foo'] ) - f.addSubfield('a','bar') - self.assertEquals( f.__str__(), '=245 01$afoo$abar') - - def testIsSubjectField( self ): - self.assertEqual( self.subjectfield.isSubjectField(), True ) - self.assertEqual( self.field.isSubjectField(), False ) - - def testFormatField( self ): - self.assertEqual( self.subjectfield.formatField(), - 'Python (Computer program language) -- Poetry.' ) - self.assertEqual( self.field.formatField(), 'Huckleberry Finn: An American Odyssey' ) - -def suite(): - suite = unittest.makeSuite( FieldTest, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - - diff --git a/tags/rel-1.1/test/marc.dat b/tags/rel-1.1/test/marc.dat deleted file mode 100644 index 9c52c7d..0000000 --- a/tags/rel-1.1/test/marc.dat +++ /dev/null @@ -1 +0,0 @@ -01060cam 22002894a 45000010009000000050017000090080041000260350021000679060045000889250044001339550160001779550053003370100017003900200015004070400018004220420008004400500023004480820014004711000025004852450088005102600044005983000027006425040041006696500026007107000026007369850008007621177850420040816084925.0990802s2000 mau b 001 0 eng  a(DLC) 99043581 a0bvipcorignewd1eocipf19gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc05 to ja00 08-02-99; jf05 to subj. 08/02/99; jf11 to sl 08-03-99; jf25 08-05-99 to ddc; bk rec'd, to CIP ver. ps07 01-07-00; CIP ver jf05 to sl 04/05/00 aADDED COPIES: another copy to ASCD ps15 01-12-00 a 99043581  a020161622X aDLCcDLCdDLC apcc00aQA76.6b.H857 200000a005.12211 aHunt, Andrew,d1964-14aThe pragmatic programmer :bfrom journeyman to master /cAndrew Hunt, David Thomas. aReading, Mass :bAddison-Wesley,c2000. axxiv, 321 p. ;c24 cm. aIncludes bibliographical references. 0aComputer programming.1 aThomas, David,d1956- eGAP00979cam 2200241 a 45000010009000000050017000090080041000269060045000679250042001129550206001540100017003600200015003770400018003920500026004100820017004361000016004532450037004692500012005062600051005183000078005695040051006476500039006981251588220020923085341.0010827s2001 cc a b 001 0 eng  a7bcbccorigcopd2encipf20gy-gencatlg0 aacquireb2 shelf copyxpolicy default apb07 2001-08-27 to ASCDajf00 2001-08-31ajf00 2001-09-05;cjf03 2001-10-16 to Subj.djf01 2001-10-25 to slejf12 2001-11-23; jf12 to Dewey 11-23-01aaa20 2001-12-07; copy 2 added jf16 to BCCD 09-23-02 a 2001276084 a0596000855 aDLCcDLCdDLC00aQA76.73.P98bL88 200100a005.13/32211 aLutz, Mark.10aProgramming Python /cMark Lutz. a2nd ed. aBeijing :aSebastopol, CA :bO'Reilly,cc2001. axxxvii, 1255 p. :bill. ;c24 cm. +e1 computer optical disc (4 3/4 in.). aIncludes bibliographical references and index. 0aPython (Computer program language)00887cam 2200253 a 45000010009000000050017000090080041000269060045000679250044001129550151001560100017003070200015003240400018003390500027003570820017003841000016004012450051004172500012004682600040004803000035005205040020005556500039005757000019006141361051220040714135238.0040601s2004 caua 001 0 eng  a7bcbccorigcopd2encipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apv17 2004-06-01 Preprocessor to ASCDajf00 2004-06-03;cjf03 2004-06-24 to Subj.djf09 2004-06-28 to slejf12 2004-07-01 to Deweyaaa25 2004-07-14 a 2004273129 a0596002815 aDLCcDLCdDLC00aQA76.73.P98bL877 200400a005.13/32221 aLutz, Mark.10aLearning Python /cMark Lutz and David Ascher. a2nd ed. aSebastopol, CA :bO'Reilly,cc2004. axxvi, 591 p. :bill. ;c24 cm. aIncludes index. 0aPython (Computer program language)1 aAscher, David.01038cam 2200289 a 45000010009000000050017000090080041000269060045000679250042001129550167001540100017003210150015003380200015003530350023003680400023003910420014004140500026004280820017004542450065004712600039005363000027005755000048006025000020006506500039006707000020007097000019007291306994220030606071827.0030127s2002 cau 001 0 eng  a7bcbcccopycatd2encipf20gy-gencatlg0 aacquireb2 shelf copyxpolicy default aps04 2003-01-27 to ASCDajf00 2003-01-30cjf05 2003-01-30 to subj.djf09 2003-01-30 to slejf12 2003-02-03 to Deweyaaa20 2003-03-10ajg07 2003-06-06 copy 2 added a 2003268354 aGBA2-Y6761 a0596001673 a(OCoLC)ocm49044543 aUKMcUKMdCUSdDLC alccopycat00aQA76.73.P98bP95 200200a005.13/322100aPython cookbook /cedited by Alex Martelli and David Ascher. aSebastopol, CA :bO'Reilly,c2002. axxix, 574 p. ;c24 cm. a"Recipes from the Python community"--Cover. aIncludes index. 0aPython (Computer program language)1 aMartelli, Alex.1 aAscher, David.00759nam 22002295a 45000010009000000050017000090080041000260350022000679060045000899250044001349550020001780100017001980200015002150400013002300420008002431000021002512450068002722600084003402630009004243000012004339630084004451312796220030318153335.0030318s2003 inu 000 0 eng  a(DLC) 2003104024 a0bibccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2003-03-18 a 2003104024 a1592000738 aDLCcDLC apcc1 aDawson, Michael.10aPython programming for the absolute beginner /cMichael Dawson. aIndianapolis, IN :bPremier Press Inc., a division of Course Technology,c2003. a0306 ap.ccm. aMargaret Bauer ; phone (812) 273-0561 ; fax null email margaret_bauer@yahoo.com01304cam 22002894a 45000010009000000050017000090080041000269060045000679250044001129550280001560100017004360200015004530400018004680420008004860500024004940820017005181000049005352450150005842460030007342600053007643000036008175040064008536500026009176500023009437000021009667000027009871256551420020718085037.0011016s2002 njua b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2001-10-16 to ASCD;cjf03 2001-10-17 to Subj.djf01 2001-10-25 to slejf25 2001-10-25 to Deweyaaa20 2001-10-26aps16 2002-01-11 bk rec'd, to CIP ver.ajf00 2002-01-16fjf04 2002-01-18 to S.L.gjf12 2002-01-18 to bccdajf00 2002-03-26; copy 2 added jf16 to BCCD 07-18-02 a 2001055410 a0130410659 aDLCcDLCdDLC apcc00aQA76.625b.T48 200200a005.2/762211 aThiruvathukal, George K.q(George Kuriakose)10aWeb programming :btechniques for integrating Python, Linux, Apache, and MySQL /cGeorge K. Thiruvathukal, John P. Shafaee, Thomas W. Christoper.14aWeb programming in Python aUpper Saddle River, NJ :bPrentice Hall,cc2002. axviii, 745 p. :bill. ;c24 cm. aIncludes bibliographical references (p. 723-725) and index. 0aInternet programming. 0aWeb sitesxDesign.1 aShafaee, John P.1 aChristopher, Thomas W.01023cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550168001560100017003240200035003410400018003760420008003940500026004020820016004281000029004442450067004732500012005402600051005523000035006035000020006386500039006586300021006977000027007181187737320010105091546.0991228s2000 cc a 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc01 12-28-99; jf03 01-04-00 ; jf11 to sl 1-4-00; jf12 to Dewey 01-06-00; aa05 01-10-00; CIP ver. pv08 to BCCD 05-01-00; copy 2 added jf16 to BCCD 01-05-01 a 99085714  a1565926218 (pbk. : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P98bH36 200000a005.2652211 aHammond, Markq(Mark J.)10aPython programming on Win32 /cMark Hammond and Andy Robinson. a1st ed. aBeijing ;aSebastopol, CA :bO'Reilly,cc2000. axvii, 652 p. :bill. ;c24 cm. aIncludes index. 0aPython (Computer program language)00aMicrosoft Win32.1 aRobinson, Andy,d1967-00867cam 22002538a 45000010009000000050017000090080041000269060045000679250044001129550127001560100017002830200015003000400013003150420008003280500026003360820017003621000019003792450080003982600047004782630009005253000011005346500039005459630029005841343237720031222144424.0031211s2003 oru 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc27 2003-12-11 RUSH to ASCDcjf07 2003-12-17 to subjectdjf09 2003-12-17 to slejp05 2003-12-18 to Deweyaaa20 2003-12-22 a 2003064366 a1887902996 aDLCcDLC apcc00aQA76.73.P98bZ45 200300a005.13/32221 aZelle, John M.10aPython programming :ban introduction to computer science /cJohn M. Zelle. aWilsonville, OR :bFranklin, Beedlec2003. a0312 ap. cm. 0aPython (Computer program language) aTom Sumner, 503-682-766801008cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550171001560100017003270200015003440400018003590420008003770500026003850820018004111000026004292450065004552600046005203000034005665000020006006500039006206500026006596500023006857000022007081222727720030509151148.0001109s2002 inua 001 0 eng  a7bcbccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 11-09-00apv11 2002-04-12 2 copies to ASCDajf00 2002-04-18;cjf03 2002-08-20 to Subj.djf09 2002-08-21 to slejf25 2002-09-10 2 copies to Deweyaaa05 2002-10-04 a 00110884  a0735710902 aDLCcDLCdDLC apcc00aQA76.73.P98bH65 200200a005.2/7622211 aHolden, Steve,d1950-10aPython Web programming /cSteve Holden [with David Beazley]. aIndianapolis, Ind. :bNew Riders,cc2002. axxi, 691 p. :bill. ;c23 cm. aIncludes index. 0aPython (Computer program language) 0aInternet programming. 0aWeb sitesxDesign.1 aBeazley, David M.01049cam 22002534a 45000010009000000050017000090080041000269060045000679250044001129550148001560100017003040200015003210400018003360420008003540500026003620820017003881000018004052450047004232600052004703000066005225040051005885380117006396500039007561216916820010522141328.0000911s2000 nju b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc16 09-11-00; jf02 09-12-00 ; jf11 to sl 9-12-00; jf12 to Dewey 09-14-00; aa05 09-14-00; CIP Ver. jf02 05-11-01; jf12 to BCCD 05-22-01 a 00047856  a0130260363 aDLCcDLCdDLC apcc00aQA76.73.P98bC48 200100a005.13/32211 aChun, Wesley.10aCore python programming /cWesley J. Chun. aUpper Saddle River, NJ :bPrentice Hall,c2001. axxix, 771 p. ;c24 cm. +e1 computer optical disc (4 3/4 in.) aIncludes bibliographical references and index. aSystem requirements for accompanying computer disc: Windows 9x/Me/NT/2000; a Web brouser; Macintosh; UNIX/Linux. 0aPython (Computer program language)00948cam 22002654a 45000010009000000050017000090080041000269060045000679250044001129550133001560100017002890200015003060400018003210420008003390500026003470820017003731000021003902450055004112600038004663000036005045040051005406500039005916500036006306300016006661213218820010817152505.0000804s2000 ctua b 001 0 eng  a7bcbccorignewd2encipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pb05 08-04-00;jfoo 08-08-00;cjf03 2001-07-18 to Subj.djf02 2001-07-19 to slejf25 2001-07-31 to Deweyaaa20 2001-08-17 a 00697831  a1884777813 aDLCcDLCdDLC apcc00aQA76.73.P98bG73 200000a005.13/32211 aGrayson, John E.10aPython and Tkinter programming /cJohn E. Grayson. aGreenwich, CT :bManning,cc2000. axxiii, 658 p. :bill. ;c24 cm. aIncludes bibliographical references and index. 0aPython (Computer program language) 0aTcl (Computer program language)00aTk toolkit.00767nam 22002295a 45000010009000000050017000090080041000260350022000679060045000899250044001349550020001780100017001980200015002150400013002300420008002432450081002512600079003322630009004113000012004204400021004329630084004531337832520031020153106.0031020s2003 inu 000 0 eng  a(DLC) 2003114351 a0bibccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc10 2003-10-20 a 2003114351 a1592000770 aDLCcDLC apcc00aGame programming with Python, Lua, and Ruby /c[edited by] Estelle Manticas. aIndianapolis, IN :bPremier Press, a Division of Course Technology,c2003. a0311 ap.ccm. aGame development aMargaret Bauer ; phone (812) 273-0561 ; fax null email margaret_bauer@yahoo.com01121cam 22002414a 45000010009000000050017000090080041000269060045000679250044001129550362001560100017005180200015005350400018005500420008005680500026005760820017006021000027006192450058006462600052007043000033007565040051007896500039008401256552920030227150222.0011016s2002 njua b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2001-10-16 to ASCD;cjf05 2001-10-17 to subj.djf04 2001-10-17 to S.L.ejf25 2001-10-25 to Deweyaaa20 2001-10-26aps11 2002-01-15 bk rec'd, to CIP ver.fjp07 2002-02-13ajp00 2002-03-08gjp85 2002-03-08 to BCCD; copy 2 added jf16 to BCCD 07-18-02ajf00 2003-01-29ajf07 2003-02-27 somehow copy 1 got back into the CIP ver. stream (handed to acting TL) a 2001055411 a0130409561 aDLCcDLCdDLC apcc00aQA76.73.P98bC47 200200a005.13/32211 aChristopher, Thomas W.10aPython programming patterns /cThomas W. Christopher. aUpper Saddle River, NJ :bPrentice Hall,c2002. axix 538 p. :bill. ;c24 cm. aIncludes bibliographical references and index. 0aPython (Computer program language)01062cam 22002778a 45000010009000000050017000090080041000269060045000679250044001129550120001560100017002760200028002930400013003210420008003340500026003420820018003681000024003862450134004102600041005442630009005853000011005946500039006056500037006446500039006819630064007201275256420020426115101.0020424s2002 mau 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc21 2002-04-24 to ASCDcjf05 2002-04-25 to subj.djf09 2002-04-25 to slejf25 2002-04-26 to Deweyaaa20 2002-04-26 a 2002066565 a0201616165 (alk. paper) aDLCcDLC apcc00aQA76.73.P98bH54 200200a005.2/7622211 aHightower, Richard.10aPython programming with the Java class libraries :ba tutorial for building Web and Enterprise applications /cRichard Hightower. aBoston, MA :bAddison-Wesley,c2002. a0207 ap. cm. 0aPython (Computer program language) 0aJava (Computer program language) 0aApplication softwarexDevelopment. aMarilyn Rash, 617-848-6509; email: timothy.nicholls@awl.com01012cam 22002294a 45000010009000000050017000090080041000269060045000679250044001129550192001560100017003480200028003650400018003930420008004110500026004190820017004451000017004622450151004792600042006303000071006726500039007431216723920010608101527.0000908s2001 mau b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc21 09-08-00;jf05 (desc) 09/08/00 ; jf11 to sl 9-11-00; jf12 to Dewey 09-12-00;aa03 9-12-00;CIP ver jf05 to sl 01/11/01; jf12 to BCCD 02-01-01; copy 2 added jf16 to BCCD 04-24-01 a 00046921  a0201709384 (alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P48bG38 200100a005.13/32211 aGauld, Alan.10aLearn to program using Python :ba tutorial for hobbyists, self-starters, and all who want to learn the art of computer programming /cAlan Gauld. aReading, MA :bAddison-Wesley,c2001. axii, 270 p. ;c24 cm.e+ 1 computer laser optical disc (4 3/4 in.) 0aPython (Computer program language)00935cam 22002534a 450000100070000000500170000700800410002403500210006590600450008692500440013195501480017501000170032302000220034004000180036204200080038005000260038808200170041410000160043124500610044726000390050830000750054765000390062270000200066120525620000830103214.0990629s2000 caua 001 0 eng  9(DLC) 99065006 a7bcbccorignewd2eopcnf19gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apn08/e-pcn 06-29-99; to ASCD pb02 06-10-00; jf00 06-13-00; jf03 08-17-00 ; jf11 to sl 8-22-00; jf25 2 copies to Dewey 08-24-00; aa19 08-30-2000 a 99065006  a0761523340 (pbk.) aDLCcDLCdDLC apcc00aQA76.73.P98bA48 199900a005.13/32211 aAltom, Tim.10aProgramming with Python /cTim Altom with Mitch Chapman. aRocklin, CA :bPrima Tech,cc1999. axxxiv, 372 p. :bill. ;c24 cm. +e1 computer optical disc (4 3/4 in.) 0aPython (Computer program language)1 aChapman, Mitch.01214cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550202001560100017003580200047003750400018004220420008004400500024004480820017004721000019004892450079005082600051005873000058006386500026006966500048007226500040007706500049008108560077008591328439520040226131230.0030722s2004 maua 001 0 eng  a7bcbccorignewd1eecipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ajf05 2003-07-22cjf05 2003-07-22 to subj.djf09 2003-07-22 to slejf12 2003-07-23 to Deweyaaa20 2003-07-29ajf00 2004-01-29fjf07 2004-02-02ejf12 2004-02-03 to BCCDajf16 2004-02-26 copy2 to BCCD a 2003016400 a1584502681 (Pbk. with CD-ROM : alk. paper) aDLCcDLCdDLC apcc00aQA76.625b.J66 200400a005.2/762221 aJones, M. Tim.10aBSD Sockets programming from a multi-language perspective /cM. Tim Jones. aHingham, Mass. :bCharles River Media,cc2004. axix, 444 p. :bill. ;c24 cm. +e1 CD-ROM (4 3/4 in.) 0aInternet programming. 0aComputer networksxDesign and construction. 0aInternetworking (Telecommunication) 0aProgramming languages (Electronic computers)413Table of contentsuhttp://www.loc.gov/catdir/toc/ecip047/2003016400.html01113cam 2200277 a 4500001000800000005001700008008004100025035002100066906004500087955011600132010001700248020003300265040001800298050002300316082001600339245009800355260004600453300003300499440004900532504006400581650005100645650003600696650002300732700001800755991006200773159816719981112152315.2940902s1995 maua b 001 0 eng  9(DLC) 94034264 a7bcbccorignewd1eocipf19gy-gencatlg apc18 to ja00 09-02-94; jf06 to subj 09-06-94; jf11 to sl 09-06-94; jf12 09-06-94 to ddc; CIP ver. jc03 11-23-94 a 94034264  a0201633612 (acid-free paper) aDLCcDLCdDLC00aQA76.64b.D47 199500a005.1/222000aDesign patterns :belements of reusable object-oriented software /cErich Gamma ... [et al.]. aReading, Mass. :bAddison-Wesley,cc1995. axv, 395 p. :bill. ;c25 cm. 0aAddison-Wesley professional computing series aIncludes bibliographical references (p. 375-381) and index. 0aObject-oriented programming (Computer science) 0aComputer softwarexReusability. 0aSoftware patterns.1 aGamma, Erich. bc-GenCollhQA76.64i.D47 1995p00011185514tCopy 1wBOOKS01233cam 2200289 a 45000010009000000050017000090080041000269060045000679250044001129550226001560100017003820200034003990400013004330500024004460820014004702450065004842460015005492500012005642600043005763000021006195000111006405040068007516500026008196500025008457000022008707000051008921237004420020812080859.0010405s2001 mau b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc20 to ja00 04-05-01; jp07 04-11-01 sent to sl;jp85 to Dewey 04-19-01; aa20 04-20-01aps13 2001-08-16 bk rec'd, to CIP ver.fjf07 2001-08-20ajf00 2001-08-20gjf12 2001-08-23 to bccdajf01 2001-09-13 copy 2 added to BCCD a 2001031277 a0262032937 (hc. : alk. paper) aDLCcDLC00aQA76.6b.I5858 200100a005.122100aIntroduction to algorithms /cThomas H. Cormen ... [et al.].30aAlgorithms a2nd ed. aCambridge, Mass. :bMIT Press,cc2001. axxi, 1180 p. cm. aRev. ed. of: Introduction to algorithms / Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest. c1990. aIncludes bibliographical references (p. [1127]-1130) and index. 0aComputer programming. 0aComputer algorithms.1 aCormen, Thomas H.1 aCormen, Thomas H.tIntroduction to algorithms.01009pam 2200265 a 4500001000800000005001700008008004100025035002100066906004500087955011600132010001700248020002200265040001800287050002600305082001700331100001800348245003700366260005300403300003500456440005200491500002700543504006400570650004400634991006500678303540919960425075058.2951006s1996 njua b 001 0 eng  9(DLC) 95045017 a7bcbccorignewd1eocipf19gy-gencatlg apc17 RUSH to ja00 10-06-95;jf05 to subj. 10/06/95; jf04 to S.L. 10-06-95; jf14 10-10-95; CIP ver. jk14 04-22-96 a 95045017  a0133708756 (pbk.) aDLCcDLCdDLC00aQA76.73.C28bG69 199600a005.13/32201 aGraham, Paul.10aANSI Common Lisp /cPaul Graham. aEnglewood Cliffs, N.J. :bPrentice Hall,cc1996. axiii, 432 p. :bill. ;c23 cm. 0aPrentice Hall series in artificial intelligence a"An Alan R. Apt book." aIncludes bibliographical references (p. 401-414) and index. 0aCOMMON LISP (Computer program language) bc-GenCollhQA76.73.C28iG69 1996p00034751468tCopy 1wBOOKS \ No newline at end of file diff --git a/tags/rel-1.1/test/marc8.py b/tags/rel-1.1/test/marc8.py deleted file mode 100644 index ed09748..0000000 --- a/tags/rel-1.1/test/marc8.py +++ /dev/null @@ -1,20 +0,0 @@ -from pymarc import marc8_to_unicode -from unittest import TestCase - -class MARC8Test(TestCase): - - def test_marc8_to_unicode(self): - marc8_file = file('test/test_marc8.txt') - utf8_file = file('test/test_utf8.txt') - count = 0 - - while True: - marc8 = marc8_file.readline().strip("\n") - utf8 = utf8_file.readline().strip("\n") - if marc8 == '' or utf8 == '': - break - count += 1 - self.assertEquals(marc8_to_unicode(marc8).encode('utf8'), utf8) - - self.assertEquals(count, 1514) - diff --git a/tags/rel-1.1/test/one.dat b/tags/rel-1.1/test/one.dat deleted file mode 100644 index a43cf54..0000000 --- a/tags/rel-1.1/test/one.dat +++ /dev/null @@ -1 +0,0 @@ -00755cam 22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500fol05731351 IMchF20000613133448.0000107s2000 nyua 001 0 eng  a 00020737  a0471383147 (paper/cd-rom : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P22bM33 200000a005.13/32211 aMartinsson, Tobias,d1976-10aActivePerl with ASP and ADO /cTobias Martinsson. aNew York :bJohn Wiley & Sons,c2000. axxi, 289 p. :bill. ;c23 cm. +e1 computer laser disc (4 3/4 in.) a"Wiley Computer Publishing." 0aPerl (Computer program language)00aActive server pages.00aActiveX. \ No newline at end of file diff --git a/tags/rel-1.1/test/reader.py b/tags/rel-1.1/test/reader.py deleted file mode 100644 index 52bf586..0000000 --- a/tags/rel-1.1/test/reader.py +++ /dev/null @@ -1,45 +0,0 @@ -import util -import unittest -import pymarc -import re - -class MARCReaderFileTest( unittest.TestCase ): - """ - Tests for the pymarc.MARCReader class which provides iterator - based access to a MARC file. - """ - - def setUp( self ): - self.reader = pymarc.MARCReader(file('test/test.dat')) - - def test_iterator( self ): - count = 0 - for record in self.reader: - count += 1 - self.assertEquals(count, 10, 'found expected amt of MARC21 records') - - def test_string( self ): - ## basic test of stringification - startsWithLeader = re.compile( "^=LDR" ) - hasNumericTag = re.compile( "\n=\d\d\d " ) - for record in self.reader: - text = str(record) - self.failUnless( startsWithLeader.search(text), 'got leader') - self.failUnless(hasNumericTag.search(text), 'got a tag') - -class MARCReaderStringTest(MARCReaderFileTest): - - def setUp(self): - raw = file('test/test.dat').read() - self.reader = pymarc.reader.MARCReader(raw) - - # inherit same tests from MARCReaderTestFile - -def suite(): - fileSuite = unittest.makeSuite(MARCReaderFileTest, 'test') - stringSuite = unittest.makeSuite(MARCReaderStringTest, 'test') - suite = unittest.TestSuite((fileSuite, stringSuite)) - return suite - -if __name__ == "__main__": - unittest.main() diff --git a/tags/rel-1.1/test/record.py b/tags/rel-1.1/test/record.py deleted file mode 100644 index 331e1a1..0000000 --- a/tags/rel-1.1/test/record.py +++ /dev/null @@ -1,178 +0,0 @@ -import util -import unittest - -from pymarc import Record, Field -from pymarc.exceptions import * - -class RecordTest( unittest.TestCase ): - - def test_add_field( self ): - record = Record() - field = Field( - tag = '245', - indicators = [ '1', '0' ], - data = [ 'a', 'Python', 'c', 'Guido' ] ) - record.addField( field ) - self.failUnless( field in record.fields, msg='found field' ) - - def test_quick_access( self ): - record = Record() - title = Field( - tag = '245', - indicators = [ '1', '0' ], - data = [ 'a', 'Python', 'c', 'Guido' ] ) - record.addField( title ) - self.assertEqual( record['245'], title, 'short access' ) - self.assertEqual( record['999'], None, 'short access with no field' ) - - def test_field_not_found( self ): - record = Record() - self.assertEquals( len( record.fields ), 0 ) - - def test_find( self ): - record = Record() - subject1 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Programming Language' ] ) - record.addField( subject1 ) - subject2 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Object Oriented' ] ) - record.addField( subject2 ) - found = record.getFields( '650' ) - self.assertEqual( found[0], subject1, 'getFields() item 1' ) - self.assertEqual( found[0], subject1, 'getFields() item 2' ) - found = record.getFields() - self.assertEqual(len(found), 2, 'getFields() with no tag') - - def test_multi_find( self ): - record = Record() - subject1 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Programming Language' ] ) - record.addField( subject1 ) - subject2 = Field( - tag = '651', - indicators = [ '', '0' ], - data = [ 'a', 'Object Oriented' ] ) - record.addField( subject2 ) - found = record.getFields( '650', '651' ) - self.assertEquals( len(found), 2 ) - - def test_bad_leader( self ): - record = Record() - self.failUnlessRaises( RecordLeaderInvalid, - record.decodeMARC, 'foo' ) - - def test_bad_base_address( self ): - record = Record() - self.failUnlessRaises( BaseAddressInvalid, - record.decodeMARC, '00695cam 2200241Ia 45x00' ) - - def test_title( self ): - record = Record() - self.assertEquals( record.title(), None ) - record.addField( Field( '245', [0,1], - subfields=[ 'a', "Foo :", 'b', 'bar' ] ) ) - self.assertEquals( record.title(), 'Foo :bar' ) - - record = Record() - record.addField( Field( '245', [0,1], - subfields=[ 'a', "Farghin" ] ) ) - self.assertEquals( record.title(), "Farghin" ) - - def test_isbn( self ): - record = Record() - self.assertEquals( record.isbn(), None ) - record.addField( Field( '020', [0,1], subfields=['a', '123456789' ] ) ) - self.assertEquals( record.isbn(), '123456789' ) - - def test_author( self ): - record = Record() - self.assertEquals( record.author(), None) - record.addField( Field( '100', [1,0], subfields=['a', 'Bletch, Foobie,', 'd', '1979-1981.'] ) ) - self.assertEquals( record.author(), 'Bletch, Foobie, 1979-1981.') - - record = Record() - record.addField( Field( '130', [0,' '], subfields=['a', 'Bible.', 'l', 'Python.'] ) ) - self.assertEquals( record.author(), None) - - def test_uniformtitle( self ): - record = Record() - self.assertEquals( record.uniformtitle(), None ) - record.addField( Field( '130', [0,' '], - subfields=[ 'a', "Tosefta.", 'l', "English.", 'f', "1977." ] ) ) - self.assertEquals( record.uniformtitle(), "Tosefta. English. 1977." ) - - record = Record() - record.addField( Field( '240', [1,4], - subfields=[ 'a', "The Pickwick papers.", 'l', "French." ] ) ) - self.assertEquals( record.uniformtitle(), "The Pickwick papers. French." ) - - def test_subjects( self ): - record = Record() - r1 = '=630 0\\$aTosefta.$lEnglish.$f1977.' - r2 = '=600 10$aLe Peu, Pepe.' - shlist = [r1, r2] - self.assertEquals( record.subjects(), [] ) - record.addField( Field( '630', [0,' '], - subfields=[ 'a', "Tosefta.", 'l', "English.", 'f', "1977." ] ) ) - record.addField( Field( '730', [0,' '], - subfields=[ 'a', "Tosefta.", 'l', "English.", 'f', "1977." ] ) ) - record.addField( Field( '600', [1,0], - subfields=[ 'a', "Le Peu, Pepe." ] ) ) - self.assertEquals( len( record.subjects() ), 2 ) - self.assertEquals( record.subjects()[0].__str__(), r1 ) - self.assertEquals( record.subjects()[1].__str__(), r2 ) - rshlist = [rsh.__str__() for rsh in record.subjects()] - self.assertEquals( shlist, rshlist ) - - def test_added_entries( self ): - record = Record() - ae1 = '=730 0\\$aTosefta.$lEnglish.$f1977.' - ae2 = '=700 10$aLe Peu, Pepe.' - aelist = [ae1, ae2] - self.assertEquals( record.addedentries(), [] ) - record.addField( Field( '730', [0,' '], - subfields=[ 'a', "Tosefta.", 'l', "English.", 'f', "1977." ] ) ) - record.addField( Field( '700', [1,0], - subfields=[ 'a', "Le Peu, Pepe." ] ) ) - record.addField( Field( '245', [0,0], - subfields=[ 'a', "Le Peu's Tosefa." ] ) ) - self.assertEquals( len( record.addedentries() ), 2 ) - self.assertEquals( record.addedentries()[0].__str__(), ae1 ) - self.assertEquals( record.addedentries()[1].__str__(), ae2 ) - raelist = [rae.__str__() for rae in record.addedentries()] - self.assertEquals( aelist, raelist ) - - def test_location( self ): - record = Record() - loc1 = '=852 \\\\$aAmerican Institute of Physics.$bNiels Bohr Library and Archives.$eCollege Park, MD' - loc2 = '=852 01$aCtY$bMain$hLB201$i.M63' - loclist = [loc1, loc2] - self.assertEquals( record.location(), [] ) - record.addField( Field('040', [' ',' '], - subfields=[ 'a', 'DLC', 'c', 'DLC' ] ) ) - record.addField( Field('852', [' ',' '], - subfields=[ 'a', 'American Institute of Physics.', - 'b', 'Niels Bohr Library and Archives.', - 'e', 'College Park, MD' ] ) ) - record.addField( Field('852', [0,1], - subfields=['a', 'CtY', 'b', 'Main', 'h', 'LB201', 'i', '.M63'] ) ) - self.assertEquals( len( record.location() ), 2 ) - self.assertEquals( record.location()[0].__str__(), loc1 ) - self.assertEquals( record.location()[1].__str__(), loc2 ) - rloclist = [rloc.__str__() for rloc in record.location()] - self.assertEquals( loclist, rloclist ) - -def suite(): - suite = unittest.makeSuite( RecordTest, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - - diff --git a/tags/rel-1.1/test/test.dat b/tags/rel-1.1/test/test.dat deleted file mode 100644 index 68d6dad..0000000 --- a/tags/rel-1.1/test/test.dat +++ /dev/null @@ -1 +0,0 @@ -00755cam 22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500fol05731351 IMchF20000613133448.0000107s2000 nyua 001 0 eng  a 00020737  a0471383147 (paper/cd-rom : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P22bM33 200000a005.13/32211 aMartinsson, Tobias,d1976-10aActivePerl with ASP and ADO /cTobias Martinsson. aNew York :bJohn Wiley & Sons,c2000. axxi, 289 p. :bill. ;c23 cm. +e1 computer laser disc (4 3/4 in.) a"Wiley Computer Publishing." 0aPerl (Computer program language)00aActive server pages.00aActiveX.00647pam 2200241 a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001500161100002600176245006700202260003800269263000900307300001100316650003700327650002500364700001600389fol05754809 IMchF20000601115601.0000203s2000 mau 001 0 eng  a 00022023  a1565926994 aDLCcDLCdDLC apcc00aQA76.73.P22bD47 200000a005.742211 aDescartes, Alligator.10aProgramming the Perl DBI /cAlligator Descartes and Tim Bunce. aCmabridge, MA :bO'Reilly,c2000. a1111 ap. cm. 0aPerl (Computer program language) 0aDatabase management.1 aBunce, Tim.00605cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077040001800094042000800112050002700120082001700147100002100164245005500185260004500240300002600285504005100311650003700362fol05843555 IMchF20000525142739.0000318s1999 cau b 001 0 eng  a 00501349  aDLCcDLCdDLC apcc00aQA76.73.P22bB763 199900a005.13/32211 aBrown, Martin C.10aPerl :bprogrammer's reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axix, 380 p. ;c22 cm. aIncludes bibliographical references and index. 0aPerl (Computer program language)00579cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002700135082001700162100002100179245005500200260004500255300003600300650003700336fol05843579 IMchF20000525142716.0000318s1999 caua 001 0 eng  a 00502116  a0072120002 aDLCcDLCdDLC apcc00aQA76.73.P22bB762 199900a005.13/32211 aBrown, Martin C.10aPerl :bthe complete reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axxxv, 1179 p. :bill. ;c24 cm. 0aPerl (Computer program language)00801nam 22002778a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001800156100002000174245008800194250003200282260004100314263000900355300001100364650003700375650003600412650002600448700002500474700002400499fol05848297 IMchF20000524125727.0000518s2000 mau 001 0 eng  a 00041664  a1565924193 aDLCcDLC apcc00aQA76.73.P22bG84 200000a005.2/7622211 aGuelich, Scott.10aCGI programming with Perl /cScott Guelich, Shishir Gundavaram & Gunther Birznieks. a2nd ed., expanded & updated aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language) 0aCGI (Computer network protocol) 0aInternet programming.1 aGundavaram, Shishir.1 aBirznieks, Gunther.00665nam 22002298a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002700130082001700157111005200174245008600226250001200312260004100324263000900365300001100374650005000385fol05865950 IMchF20000615103017.0000612s2000 mau 100 0 eng  a 00055759  a0596000138 aDLCcDLC apcc00aQA76.73.P22bP475 200000a005.13/32212 aPerl Conference 4.0d(2000 :cMonterey, Calif.)10aProceedings of the Perl Conference 4.0 :bJuly 17-20, 2000, Monterey, California. a1st ed. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)vCongresses.00579nam 22002178a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100002800173245006200201260004100263263000900304300001100313650003700324fol05865956 IMchF20000615102948.0000612s2000 mau 000 0 eng  a 00055770  a1565926099 aDLCcDLC apcc00aQA76.73.P22bB43 200000a005.13/32211 aBlank-Edelman, David N.10aPerl for system administration /cDavid N. Blank-Edelman. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)00661nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100001700173245006700190250001200257260004100269263000900310300001100319650003700330700002300367700001700390fol05865967 IMchF20000615102611.0000614s2000 mau 000 0 eng  a 00055799  a0596000278 aDLCcDLC apcc00aQA76.73.P22bW35 200000a005.13/32211 aWall, Larry.10aProgramming Perl /cLarry Wall, Tom Christiansen & Jon Orwant. a3rd ed. aCambridge, Mass. :bO'Reilly,c2000. a0007 ap. cm. 0aPerl (Computer program language)1 aChristiansen, Tom.1 aOrwant, Jon.00603cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001700161100003200178245006000210260005700270300003300327650003700360fol05872355 IMchF20000706095105.0000315s1999 njua 001 0 eng  a 00500678  a013020868X aDLCcDLCdDLC apcc00aQA76.73.P22bL69 199900a005.13/32211 aLowe, Vincentq(Vincent D.)10aPerl programmer's interactive workbook /cVincent Lowe. aUpper Saddle River, NJ :bPrentice Hall PTP,cc1999. axx, 633 p. :bill. ;c23 cm. 0aPerl (Computer program language)00696nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020002800094040001300122042000800135050002600143082001700169100002600186245004400212260005100256263000900307300001100316500002000327650003700347650001700384650004100401fol05882032 IMchF20000707091904.0000630s2000 cau 001 0 eng  a 00058174  a0764547291 (alk. paper) aDLCcDLC apcc00aQA76.73.P22bF64 200000a005.13/32212 aFoster-Johnson, Eric.10aCross-platform Perl /cEric F. Johnson. aFoster City, CA :bIDG Books Worldwide,c2000. a0009 ap. cm. aIncludes index. 0aPerl (Computer program language) 0aWeb servers. 0aCross-platform software development. \ No newline at end of file diff --git a/tags/rel-1.1/test/util.py b/tags/rel-1.1/test/util.py deleted file mode 100644 index 7ade343..0000000 --- a/tags/rel-1.1/test/util.py +++ /dev/null @@ -1,4 +0,0 @@ -import sys -sys.path.append( '../pymarc' ); - - diff --git a/tags/rel-1.1/test/writer.py b/tags/rel-1.1/test/writer.py deleted file mode 100644 index 5e5e284..0000000 --- a/tags/rel-1.1/test/writer.py +++ /dev/null @@ -1,31 +0,0 @@ -import util -import unittest -import pymarc -import re -import os - -class MARCWriterTest(unittest.TestCase): - - def test_write(self): - - # write a record off to a file - writer = pymarc.MARCWriter(file('test/writer-test.dat','w')) - record = pymarc.Record() - field = pymarc.Field('245', ['0','0'], ['a', 'foo']) - record.addField(field) - writer.write(record) - writer.close() - - # read it back in - reader = pymarc.MARCReader(file('test/writer-test.dat')) - record = reader.next() - - # remove it - os.remove('test/writer-test.dat') - -def suite(): - suite = unittest.makeSuite(MARCWriterTest, 'test') - return suite - -if __name__ == "__main__": - unittest.main() diff --git a/tags/rel-1.2/Changes b/tags/rel-1.2/Changes deleted file mode 100644 index 2fa476b..0000000 --- a/tags/rel-1.2/Changes +++ /dev/null @@ -1,90 +0,0 @@ -v1.2 Tue Sep 4 08:22:44 EDT 2007 -- added pymarc/marcxml.py for marcxml reading support -- added test of marcxml reading: test/xml_test.py -- modified Field so that default indicators and subfields are - not set to a default array in the method signature. This causes - subtle bugs since new arrays are not contructed for - repeated calls to the constructor. - -v1.1 Wed Aug 15 08:34:39 EDT 2007 -- updated the homepage for the package - -v1.0 Wed Jul 18 14:55:19 EDT 2007 -- added marc8_to_unicode() support for applications that need to - convert marc8 data to unicode ... many thanks for Aaron Lav - for allowing relevant bits of code to be lifted from PyZ3950; - also thanks to Mark Matienzo for the idea and for testing. -- added some tests for new marc8_to_unicode functionality. Thanks - to the Library of Congress for providing equivalent marc8 and - utf8 marc record batches to use for constructing test data -- The folowing changes are courtesy of Mark Matienzo: - - modified __str__ methods for Field and Record to produce - data in MARCMaker [1] format. THIS MAY BREAK YOUR CODE. This is - not a complete implementation as support for special character - mnemonics [2] has yet to be added - - modified test cases for string conversion and added tests for - control fields - - added formatField() and isSubjectField() methods to Field and - the author(), uniformtitle(), subjects(), addedentries(), - and location() methods to Record, and tests for those methods - - [1] http://www.loc.gov/marc/makrbrkr.html - [2] http://www.loc.gov/marc/mnemonics.html - -v0.9 Tue Apr 10 21:54:02 EDT 2007 -- various simplifications and pythonifications (thanks Dan Chudnov) -- added easy_install support - -v0.85 Fri Feb 3 13:08:35 EST 2006 -- added default leader template for when records are created - from scratch (thanks Kurt Nordstrom) - -v0.81 Mon Jan 30 16:33:36 EST 2006 -- getFields() wasn't returning all the fields when no tag was passed in. - -v0.8 Mon Jan 30 07:05:36 CST 2006 -- added the ability to read raw marc from strings THIS MAY BREAK - YOUR CODE. pymarc no longer supports passing file paths to the - MARCReader constructor. You need to simply change: - - reader = MARCReader('marc.dat') - - to: - - reader = MARCReader(file('marc.dat')) - - Thanks to Daniel Hoth for suggesting this. It just makes sense to - be able to pass in MARC that you got from a Z39.50 network connection - or database, etc. - -v0.7 Mon Jan 23 15:08:55 EST 2006 -- added addSubfield() to Subfield (thanks Kurt Nordstrom) - -v0.6 Tue Nov 29 20:48:31 CST 2005 -- fixed test suite to run under the unittest that ships with python2.3 -- allow non-integer field tags -- fixed MARCWriter and added test (thanks Mikel Larreategi) - -v0.5 Thu Feb 10 10:01:12 CST 2005 -- handle empty subfields - -v0.4 Wed Feb 2 22:29:33 CST 2005 -- fixed directory validation: thanks Aaron Lav -- added iterator for pymarc.Field for iterating through subfields -- added pymarc.Field.value() for getting a field value easily - -v0.3 Wed Jan 5 17:03:37 CST 2005 -- changed mind about accessors (again): - removed getField() must use getFields() - renamed subfield() to getSubfields() and have it return a list -- added doctest support to pymarc/__init__.py -- added a test batch file of python data - -v0.2 Tue Jan 4 21:01:22 CST 2005 -- removed getField() and renamed getFields() to find() - -v0.11 Mon Jan 3 20:42:19 CST 2005 -- fixed test suite execution - -v0.1 Wed Dec 29 19:54:23 CST 2004 -- initial release diff --git a/tags/rel-1.2/MANIFEST.in b/tags/rel-1.2/MANIFEST.in deleted file mode 100644 index 591cc6d..0000000 --- a/tags/rel-1.2/MANIFEST.in +++ /dev/null @@ -1,3 +0,0 @@ -global-include *.py *.dat -include README MANIFEST.in - diff --git a/tags/rel-1.2/README b/tags/rel-1.2/README deleted file mode 100644 index b5860af..0000000 --- a/tags/rel-1.2/README +++ /dev/null @@ -1,29 +0,0 @@ -DESCRIPTION ------------ - -pymarc is a python library for working with MARC21 bibliographic data -loosely based on the MARC/Perl suite of modules (http://marcpm.sf.net). -More about pymarc can be found at: http://www.textualize.com/pymarc - -INSTALLATION ------------- - -Run the pymarc test suite to make sure things are in order with the -distribution: - - python test.py - -And then install: - - python setup.py install - -For typical usage of this library look at the documentation in -pymarc/__init__.py or at the unittests found in the test directory. - -TODO ----- - -- marcxml support - -LICENSE: BSD -AUTHOR: Ed Summers diff --git a/tags/rel-1.2/ez_setup.py b/tags/rel-1.2/ez_setup.py deleted file mode 100644 index 38c09c6..0000000 --- a/tags/rel-1.2/ez_setup.py +++ /dev/null @@ -1,228 +0,0 @@ -#!python -"""Bootstrap setuptools installation - -If you want to use setuptools in your package's setup.py, just include this -file in the same directory with it, and add this to the top of your setup.py:: - - from ez_setup import use_setuptools - use_setuptools() - -If you want to require a specific version of setuptools, set a download -mirror, or use an alternate download directory, you can do so by supplying -the appropriate options to ``use_setuptools()``. - -This file can also be run as a script to install or upgrade setuptools. -""" -import sys -DEFAULT_VERSION = "0.6c5" -DEFAULT_URL = "http://cheeseshop.python.org/packages/%s/s/setuptools/" % sys.version[:3] - -md5_data = { - 'setuptools-0.6b1-py2.3.egg': '8822caf901250d848b996b7f25c6e6ca', - 'setuptools-0.6b1-py2.4.egg': 'b79a8a403e4502fbb85ee3f1941735cb', - 'setuptools-0.6b2-py2.3.egg': '5657759d8a6d8fc44070a9d07272d99b', - 'setuptools-0.6b2-py2.4.egg': '4996a8d169d2be661fa32a6e52e4f82a', - 'setuptools-0.6b3-py2.3.egg': 'bb31c0fc7399a63579975cad9f5a0618', - 'setuptools-0.6b3-py2.4.egg': '38a8c6b3d6ecd22247f179f7da669fac', - 'setuptools-0.6b4-py2.3.egg': '62045a24ed4e1ebc77fe039aa4e6f7e5', - 'setuptools-0.6b4-py2.4.egg': '4cb2a185d228dacffb2d17f103b3b1c4', - 'setuptools-0.6c1-py2.3.egg': 'b3f2b5539d65cb7f74ad79127f1a908c', - 'setuptools-0.6c1-py2.4.egg': 'b45adeda0667d2d2ffe14009364f2a4b', - 'setuptools-0.6c2-py2.3.egg': 'f0064bf6aa2b7d0f3ba0b43f20817c27', - 'setuptools-0.6c2-py2.4.egg': '616192eec35f47e8ea16cd6a122b7277', - 'setuptools-0.6c3-py2.3.egg': 'f181fa125dfe85a259c9cd6f1d7b78fa', - 'setuptools-0.6c3-py2.4.egg': 'e0ed74682c998bfb73bf803a50e7b71e', - 'setuptools-0.6c3-py2.5.egg': 'abef16fdd61955514841c7c6bd98965e', - 'setuptools-0.6c4-py2.3.egg': 'b0b9131acab32022bfac7f44c5d7971f', - 'setuptools-0.6c4-py2.4.egg': '2a1f9656d4fbf3c97bf946c0a124e6e2', - 'setuptools-0.6c4-py2.5.egg': '8f5a052e32cdb9c72bcf4b5526f28afc', - 'setuptools-0.6c5-py2.3.egg': 'ee9fd80965da04f2f3e6b3576e9d8167', - 'setuptools-0.6c5-py2.4.egg': 'afe2adf1c01701ee841761f5bcd8aa64', - 'setuptools-0.6c5-py2.5.egg': 'a8d3f61494ccaa8714dfed37bccd3d5d', -} - -import sys, os - -def _validate_md5(egg_name, data): - if egg_name in md5_data: - from md5 import md5 - digest = md5(data).hexdigest() - if digest != md5_data[egg_name]: - print >>sys.stderr, ( - "md5 validation of %s failed! (Possible download problem?)" - % egg_name - ) - sys.exit(2) - return data - - -def use_setuptools( - version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, - download_delay=15 -): - """Automatically find/download setuptools and make it available on sys.path - - `version` should be a valid setuptools version number that is available - as an egg for download under the `download_base` URL (which should end with - a '/'). `to_dir` is the directory where setuptools will be downloaded, if - it is not already available. If `download_delay` is specified, it should - be the number of seconds that will be paused before initiating a download, - should one be required. If an older version of setuptools is installed, - this routine will print a message to ``sys.stderr`` and raise SystemExit in - an attempt to abort the calling script. - """ - try: - import setuptools - if setuptools.__version__ == '0.0.1': - print >>sys.stderr, ( - "You have an obsolete version of setuptools installed. Please\n" - "remove it from your system entirely before rerunning this script." - ) - sys.exit(2) - except ImportError: - egg = download_setuptools(version, download_base, to_dir, download_delay) - sys.path.insert(0, egg) - import setuptools; setuptools.bootstrap_install_from = egg - - import pkg_resources - try: - pkg_resources.require("setuptools>="+version) - - except pkg_resources.VersionConflict, e: - # XXX could we install in a subprocess here? - print >>sys.stderr, ( - "The required version of setuptools (>=%s) is not available, and\n" - "can't be installed while this script is running. Please install\n" - " a more recent version first.\n\n(Currently using %r)" - ) % (version, e.args[0]) - sys.exit(2) - -def download_setuptools( - version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, - delay = 15 -): - """Download setuptools from a specified location and return its filename - - `version` should be a valid setuptools version number that is available - as an egg for download under the `download_base` URL (which should end - with a '/'). `to_dir` is the directory where the egg will be downloaded. - `delay` is the number of seconds to pause before an actual download attempt. - """ - import urllib2, shutil - egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3]) - url = download_base + egg_name - saveto = os.path.join(to_dir, egg_name) - src = dst = None - if not os.path.exists(saveto): # Avoid repeated downloads - try: - from distutils import log - if delay: - log.warn(""" ---------------------------------------------------------------------------- -This script requires setuptools version %s to run (even to display -help). I will attempt to download it for you (from -%s), but -you may need to enable firewall access for this script first. -I will start the download in %d seconds. - -(Note: if this machine does not have network access, please obtain the file - - %s - -and place it in this directory before rerunning this script.) ----------------------------------------------------------------------------""", - version, download_base, delay, url - ); from time import sleep; sleep(delay) - log.warn("Downloading %s", url) - src = urllib2.urlopen(url) - # Read/write all in one block, so we don't create a corrupt file - # if the download is interrupted. - data = _validate_md5(egg_name, src.read()) - dst = open(saveto,"wb"); dst.write(data) - finally: - if src: src.close() - if dst: dst.close() - return os.path.realpath(saveto) - -def main(argv, version=DEFAULT_VERSION): - """Install or upgrade setuptools and EasyInstall""" - - try: - import setuptools - except ImportError: - egg = None - try: - egg = download_setuptools(version, delay=0) - sys.path.insert(0,egg) - from setuptools.command.easy_install import main - return main(list(argv)+[egg]) # we're done here - finally: - if egg and os.path.exists(egg): - os.unlink(egg) - else: - if setuptools.__version__ == '0.0.1': - # tell the user to uninstall obsolete version - use_setuptools(version) - - req = "setuptools>="+version - import pkg_resources - try: - pkg_resources.require(req) - except pkg_resources.VersionConflict: - try: - from setuptools.command.easy_install import main - except ImportError: - from easy_install import main - main(list(argv)+[download_setuptools(delay=0)]) - sys.exit(0) # try to force an exit - else: - if argv: - from setuptools.command.easy_install import main - main(argv) - else: - print "Setuptools version",version,"or greater has been installed." - print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)' - - - -def update_md5(filenames): - """Update our built-in md5 registry""" - - import re - from md5 import md5 - - for name in filenames: - base = os.path.basename(name) - f = open(name,'rb') - md5_data[base] = md5(f.read()).hexdigest() - f.close() - - data = [" %r: %r,\n" % it for it in md5_data.items()] - data.sort() - repl = "".join(data) - - import inspect - srcfile = inspect.getsourcefile(sys.modules[__name__]) - f = open(srcfile, 'rb'); src = f.read(); f.close() - - match = re.search("\nmd5_data = {\n([^}]+)}", src) - if not match: - print >>sys.stderr, "Internal error!" - sys.exit(2) - - src = src[:match.start(1)] + repl + src[match.end(1):] - f = open(srcfile,'w') - f.write(src) - f.close() - - -if __name__=='__main__': - if len(sys.argv)>2 and sys.argv[1]=='--md5update': - update_md5(sys.argv[2:]) - else: - main(sys.argv[1:]) - - - - - diff --git a/tags/rel-1.2/pymarc/__init__.py b/tags/rel-1.2/pymarc/__init__.py deleted file mode 100644 index 22f1d2a..0000000 --- a/tags/rel-1.2/pymarc/__init__.py +++ /dev/null @@ -1,73 +0,0 @@ -# __init__.py - -r''' - -The pymarc module provides an API for reading, writing and modifying -MARC records. MARC (MAchine Readable Cataloging) is a metadata format for -bibliographic data. More about MARC can be found at the Library of Congress: -http://lcweb.loc.gov/marc - -Below are some common examples of how you might want to use pymarc. If you -run across an example that you think should be here please contribute it -by writing to the author. - -1. Reading a batch of records and printing out the 245 subfield a. If you - are curious this example uses the batch file available in the distribution. - - >>> from pymarc import MARCReader - >>> reader = MARCReader( 'test/marc.dat' ) - >>> for record in reader: - ... print record['245']['a'] - The pragmatic programmer : - Programming Python / - Learning Python / - Python cookbook / - Python programming for the absolute beginner / - Web programming : - Python programming on Win32 / - Python programming : - Python Web programming / - Core python programming / - Python and Tkinter programming / - Game programming with Python, Lua, and Ruby / - Python programming patterns / - Python programming with the Java class libraries : - Learn to program using Python : - Programming with Python / - BSD Sockets programming from a multi-language perspective / - Design patterns : - Introduction to algorithms / - ANSI Common Lisp / - -2. Creating a record and writing it out to a file. - - >>> from pymarc import Record, Field - >>> record = Record() - >>> record.add_field( \ - ... Field( \ - ... tag = '245', - ... indicators = ['0','1'], - ... subfields = [ \ - ... 'a', 'The pragmatic programmer : ', - ... 'b', 'from journeyman to master /', - ... 'c', 'Andrew Hunt, David Thomas.' ] ) ) - >>> out = file( 'file.dat', 'w' ) - >>> out.write( record.as_marc21() ) - -''' - -__version__ = '1.0' - -from record import * -from field import * -from exceptions import * -from reader import * -from writer import * -from constants import * -from marc8 import marc8_to_unicode -from marcxml import * - -if __name__ == "__main__": - import doctest - doctest.testmod() - diff --git a/tags/rel-1.2/pymarc/constants.py b/tags/rel-1.2/pymarc/constants.py deleted file mode 100644 index bd148c2..0000000 --- a/tags/rel-1.2/pymarc/constants.py +++ /dev/null @@ -1,7 +0,0 @@ -LEADER_LEN = 24 -DIRECTORY_ENTRY_LEN = 12 -SUBFIELD_INDICATOR = chr( 0x1F ) -END_OF_FIELD = chr( 0x1E ) -END_OF_RECORD = chr( 0x1D ) - - diff --git a/tags/rel-1.2/pymarc/exceptions.py b/tags/rel-1.2/pymarc/exceptions.py deleted file mode 100644 index 4be03df..0000000 --- a/tags/rel-1.2/pymarc/exceptions.py +++ /dev/null @@ -1,30 +0,0 @@ -class pymarcException( Exception ): - pass - -class RecordLengthInvalid( pymarcException): - def __str__( self ): - return( "Invalid record length in first 5 bytes of record" ) - -class RecordLeaderInvalid( pymarcException ): - def __str__ ( self ): - return "Unable to extract record leader" - -class RecordDirectoryInvalid( pymarcException ): - def __str__( self ): - return "Invalid directory" - -class NoFieldsFound( pymarcException ): - def __str__ ( self ): - return "Unable to locate fields in record data" - -class BaseAddressInvalid( pymarcException ): - def __str__ ( self ): - return "Base address exceeds size of record" - -class WriteNeedsRecord( pymarcException ): - def __str__( self ): - return "Write requires a pymarc.Record object as an argument" - -class NoActiveFile( pymarcException ): - def __str__( self ): - return "There is no active file to write to in call to write" diff --git a/tags/rel-1.2/pymarc/field.py b/tags/rel-1.2/pymarc/field.py deleted file mode 100644 index 9778b76..0000000 --- a/tags/rel-1.2/pymarc/field.py +++ /dev/null @@ -1,167 +0,0 @@ -from constants import * -from exceptions import * - -class Field( object ): - - def __init__( self, tag, indicators=None, subfields=None, data='' ): - """ - Field() pass in the field tag, indicators and subfields for the tag. - - field = Field( \ - tag = '245', - indicators = ['0','1'], - subfields = [ \ - 'a', 'The pragmatic programmer : ', - 'b', 'from journeyman to master /', - 'c', 'Andrew Hunt, David Thomas.' ] - - If you want to create a control field you don't pas in the indicators - and use a data parameter rather than a subfields parameter: - - field = Field( tag='001', data='fol05731351' ) - - """ - if indicators == None: - indicators = [] - if subfields == None: - subfields = [] - - tag = "%03s" % tag - if ( tag < '010' ): - self.tag = tag - self.data = data - else: - self.tag = tag - self.indicators = indicators - self.indicator1 = indicators[0] - self.indicator2 = indicators[1] - self.subfields = subfields - - def __iter__(self): - self.__pos = 0 - return self - - def __str__( self ): - """ - A Field object in a string context will return the tag, indicators - and subfield as a string. This follows MARCMaker format; see [1] - and [2] for further reference. Special character mnemonic strings - have yet to be implemented (see [3]), so be forewarned. Note also - for complete MARCMaker compatibility, you will need to change your - newlines to DOS format ('\r\n'). - - [1] http://www.loc.gov/marc/makrbrkr.html#mechanics - [2] http://search.cpan.org/~eijabb/MARC-File-MARCMaker/ - [3] http://www.loc.gov/marc/mnemonics.html - """ - if ( self.isControlField() ): - text = "=%s %s" % ( self.tag, self.data.replace(' ','\\') ) - else: - text = "=%s " % ( self.tag ) - for indicator in self.indicators: - if indicator in (' ','\\'): - text += "\\" - else: - text += "%s" % indicator - for subfield in self: - text += ("$%s%s" % subfield) - return text - - def __getitem__( self, subfield ): - """ - Retrieve the first subfield with a given subfield code in a field: - - field['a'] - - Handy for quick lookups. - """ - subfields = self.getSubfields( subfield ) - if len(subfields) > 0: return subfields[0] - return None - - def next( self ): - while self.__pos < len(self.subfields): - subfield = ( self.subfields[ self.__pos ], \ - self.subfields[ self.__pos+1 ] ) - self.__pos += 2 - return subfield - raise StopIteration - - def value( self ): - """ - Returns the field as a string without tag, indicators, and - subfield indicators. - """ - if self.isControlField(): - return self.data - string = "" - for subfield in self: - string += subfield[1] - return string - - def getSubfields( self, *codes ): - """ - getSubfields() accepts one or more subfield codes and will return a list - of subfield values. The order of the subfield values in the list - will be the order that they appear in the field. - - print field.getSubfields( 'a' ) - - print field.getSubfields( 'a', 'b', 'z' ) - """ - values = [] - for subfield in self: - if subfield[0] in codes: - values.append( subfield[1] ) - return values - - def addSubfield( self, code, value ): - """ - Adds a subfield code/value pair to the field. - - field.addSubfield('u', 'http://www.loc.gov') - """ - self.subfields.append(code) - self.subfields.append(value) - - def isControlField( self ): - """ - returns true or false if the field is considered a control field. - Control fields lack indicators and subfields. - """ - if self.tag < '010': - return True - return False - - def asMARC21( self ): - """ - used during conversion of a field to raw marc - """ - if self.isControlField(): - return self.data + END_OF_FIELD - marc = str(self.indicator1) + str(self.indicator2) - for subfield in self: - marc += SUBFIELD_INDICATOR + subfield[0] + subfield[1] - return marc + END_OF_FIELD - - def formatField( self ): - """ - Returns the field as a string without tag, indicators, and subfield indicators. Like pymarc.Field.value(), but prettier (adds spaces, formats subject headings). - """ - if self.isControlField(): return self.data - fielddata = '' - for subfield in self: - if not self.isSubjectField(): - fielddata += ' %s' % subfield[1] - else: - if subfield[0] not in ('v','x','y','z'): - fielddata += ' %s' % subfield[1] - else: fielddata += ' -- %s' % subfield[1] - return fielddata.strip() - - def isSubjectField( self ): - """ - returns True or False if the field is considered a subject field - used by formatField - """ - if self.tag.startswith('6'): return True - return False diff --git a/tags/rel-1.2/pymarc/marc8.py b/tags/rel-1.2/pymarc/marc8.py deleted file mode 100644 index cb1c894..0000000 --- a/tags/rel-1.2/pymarc/marc8.py +++ /dev/null @@ -1,101 +0,0 @@ -# see http://www.loc.gov/marc/specifications/speccharmarc8.html - -import unicodedata -import marc8_mapping - -def marc8_to_unicode(marc8): - converter = MARC8_to_Unicode() - return converter.translate(marc8) - -class MARC8_to_Unicode: - """Converts MARC-8 to Unicode. Note that currently, unicode strings - aren't normalized, and some codecs (e.g. iso8859-1) will fail on - such strings. When I can require python 2.3, this will go away. - - Warning: MARC-8 EACC (East Asian characters) makes some - distinctions which aren't captured in Unicode. The LC tables give - the option of mapping such characters either to a Unicode private - use area, or a substitute character which (usually) gives the - sense. I've picked the second, so this means that the MARC data - should be treated as primary and the Unicode data used for display - purposes only. (If you know of either of fonts designed for use - with LC's private-use Unicode assignments, or of attempts to - standardize Unicode characters to allow round-trips from EACC, - or if you need the private-use Unicode character translations, - please inform me, asl2@pobox.com.""" - - basic_latin = 0x42 - ansel = 0x45 - def __init__ (self, G0 = basic_latin, G1 = ansel): - self.g0 = G0 - self.g1 = G1 - - def is_multibyte (self, charset): - return charset == 0x31 - - g0_set = set(['(', ',', '$']) - g1_set = set([')', '-', '$']) - - def translate (self, s): - uni_list = [] - combinings = [] - pos = 0 - while pos < len (s): -## http://www.loc.gov/marc/specifications/speccharmarc8.html - if s[pos] == '\x1b': - next = s[pos+1] - if (next in self.g0_set): - if s[pos+2] == ',' and next == '$': - pos += 1 - self.g0 = ord(s[pos+2]) - pos = pos + 3 - continue - elif next in self.g1_set: - if s[pos+2] == '-' and next == '$': - pos += 1 - self.g1 = ord(s[pos+2]) - pos = pos + 3 - continue - - mb_flag = self.is_multibyte(self.g0) - - if mb_flag: - d = (ord (s[pos]) * 65536 + - ord (s[pos+1]) * 256 + - ord (s[pos+2])) - pos += 3 - else: - d = ord (s[pos]) - pos += 1 - - if (d < 0x20 or - (d > 0x80 and d < 0xa0)): - uni = unichr (d) - continue - - try: - if d > 0x80 and not mb_flag: - (uni, cflag) = marc8_mapping.codesets [self.g1] [d] - else: - (uni, cflag) = marc8_mapping.codesets [self.g0] [d] - except KeyError, e: - print "couldn't find", self.g0, self.g1, d, str(e) - uni = ord(' ') - cflag = False - - if cflag: - combinings.append (unichr (uni)) - else: - uni_list.append (unichr (uni)) - if len (combinings) > 0: - uni_list += combinings - combinings = [] - - # what to do if combining chars left over? - uni_str = u"".join (uni_list) - - # unicodedata.normalize not available until Python 2.3 - if hasattr (unicodedata, 'normalize'): - uni_str = unicodedata.normalize ('NFC', uni_str) - - return uni_str diff --git a/tags/rel-1.2/pymarc/marc8_mapping.py b/tags/rel-1.2/pymarc/marc8_mapping.py deleted file mode 100644 index e69de29..0000000 diff --git a/tags/rel-1.2/pymarc/marcxml.py b/tags/rel-1.2/pymarc/marcxml.py deleted file mode 100644 index e35e355..0000000 --- a/tags/rel-1.2/pymarc/marcxml.py +++ /dev/null @@ -1,84 +0,0 @@ -from xml.sax import make_parser -from xml.sax.handler import ContentHandler, feature_namespaces, \ - feature_namespace_prefixes -from pymarc import Record, Field - -class XmlHandler(ContentHandler): - """ - You can subclass XmlHandler and add your own process_record - method that'll be passed a pymarc.Record as it becomes - available. This could be useful if you want to stream the - records elsewhere (like to a rdbms) without having to store - them all in memory. - """ - - def __init__(self): - self.records = [] - self._record = None - self._field = None - self._subfield_code = None - self._text = [] - - def startElementNS(self, name, qname, attrs): - el = name[1] - self._text = [] - - if el == 'record': - self._record = Record() - elif el == 'controlfield': - tag = attrs.getValue((None, u'tag')) - self._field = Field(tag) - elif el == 'datafield': - tag = attrs.getValue((None, u'tag')) - ind1 = attrs.getValue((None, u'ind1')) - ind2 = attrs.getValue((None, u'ind2')) - self._field = Field(tag, [ind1, ind2]) - elif el == 'subfield': - self._subfield_code = attrs[(None, 'code')] - - def endElementNS(self, name, qname): - el = name[1] - text = u''.join(self._text) - - if el == 'record': - self.process_record(self._record) - self._record = None - elif el == 'leader': - self._record.leader = text - elif el == 'controlfield': - self._field.data = text - self._record.addField(self._field) - self._field = None - elif el == 'datafield': - self._record.addField(self._field) - self._field = None - elif el == 'subfield': - self._field.subfields.append(self._subfield_code) - self._field.subfields.append(text) - self._subfield_code = None - - self._text = [] - - def characters(self, chars): - self._text.append(chars) - - def process_record(self, record): - self.records.append(record) - -def parse_xml(file, handler): - """ - parse a file with a given subclass of xml.sax.handler.ContentHandler - """ - parser = make_parser() - parser.setContentHandler(handler) - parser.setFeature(feature_namespaces, 1) - parser.parse(file) - -def parse_xml_to_array(file): - """ - parse an xml file and return the records as an array - """ - handler = XmlHandler() - parse_xml(file, handler) - return handler.records - diff --git a/tags/rel-1.2/pymarc/reader.py b/tags/rel-1.2/pymarc/reader.py deleted file mode 100644 index 8258868..0000000 --- a/tags/rel-1.2/pymarc/reader.py +++ /dev/null @@ -1,56 +0,0 @@ -from pymarc import Record, Field -from constants import END_OF_RECORD -from exceptions import * -from types import * -from cStringIO import StringIO - -class Reader( object ): - """ - A base class for all iterating readers in the pymarc package. - """ - def __iter__( self ): - return self - -class MARCReader( Reader ): - """ - An iterator class for reading a file of MARC21 records. - - Simple usage: - - from pymarc import MARCReader - - ## pass in a file object - reader = MARCReader(file('file.dat')) - for record in reader: - ... - - ## pass in marc in transmission format - reader = MARCReader(rawmarc) - for record in reader: - ... - - """ - - def __init__(self, f): - """ - The constructor which you can pass either raw marc or a file object. - """ - if (type(f) == FileType): self.fh = f - else: self.fh = StringIO(f) - - def next( self ): - """ - To support iteration. - """ - first5 = self.fh.read( 5 ) - if not first5: - raise StopIteration - if len( first5 ) < 5: - raise RecordLengthInvalid - - length = int( first5 ) - chunk = self.fh.read( length - 5 ) - chunk = first5 + chunk - r = Record( chunk ) - return r - diff --git a/tags/rel-1.2/pymarc/record.py b/tags/rel-1.2/pymarc/record.py deleted file mode 100644 index 92062bb..0000000 --- a/tags/rel-1.2/pymarc/record.py +++ /dev/null @@ -1,289 +0,0 @@ -from exceptions import * -from constants import * -from field import * -from types import * -import string -import re - - -class Record( object ): - """ - Record - - A class for representing a MARC record. Each Record object is made up of - multiple Field objects. You'll probably want to look at the docs for Field - to see how to fully use a Record object. - - Basic usage: - - field = Field( \ - tag = '245', - indicators = ['0','1'], - subfields = [ \ - 'a', 'The pragmatic programmer : ', - 'b', 'from journeyman to master /', - 'c', 'Andrew Hunt, David Thomas.' ] - - record.addField( field ) - - Or creating a record from a chunk of MARC in transmission format: - - record = Record( data=chunk ) - - Or getting a record as serialized MARC21. - - raw = record.asMARC21() - - You'll normally want to use a MARCReader object to iterate through - MARC records in a file. - """ - - def __init__( self, data='' ): - self.leader = (' '*10) + '22' + (' '*8) + '4500' - self.fields = list() - self.pos = 0 - if len(data) > 0: - ok = self.decodeMARC( data ) - - def __str__( self ): - """ - In a string context a Record object will return a prettified version - of the record in MARCMaker format. See the docstring for Field.__str__ - for more information. - """ - # join is significantly faster than concatenation - text = "=LDR %s\n" % self.leader - text += string.join( map( str, self.fields ), "\n" ) - text += '\n' - return text - - def __getitem__( self, tag ): - """ - Allows a shorthand lookup by tag: - - record["245"] - - """ - fields = self.getFields( tag ) - if len(fields) > 0: return fields[0] - return None - - def __iter__( self ): - self.__pos = 0 - return self - - def next(self): - if self.__pos >= len( self.fields ): - raise StopIteration - self.__pos += 1 - return self.fields[ self.__pos-1 ] - - def addField( self, *fields ): - """ - addField() will add pymarc.Field objects to a Record object. - Optionally you can pass in multiple fields. - """ - self.fields.extend(fields) - - def getFields( self, *args ): - """ - When passed a tag ( '245' ) getFields() will return a list of all the - fields in a record with a given tag. - - title = record.getFields( '245' ) - - If no fields with the specified - tag are found then an empty list is returned. If you are interested - in more than one tag you can pass in a list: - - subjects = record.getFields( '600', '610', '650' ) - - If no tag is passed in to fields() a list of all the fields will be - returned. - """ - if (len(args) == 0): - return self.fields - - return [f for f in self.fields if f.tag in args] - - def decodeMARC( self, marc ): - """ - decodeMARC() accepts a MARC record in transmission format as a - a string argument, and will populate the object based on the data - found. The Record constructor actually uses decodeMARC() behind - the scenes when you pass in a chunk of MARC data to it. - - """ - - # extract record leader - self.leader = marc[ 0 : LEADER_LEN ] - if len( self.leader ) != LEADER_LEN: raise RecordLeaderInvalid - - # extract the byte offset where the record data starts - baseAddress = int( marc[ 12 : 17 ] ) - if baseAddress <= 0: raise BaseAddressNotFound - if baseAddress >= len( marc ): raise BaseAddressInvalid - - # extract directory, baseAddress-1 is used since the - # director ends with an END_OF_FIELD byte - directory = marc[ LEADER_LEN : baseAddress-1 ] - - # determine the number of fields in record - if len(directory) % DIRECTORY_ENTRY_LEN <> 0: - raise RecordDirectoryInvalid - numFields = len( directory ) / DIRECTORY_ENTRY_LEN - - # add fields to our record using directory offsets - fieldNum = 0 - while ( fieldNum < numFields ): - entryStart = fieldNum * DIRECTORY_ENTRY_LEN - entryEnd = entryStart + DIRECTORY_ENTRY_LEN - entry = directory[ entryStart : entryEnd ] - entryTag = entry[ 0 : 3 ] - entryLength = int( entry[ 3 : 7 ] ) - entryOffset = int( entry[ 7 : 12 ] ) - entryData = marc[ baseAddress + entryOffset : - baseAddress + entryOffset + entryLength - 1 ] - - if entryTag < '010': - field = Field( tag=entryTag, data=entryData ) - else: - subfields = list() - subs = entryData.split( SUBFIELD_INDICATOR ) - i1 = subs[0][0] - i2 = subs[0][1] - for subfield in subs[1:]: - if len(subfield) == 0: continue - code = subfield[0] - data = subfield[1:] - subfields.append( code ) - subfields.append( data ) - field = Field( - tag = entryTag, - indicators = [ i1, i2 ], - subfields = subfields ) - - self.addField( field ) - fieldNum += 1 - - if fieldNum == 0: raise NoFieldsFound - - def asMARC21( self ): - """ - returns the record serialized as MARC21 - """ - fields = '' - directory = '' - offset = 0 - - # build the directory - # each element of the directory includes the tag, the byte length of - # the field and the offset from the base address where the field data - # can be found - for field in self.fields: - fieldData = field.asMARC21() - fields += fieldData - directory += "%03d%04d%05d" % (int(field.tag),len(fieldData),offset) - offset += len( fieldData ) - - # directory ends with an end of field - directory += END_OF_FIELD - - # field data ends with an end of record - fields += END_OF_RECORD - - # the base address where the directory ends and the field data begins - baseAddress = LEADER_LEN + len(directory) - - # figure out the length of the record - recordLength = baseAddress + len(fields) - - # update the leader with the current record length and base address - # the lengths are fixed width and zero padded - self.leader = "%05d%s%05d%s" % \ - ( recordLength, self.leader[5:12], baseAddress, self.leader[17:] ) - - # return the encoded record - return self.leader + directory + fields - - def title( self ): - """ - Returns the title of the record (245 $a an $b). - """ - title = None - try: - title = self['245']['a'] - title += self['245']['b'] - except TypeError, e: - pass - return title - - def isbn( self ): - """ - Returns an ISBN if appropriate. If not present None will - be returned. - """ - isbn = None - try: - # if anyone ever cares alot about performance - # this compilation could be moved out and compiled once - isbnPattern = re.compile( '^([0-9A-Za-z]+)' ) - isbn = isbnPattern.match( self["020"]["a"] ).group(1) - except Exception, e: - pass - return isbn - - def author( self ): - if self['100']: - return self['100'].formatField() - elif self['110']: - return self['110'].formatField() - elif self['111']: - return self['111'].formatField() - return None - - def uniformtitle( self ): - if self['130']: - return self['130'].formatField() - elif self['240']: - return self['240'].formatField() - return None - - def subjects( self ): - """ - Note: Fields 690-699 are considered "local" added entry fields but - occur with some frequency in OCLC and RLIN records. - """ - subjlist = self.getFields ( - '600', '610', '611', '630', '648', '650', '651', '653', '654', - '655', '656', '657', '658', '662', '690', '691', '696', '697', - '698', '699' - ) - return subjlist - - def addedentries( self ): - """ - Note: Fields 790-799 are considered "local" added entry fields but - occur with some frequency in OCLC and RLIN records. - """ - aelist = self.getFields ( - '700', '710', '711', '720', '730', '740', '752', '753', '754', - '790', '791', '792', '793', '796', '797', '798', '799' - ) - return aelist - - def location( self ): - loc = self.getFields('852') - return loc - - def notes( self ): - # todo - pass - - def publisher( self ): - # todo - pass - - def pubyear( self ): - # todo - pass diff --git a/tags/rel-1.2/pymarc/writer.py b/tags/rel-1.2/pymarc/writer.py deleted file mode 100644 index 23c32ff..0000000 --- a/tags/rel-1.2/pymarc/writer.py +++ /dev/null @@ -1,49 +0,0 @@ -from pymarc import Record, Field, WriteNeedsRecord, NoActiveFile -from types import * -from cStringIO import StringIO - -class Writer( object ): - - def write( self ): - pass - -class MARCWriter( Writer ): - """ - A class for writing MARC21 records in transmission format. - - Simple usage: - - from pymarc import MARCWriter - - ## pass in a file - writer = MARCWriter(file('file.dat','w')) - writer.write(record) - - ## use StringIO if you want to write to a string - string = StringIO() - writer = MARCWriter(string) - writer.write(record) - print string - """ - - def __init__(self, f): - """ - You need to pass in a file like object. - """ - self.fh = f - - def write(self, record): - """ - Writes a record. - """ - if type(record) != Record: - raise WriteNeedsRecord - self.fh.write(record.asMARC21()) - - def close( self ): - """ - Closes the file. - """ - self.fh.close() - self.fh = None - diff --git a/tags/rel-1.2/setup.py b/tags/rel-1.2/setup.py deleted file mode 100644 index 3098ae3..0000000 --- a/tags/rel-1.2/setup.py +++ /dev/null @@ -1,39 +0,0 @@ -# bootstrap easy_install -import ez_setup -ez_setup.use_setuptools() - -from setuptools import setup -from sys import version_info - -classifiers = """\ -Intended Audience :: Education -Intended Audience :: Developers -Intended Audience :: Information Technology -License :: OSI Approved :: BSD License -Programming Language :: Python -Topic :: Text Processing :: General -""" - -# workaround for older pythons that don't -# understand classifiers - -if version_info < (2, 3): - _setup = setup - def setup(**kwargs): - if kwargs.has_key("classifiers"): - del kwargs["classifiers"] - _setup(**kwargs) - -setup( - name = 'pymarc', - version = '1.2', - url = 'http://cheeseshop.python.org/pypi/pymarc', - author = 'Ed Summers', - author_email = 'ehs@pobox.com', - license = 'http://www.opensource.org/licenses/bsd-license.php', - packages = [ 'pymarc' ], - description = "read, write and modify MARC bibliographic data", - classifiers = filter( None, classifiers.split("\n") ), - test_suite = 'test' -) - diff --git a/tags/rel-1.2/test.py b/tags/rel-1.2/test.py deleted file mode 100644 index 8ea1517..0000000 --- a/tags/rel-1.2/test.py +++ /dev/null @@ -1,19 +0,0 @@ -import unittest -import test.record -import test.field -import test.reader -import test.encode -import test.writer - -def suite(): - suite = unittest.TestSuite() - suite.addTest( test.record.suite() ) - suite.addTest( test.field.suite() ) - suite.addTest( test.reader.suite() ) - suite.addTest( test.encode.suite() ) - suite.addTest( test.writer.suite() ) - return suite - -runner = unittest.TextTestRunner() -runner.run( suite() ) - diff --git a/tags/rel-1.2/test/__init__.py b/tags/rel-1.2/test/__init__.py deleted file mode 100644 index 4c41d24..0000000 --- a/tags/rel-1.2/test/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -import record -import field -import reader -import marc8 diff --git a/tags/rel-1.2/test/bad.dat b/tags/rel-1.2/test/bad.dat deleted file mode 100644 index 4800dc9..0000000 --- a/tags/rel-1.2/test/bad.dat +++ /dev/null @@ -1,191 +0,0 @@ - - Date: 03/15/2007 - - When searching the Florida State University Library catalog, - you sent the following records: - - -FMT BK -LDR 00000nam 2200409Ia 4500 -006 m d -007 cr cnu|||unuuu -008 041015s2004 caua sb s000|0 eng d -020 |a 1417545372 (electronic bk.) -035 |a (OCoLC)56733780 -0359 |a AMR9920 |b FS -TKR |a (Source)B0013464- 321 -TKR |a (FTaSU)NETLIBY20050112 -OWN |a FS -040 |a N$T |c N$T -05014 |a PS1303 |b .S25 2004eb -08204 |a 818/.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24510 |a Mark Twain's helpful hints for good living |h [electronic resource] : |b a handbook for the damned human race / |c edited by Lin Salamo, Victor Fischer, and Michael B. Frank of the Mark Twain Project. -260 |a Berkeley : |b University of California Press, |c c2004. -300 |a xiv, 207 p. : |b ill. |c 21 cm. -4901 |a Jumping frogs ; |v 2 -504 |a Includes bibliographical references (p. 203-206). -533 |a Electronic reproduction. |b Boulder, Colo. : |c NetLibrary, |d 2004. |n Available via World Wide Web. |n Access may be limited to NetLibrary affiliated libraries. -650 0 |a Conduct of life |v Quotations, maxims, etc. -650 0 |a Conduct of life |v Literary collections. -60010 |a Twain, Mark, |d 1835-1910 |v Quotations. -655 7 |a Electronic books. |2 local -7001 |a Salamo, Lin. -7001 |a Fischer, Victor, |d 1942- -7001 |a Frank, Michael B. -7102 |a Bancroft Library. |b Mark Twain Project. -7102 |a NetLibrary, Inc. -7761 |c Original |z 0520242459 |w (DLC) 2003024224 |w (OCoLC)53398020 -8001 |a Twain, Mark, |d 1835-1910. |t Jumping frogs ; |v 2. -85640 |3 Bibliographic record display |u http://www.netLibrary.com/urlapi.asp?action=summary&v=1&bookid=119359 |z An electronic book accessible through the World Wide Web; click for information -CAT |a NCRD |b 20 |c 20041222 -NCO |a I -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST8 |0 HOL |1 FSU60-002387996 |n 8 |a FTaSU |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -LOC8 |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -SYS 002249954 - -FMT BK -LDR 00000pam 2200301 a 4500 -008 040820s2004 nyu b 000|0 eng -010 |a 2004057341 -020 |a 0142437751 -035 |a (OCoLC)56413662 -0359 |a AMS5114 |b FS -TKR |a (Source)ONIFS141- 49 -OWN |a FS -040 |a DLC |c DLC |d YDX |d FDA -049 |a FDAA ksm -05000 |a PS1302 |b .Q56 2004 -08200 |a 818/.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24514 |a The portable Mark Twain / |c edited with an introduction by Tom Quirk. -260 |a New York : |b Penguin Books, |c 2004. -300 |a liv, 583 p. ; |c 20 cm. -440 0 |a Penguin classics -504 |a Includes bibliographical references (p. [xli]-xlv). -60010 |a Twain, Mark, |d 1835-1910 |v Correspondence. -650 0 |a Humorous stories, American. -650 0 |a Authors, American |y 19th century |v Correspondence. -7001 |a Quirk, Tom, |d 1946- -CAT |a NCRD |b 20 |c 20050218 -CAT |a NUPD |b 20 |c 20050324 -NCO |a blank -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST0 |0 Z30 |1 002255004000010 |b FSULC |c GEN |o BOOK |d 01 |f N |r FSU60-002393331 |n 0 |h PS1302 |i .Q56 2004 |3 Book Sort |4 STROZIER LIBRARY |6 Regular Loan -LOC0 |b FSULC |c GEN |o BOOK |h PS1302 |i .Q56 2004 |3 Book Sort |4 STROZIER LIBRARY |6 Regular Loan -SYS 002255004 - -FMT BK -LDR 00000nam 2200361Ia 4500 -006 m d -007 cr cnu|||unuuu -008 031127s2003 cau s 000|i eng d -020 |a 0520900995 (electronic bk.) -035 |a (OCoLC)53798433 -0359 |a ALU9407 |b FS -TKR |a (Source)B0011135- 96 -TKR |a (FTaSU)NETLIBY20040302 -OWN |a FS -040 |a N$T |c N$T -05014 |a PS1331 |b .A4 2003eb -08214 |a 818.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24010 |a Correspondence. |k Selections -24510 |a Mark Twain's letters 1876-1880. |n Volume 2, |p 1877 |h [electronic resource] / |c edited by the Mark Twain Project. -250 |a Electronic ed. -260 |a Berkeley, Calif. : |b Published for the University of California Press by the Mark Twain Project of the Bancroft Library, |c 2003. -538 |a Mode of access: World Wide Web. -506 |a Made available through NetLibrary; access may be limited to NetLibrary affiliated libraries. -500 |a Title from ebook title screen. -60010 |a Twain, Mark, |d 1835-1910 |v Correspondence. -650 0 |a Authors, American |y 19th century |v Correspondence. -650 0 |a Humorists, American |y 19th century |v Correspondence. -655 7 |a Electronic books. |2 local -7102 |a Bancroft Library. |b Mark Twain Project. -7102 |a NetLibrary, Inc. -8564 |3 Bibliographic record display |u http://www.netLibrary.com/urlapi.asp?action=summary&v=1&bookid=100194 |z An electronic book accessible through the World Wide Web; click for information -CAT |a NCRD |b 20 |c 20040224 -NCO |a I -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST8 |0 HOL |1 FSU60-002178151 |n 8 |a FTaSU |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -LOC8 |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -SYS 002042593 - -FMT BK -LDR 00000nam 2200373Ia 4500 -006 m d -007 cr cnu|||unuuu -008 031127s2003 cau s 000|i eng d -020 |a 0520900987 (electronic bk.) -035 |a (OCoLC)53798432 -0359 |a ALU9406 |b FS -TKR |a (Source)B0011135- 95 -TKR |a (FTaSU)NETLIBY20040302 -OWN |a FS -040 |a N$T |c N$T -05014 |a PS1331 |b .A4 2003eb -08214 |a 818.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24010 |a Correspondence. |k Selections -24510 |a Mark Twain's letters 1876-1880. |n Volume 1, |p 1876 |h [electronic resource] / |c edited by the Mark Twain Project. -250 |a Electronic ed. -260 |a Berkeley, Calif. : |b Published for the University of California Press by the Mark Twain Project of the Bancroft Library, |c 2003. -538 |a Mode of access: World Wide Web. -506 |a Made available through NetLibrary; access may be limited to NetLibrary affiliated libraries. -500 |a Title from ebook title screen. -60010 |a Twain, Mark, |d 1835-1910 |v Correspondence. -650 0 |a Authors, American |y 19th century |v Correspondence. -650 0 |a Humorists, American |y 19th century |v Correspondence. -655 7 |a Electronic books. |2 local -7102 |a Bancroft Library. |b Mark Twain Project. -7102 |a NetLibrary, Inc. -7102 |a NetLibrary, Inc. -8564 |3 Bibliographic record display |u http://www.netLibrary.com/urlapi.asp?action=summary&v=1&bookid=100193 |z An electronic book accessible through the World Wide Web; click for information -CAT |a NCRD |b 20 |c 20040224 -NCO |a I -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST8 |0 HOL |1 FSU60-002178150 |n 8 |a FTaSU |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -LOC8 |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -SYS 002042592 - -FMT BK -LDR 00000nam 2200361Ia 4500 -006 m d -007 cr cnu|||unuuu -008 031202s2003 cau s 000|i eng d -020 |a 0520901010 (electronic bk.) -035 |a (OCoLC)53817958 -0359 |a ALU9412 |b FS -TKR |a (Source)B0011135- 101 -TKR |a (FTaSU)NETLIBY20040302 -OWN |a FS -040 |a N$T |c N$T -05014 |a PS1331 |b .A4 2003eb -08214 |a 818.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24010 |a Correspondence. |k Selections -24510 |a Mark Twain's letters 1876-1880. |n Volume 4, |p 1879 |h [electronic resource] / |c edited by the Mark Twain Project. -250 |a Electronic ed. -260 |a Berkeley, Calif. : |b Published for the University of California Press by the Mark Twain Project of the Bancroft Library, |c 2003. -538 |a Mode of access: World Wide Web. -506 |a Made available through NetLibrary; access may be limited to NetLibrary affiliated libraries. -500 |a Title from ebook title screen. -60010 |a Twain, Mark, |d 1835-1910 |v Correspondence. -650 0 |a Authors, American |y 19th century |v Correspondence. -650 0 |a Humorists, American |y 19th century |v Correspondence. -655 7 |a Electronic books. |2 local -7102 |a Bancroft Library. |b Mark Twain Project. -7102 |a NetLibrary, Inc. -8564 |3 Bibliographic record display |u http://www.netLibrary.com/urlapi.asp?action=summary&v=1&bookid=100196 |z An electronic book accessible through the World Wide Web; click for information -CAT |a NCRD |b 20 |c 20040224 -NCO |a I -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST8 |0 HOL |1 FSU60-002178156 |n 8 |a FTaSU |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -LOC8 |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -SYS 002042598 - - - - Florida State University - Library Staff diff --git a/tags/rel-1.2/test/encode.py b/tags/rel-1.2/test/encode.py deleted file mode 100644 index 27e0c76..0000000 --- a/tags/rel-1.2/test/encode.py +++ /dev/null @@ -1,25 +0,0 @@ -import util -from pymarc import MARCReader, Record, Field -import unittest -import os - -class Encode( unittest.TestCase ): - - def test_encode_decode( self ): - # get raw data from file - original = file( 'test/one.dat' ).read() - # create a record object for the file - reader = MARCReader(file('test/one.dat')) - record = reader.next() - # make sure original data is the same as - # the record encoded as MARC - raw = record.asMARC21() - self.assertEqual( original, raw ) - -def suite(): - suite = unittest.makeSuite( Encode, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - diff --git a/tags/rel-1.2/test/field.py b/tags/rel-1.2/test/field.py deleted file mode 100644 index e82aaee..0000000 --- a/tags/rel-1.2/test/field.py +++ /dev/null @@ -1,103 +0,0 @@ -import util -import unittest -from pymarc.record import Record, Field - -class FieldTest( unittest.TestCase ): - - def setUp( self ): - self.field = Field( - tag = '245', - indicators = [ 0, 1 ], - subfields = [ - 'a', 'Huckleberry Finn: ', - 'b', 'An American Odyssey' - ] - ) - - self.controlfield = Field( - tag = '008', - data = '831227m19799999nyu ||| | ger ' - ) - - self.subjectfield = Field( - tag = '650', - indicators = [' ', '0'], - subfields = [ - 'a', 'Python (Computer program language)', - 'v', 'Poetry.' - ] - ) - - def test_string( self ): - self.assertEquals( str(self.field), - '=245 01$aHuckleberry Finn: $bAn American Odyssey') - - def test_controlfield_string( self ): - self.assertEquals( str(self.controlfield), - r'=008 831227m19799999nyu\\\\\\\\\\\|||\|\ger\\') - - def test_indicators( self ): - assert self.field.indicator1 is 0 - self.assertEqual( self.field.indicator2, 1 ) - - def test_subfields_created( self ): - subfields = self.field.subfields - self.assertEqual( len( subfields ), 4 ) - - def test_subfield_short( self ): - self.assertEqual( self.field['a'], 'Huckleberry Finn: ' ) - self.assertEqual( self.field['z'], None ) - - def test_subfields( self ): - self.assertEqual( self.field.getSubfields( 'a' ), - ['Huckleberry Finn: '] ) - self.assertEqual( self.subjectfield.getSubfields( 'a' ), - ['Python (Computer program language)']) - - def test_subfields_multi( self ): - self.assertEqual( self.field.getSubfields( 'a','b' ), - ['Huckleberry Finn: ', 'An American Odyssey' ] ) - self.assertEqual( self.subjectfield.getSubfields( 'a','v' ), - ['Python (Computer program language)', 'Poetry.' ] ) - - def test_encode( self ): - self.field.asMARC21() - - def test_iterator( self ): - string = "" - for subfield in self.field: - string += subfield[0] - string += subfield[1] - self.assertEquals( string, "aHuckleberry Finn: bAn American Odyssey" ) - - def test_value( self ): - self.assertEquals( self.field.value(), - 'Huckleberry Finn: An American Odyssey' ) - self.assertEquals( self.controlfield.value(), "831227m19799999nyu ||| | ger " ) - - def test_non_integer_tag( self ): - # make sure this doesn't throw an exception - f = Field( tag="3 0", indicators=[0,1], subfields=['a', 'foo'] ) - - def test_add_subfield( self ): - f = Field( tag="245", indicators=[0,1], subfields=['a', 'foo'] ) - f.addSubfield('a','bar') - self.assertEquals( f.__str__(), '=245 01$afoo$abar') - - def test_is_subject_field( self ): - self.assertEqual( self.subjectfield.isSubjectField(), True ) - self.assertEqual( self.field.isSubjectField(), False ) - - def test_format_field( self ): - self.assertEqual( self.subjectfield.formatField(), - 'Python (Computer program language) -- Poetry.' ) - self.assertEqual( self.field.formatField(), 'Huckleberry Finn: An American Odyssey' ) - -def suite(): - suite = unittest.makeSuite( FieldTest, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - - diff --git a/tags/rel-1.2/test/marc.dat b/tags/rel-1.2/test/marc.dat deleted file mode 100644 index 9c52c7d..0000000 --- a/tags/rel-1.2/test/marc.dat +++ /dev/null @@ -1 +0,0 @@ -01060cam 22002894a 45000010009000000050017000090080041000260350021000679060045000889250044001339550160001779550053003370100017003900200015004070400018004220420008004400500023004480820014004711000025004852450088005102600044005983000027006425040041006696500026007107000026007369850008007621177850420040816084925.0990802s2000 mau b 001 0 eng  a(DLC) 99043581 a0bvipcorignewd1eocipf19gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc05 to ja00 08-02-99; jf05 to subj. 08/02/99; jf11 to sl 08-03-99; jf25 08-05-99 to ddc; bk rec'd, to CIP ver. ps07 01-07-00; CIP ver jf05 to sl 04/05/00 aADDED COPIES: another copy to ASCD ps15 01-12-00 a 99043581  a020161622X aDLCcDLCdDLC apcc00aQA76.6b.H857 200000a005.12211 aHunt, Andrew,d1964-14aThe pragmatic programmer :bfrom journeyman to master /cAndrew Hunt, David Thomas. aReading, Mass :bAddison-Wesley,c2000. axxiv, 321 p. ;c24 cm. aIncludes bibliographical references. 0aComputer programming.1 aThomas, David,d1956- eGAP00979cam 2200241 a 45000010009000000050017000090080041000269060045000679250042001129550206001540100017003600200015003770400018003920500026004100820017004361000016004532450037004692500012005062600051005183000078005695040051006476500039006981251588220020923085341.0010827s2001 cc a b 001 0 eng  a7bcbccorigcopd2encipf20gy-gencatlg0 aacquireb2 shelf copyxpolicy default apb07 2001-08-27 to ASCDajf00 2001-08-31ajf00 2001-09-05;cjf03 2001-10-16 to Subj.djf01 2001-10-25 to slejf12 2001-11-23; jf12 to Dewey 11-23-01aaa20 2001-12-07; copy 2 added jf16 to BCCD 09-23-02 a 2001276084 a0596000855 aDLCcDLCdDLC00aQA76.73.P98bL88 200100a005.13/32211 aLutz, Mark.10aProgramming Python /cMark Lutz. a2nd ed. aBeijing :aSebastopol, CA :bO'Reilly,cc2001. axxxvii, 1255 p. :bill. ;c24 cm. +e1 computer optical disc (4 3/4 in.). aIncludes bibliographical references and index. 0aPython (Computer program language)00887cam 2200253 a 45000010009000000050017000090080041000269060045000679250044001129550151001560100017003070200015003240400018003390500027003570820017003841000016004012450051004172500012004682600040004803000035005205040020005556500039005757000019006141361051220040714135238.0040601s2004 caua 001 0 eng  a7bcbccorigcopd2encipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apv17 2004-06-01 Preprocessor to ASCDajf00 2004-06-03;cjf03 2004-06-24 to Subj.djf09 2004-06-28 to slejf12 2004-07-01 to Deweyaaa25 2004-07-14 a 2004273129 a0596002815 aDLCcDLCdDLC00aQA76.73.P98bL877 200400a005.13/32221 aLutz, Mark.10aLearning Python /cMark Lutz and David Ascher. a2nd ed. aSebastopol, CA :bO'Reilly,cc2004. axxvi, 591 p. :bill. ;c24 cm. aIncludes index. 0aPython (Computer program language)1 aAscher, David.01038cam 2200289 a 45000010009000000050017000090080041000269060045000679250042001129550167001540100017003210150015003380200015003530350023003680400023003910420014004140500026004280820017004542450065004712600039005363000027005755000048006025000020006506500039006707000020007097000019007291306994220030606071827.0030127s2002 cau 001 0 eng  a7bcbcccopycatd2encipf20gy-gencatlg0 aacquireb2 shelf copyxpolicy default aps04 2003-01-27 to ASCDajf00 2003-01-30cjf05 2003-01-30 to subj.djf09 2003-01-30 to slejf12 2003-02-03 to Deweyaaa20 2003-03-10ajg07 2003-06-06 copy 2 added a 2003268354 aGBA2-Y6761 a0596001673 a(OCoLC)ocm49044543 aUKMcUKMdCUSdDLC alccopycat00aQA76.73.P98bP95 200200a005.13/322100aPython cookbook /cedited by Alex Martelli and David Ascher. aSebastopol, CA :bO'Reilly,c2002. axxix, 574 p. ;c24 cm. a"Recipes from the Python community"--Cover. aIncludes index. 0aPython (Computer program language)1 aMartelli, Alex.1 aAscher, David.00759nam 22002295a 45000010009000000050017000090080041000260350022000679060045000899250044001349550020001780100017001980200015002150400013002300420008002431000021002512450068002722600084003402630009004243000012004339630084004451312796220030318153335.0030318s2003 inu 000 0 eng  a(DLC) 2003104024 a0bibccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2003-03-18 a 2003104024 a1592000738 aDLCcDLC apcc1 aDawson, Michael.10aPython programming for the absolute beginner /cMichael Dawson. aIndianapolis, IN :bPremier Press Inc., a division of Course Technology,c2003. a0306 ap.ccm. aMargaret Bauer ; phone (812) 273-0561 ; fax null email margaret_bauer@yahoo.com01304cam 22002894a 45000010009000000050017000090080041000269060045000679250044001129550280001560100017004360200015004530400018004680420008004860500024004940820017005181000049005352450150005842460030007342600053007643000036008175040064008536500026009176500023009437000021009667000027009871256551420020718085037.0011016s2002 njua b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2001-10-16 to ASCD;cjf03 2001-10-17 to Subj.djf01 2001-10-25 to slejf25 2001-10-25 to Deweyaaa20 2001-10-26aps16 2002-01-11 bk rec'd, to CIP ver.ajf00 2002-01-16fjf04 2002-01-18 to S.L.gjf12 2002-01-18 to bccdajf00 2002-03-26; copy 2 added jf16 to BCCD 07-18-02 a 2001055410 a0130410659 aDLCcDLCdDLC apcc00aQA76.625b.T48 200200a005.2/762211 aThiruvathukal, George K.q(George Kuriakose)10aWeb programming :btechniques for integrating Python, Linux, Apache, and MySQL /cGeorge K. Thiruvathukal, John P. Shafaee, Thomas W. Christoper.14aWeb programming in Python aUpper Saddle River, NJ :bPrentice Hall,cc2002. axviii, 745 p. :bill. ;c24 cm. aIncludes bibliographical references (p. 723-725) and index. 0aInternet programming. 0aWeb sitesxDesign.1 aShafaee, John P.1 aChristopher, Thomas W.01023cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550168001560100017003240200035003410400018003760420008003940500026004020820016004281000029004442450067004732500012005402600051005523000035006035000020006386500039006586300021006977000027007181187737320010105091546.0991228s2000 cc a 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc01 12-28-99; jf03 01-04-00 ; jf11 to sl 1-4-00; jf12 to Dewey 01-06-00; aa05 01-10-00; CIP ver. pv08 to BCCD 05-01-00; copy 2 added jf16 to BCCD 01-05-01 a 99085714  a1565926218 (pbk. : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P98bH36 200000a005.2652211 aHammond, Markq(Mark J.)10aPython programming on Win32 /cMark Hammond and Andy Robinson. a1st ed. aBeijing ;aSebastopol, CA :bO'Reilly,cc2000. axvii, 652 p. :bill. ;c24 cm. aIncludes index. 0aPython (Computer program language)00aMicrosoft Win32.1 aRobinson, Andy,d1967-00867cam 22002538a 45000010009000000050017000090080041000269060045000679250044001129550127001560100017002830200015003000400013003150420008003280500026003360820017003621000019003792450080003982600047004782630009005253000011005346500039005459630029005841343237720031222144424.0031211s2003 oru 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc27 2003-12-11 RUSH to ASCDcjf07 2003-12-17 to subjectdjf09 2003-12-17 to slejp05 2003-12-18 to Deweyaaa20 2003-12-22 a 2003064366 a1887902996 aDLCcDLC apcc00aQA76.73.P98bZ45 200300a005.13/32221 aZelle, John M.10aPython programming :ban introduction to computer science /cJohn M. Zelle. aWilsonville, OR :bFranklin, Beedlec2003. a0312 ap. cm. 0aPython (Computer program language) aTom Sumner, 503-682-766801008cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550171001560100017003270200015003440400018003590420008003770500026003850820018004111000026004292450065004552600046005203000034005665000020006006500039006206500026006596500023006857000022007081222727720030509151148.0001109s2002 inua 001 0 eng  a7bcbccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 11-09-00apv11 2002-04-12 2 copies to ASCDajf00 2002-04-18;cjf03 2002-08-20 to Subj.djf09 2002-08-21 to slejf25 2002-09-10 2 copies to Deweyaaa05 2002-10-04 a 00110884  a0735710902 aDLCcDLCdDLC apcc00aQA76.73.P98bH65 200200a005.2/7622211 aHolden, Steve,d1950-10aPython Web programming /cSteve Holden [with David Beazley]. aIndianapolis, Ind. :bNew Riders,cc2002. axxi, 691 p. :bill. ;c23 cm. aIncludes index. 0aPython (Computer program language) 0aInternet programming. 0aWeb sitesxDesign.1 aBeazley, David M.01049cam 22002534a 45000010009000000050017000090080041000269060045000679250044001129550148001560100017003040200015003210400018003360420008003540500026003620820017003881000018004052450047004232600052004703000066005225040051005885380117006396500039007561216916820010522141328.0000911s2000 nju b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc16 09-11-00; jf02 09-12-00 ; jf11 to sl 9-12-00; jf12 to Dewey 09-14-00; aa05 09-14-00; CIP Ver. jf02 05-11-01; jf12 to BCCD 05-22-01 a 00047856  a0130260363 aDLCcDLCdDLC apcc00aQA76.73.P98bC48 200100a005.13/32211 aChun, Wesley.10aCore python programming /cWesley J. Chun. aUpper Saddle River, NJ :bPrentice Hall,c2001. axxix, 771 p. ;c24 cm. +e1 computer optical disc (4 3/4 in.) aIncludes bibliographical references and index. aSystem requirements for accompanying computer disc: Windows 9x/Me/NT/2000; a Web brouser; Macintosh; UNIX/Linux. 0aPython (Computer program language)00948cam 22002654a 45000010009000000050017000090080041000269060045000679250044001129550133001560100017002890200015003060400018003210420008003390500026003470820017003731000021003902450055004112600038004663000036005045040051005406500039005916500036006306300016006661213218820010817152505.0000804s2000 ctua b 001 0 eng  a7bcbccorignewd2encipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pb05 08-04-00;jfoo 08-08-00;cjf03 2001-07-18 to Subj.djf02 2001-07-19 to slejf25 2001-07-31 to Deweyaaa20 2001-08-17 a 00697831  a1884777813 aDLCcDLCdDLC apcc00aQA76.73.P98bG73 200000a005.13/32211 aGrayson, John E.10aPython and Tkinter programming /cJohn E. Grayson. aGreenwich, CT :bManning,cc2000. axxiii, 658 p. :bill. ;c24 cm. aIncludes bibliographical references and index. 0aPython (Computer program language) 0aTcl (Computer program language)00aTk toolkit.00767nam 22002295a 45000010009000000050017000090080041000260350022000679060045000899250044001349550020001780100017001980200015002150400013002300420008002432450081002512600079003322630009004113000012004204400021004329630084004531337832520031020153106.0031020s2003 inu 000 0 eng  a(DLC) 2003114351 a0bibccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc10 2003-10-20 a 2003114351 a1592000770 aDLCcDLC apcc00aGame programming with Python, Lua, and Ruby /c[edited by] Estelle Manticas. aIndianapolis, IN :bPremier Press, a Division of Course Technology,c2003. a0311 ap.ccm. aGame development aMargaret Bauer ; phone (812) 273-0561 ; fax null email margaret_bauer@yahoo.com01121cam 22002414a 45000010009000000050017000090080041000269060045000679250044001129550362001560100017005180200015005350400018005500420008005680500026005760820017006021000027006192450058006462600052007043000033007565040051007896500039008401256552920030227150222.0011016s2002 njua b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2001-10-16 to ASCD;cjf05 2001-10-17 to subj.djf04 2001-10-17 to S.L.ejf25 2001-10-25 to Deweyaaa20 2001-10-26aps11 2002-01-15 bk rec'd, to CIP ver.fjp07 2002-02-13ajp00 2002-03-08gjp85 2002-03-08 to BCCD; copy 2 added jf16 to BCCD 07-18-02ajf00 2003-01-29ajf07 2003-02-27 somehow copy 1 got back into the CIP ver. stream (handed to acting TL) a 2001055411 a0130409561 aDLCcDLCdDLC apcc00aQA76.73.P98bC47 200200a005.13/32211 aChristopher, Thomas W.10aPython programming patterns /cThomas W. Christopher. aUpper Saddle River, NJ :bPrentice Hall,c2002. axix 538 p. :bill. ;c24 cm. aIncludes bibliographical references and index. 0aPython (Computer program language)01062cam 22002778a 45000010009000000050017000090080041000269060045000679250044001129550120001560100017002760200028002930400013003210420008003340500026003420820018003681000024003862450134004102600041005442630009005853000011005946500039006056500037006446500039006819630064007201275256420020426115101.0020424s2002 mau 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc21 2002-04-24 to ASCDcjf05 2002-04-25 to subj.djf09 2002-04-25 to slejf25 2002-04-26 to Deweyaaa20 2002-04-26 a 2002066565 a0201616165 (alk. paper) aDLCcDLC apcc00aQA76.73.P98bH54 200200a005.2/7622211 aHightower, Richard.10aPython programming with the Java class libraries :ba tutorial for building Web and Enterprise applications /cRichard Hightower. aBoston, MA :bAddison-Wesley,c2002. a0207 ap. cm. 0aPython (Computer program language) 0aJava (Computer program language) 0aApplication softwarexDevelopment. aMarilyn Rash, 617-848-6509; email: timothy.nicholls@awl.com01012cam 22002294a 45000010009000000050017000090080041000269060045000679250044001129550192001560100017003480200028003650400018003930420008004110500026004190820017004451000017004622450151004792600042006303000071006726500039007431216723920010608101527.0000908s2001 mau b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc21 09-08-00;jf05 (desc) 09/08/00 ; jf11 to sl 9-11-00; jf12 to Dewey 09-12-00;aa03 9-12-00;CIP ver jf05 to sl 01/11/01; jf12 to BCCD 02-01-01; copy 2 added jf16 to BCCD 04-24-01 a 00046921  a0201709384 (alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P48bG38 200100a005.13/32211 aGauld, Alan.10aLearn to program using Python :ba tutorial for hobbyists, self-starters, and all who want to learn the art of computer programming /cAlan Gauld. aReading, MA :bAddison-Wesley,c2001. axii, 270 p. ;c24 cm.e+ 1 computer laser optical disc (4 3/4 in.) 0aPython (Computer program language)00935cam 22002534a 450000100070000000500170000700800410002403500210006590600450008692500440013195501480017501000170032302000220034004000180036204200080038005000260038808200170041410000160043124500610044726000390050830000750054765000390062270000200066120525620000830103214.0990629s2000 caua 001 0 eng  9(DLC) 99065006 a7bcbccorignewd2eopcnf19gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apn08/e-pcn 06-29-99; to ASCD pb02 06-10-00; jf00 06-13-00; jf03 08-17-00 ; jf11 to sl 8-22-00; jf25 2 copies to Dewey 08-24-00; aa19 08-30-2000 a 99065006  a0761523340 (pbk.) aDLCcDLCdDLC apcc00aQA76.73.P98bA48 199900a005.13/32211 aAltom, Tim.10aProgramming with Python /cTim Altom with Mitch Chapman. aRocklin, CA :bPrima Tech,cc1999. axxxiv, 372 p. :bill. ;c24 cm. +e1 computer optical disc (4 3/4 in.) 0aPython (Computer program language)1 aChapman, Mitch.01214cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550202001560100017003580200047003750400018004220420008004400500024004480820017004721000019004892450079005082600051005873000058006386500026006966500048007226500040007706500049008108560077008591328439520040226131230.0030722s2004 maua 001 0 eng  a7bcbccorignewd1eecipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ajf05 2003-07-22cjf05 2003-07-22 to subj.djf09 2003-07-22 to slejf12 2003-07-23 to Deweyaaa20 2003-07-29ajf00 2004-01-29fjf07 2004-02-02ejf12 2004-02-03 to BCCDajf16 2004-02-26 copy2 to BCCD a 2003016400 a1584502681 (Pbk. with CD-ROM : alk. paper) aDLCcDLCdDLC apcc00aQA76.625b.J66 200400a005.2/762221 aJones, M. Tim.10aBSD Sockets programming from a multi-language perspective /cM. Tim Jones. aHingham, Mass. :bCharles River Media,cc2004. axix, 444 p. :bill. ;c24 cm. +e1 CD-ROM (4 3/4 in.) 0aInternet programming. 0aComputer networksxDesign and construction. 0aInternetworking (Telecommunication) 0aProgramming languages (Electronic computers)413Table of contentsuhttp://www.loc.gov/catdir/toc/ecip047/2003016400.html01113cam 2200277 a 4500001000800000005001700008008004100025035002100066906004500087955011600132010001700248020003300265040001800298050002300316082001600339245009800355260004600453300003300499440004900532504006400581650005100645650003600696650002300732700001800755991006200773159816719981112152315.2940902s1995 maua b 001 0 eng  9(DLC) 94034264 a7bcbccorignewd1eocipf19gy-gencatlg apc18 to ja00 09-02-94; jf06 to subj 09-06-94; jf11 to sl 09-06-94; jf12 09-06-94 to ddc; CIP ver. jc03 11-23-94 a 94034264  a0201633612 (acid-free paper) aDLCcDLCdDLC00aQA76.64b.D47 199500a005.1/222000aDesign patterns :belements of reusable object-oriented software /cErich Gamma ... [et al.]. aReading, Mass. :bAddison-Wesley,cc1995. axv, 395 p. :bill. ;c25 cm. 0aAddison-Wesley professional computing series aIncludes bibliographical references (p. 375-381) and index. 0aObject-oriented programming (Computer science) 0aComputer softwarexReusability. 0aSoftware patterns.1 aGamma, Erich. bc-GenCollhQA76.64i.D47 1995p00011185514tCopy 1wBOOKS01233cam 2200289 a 45000010009000000050017000090080041000269060045000679250044001129550226001560100017003820200034003990400013004330500024004460820014004702450065004842460015005492500012005642600043005763000021006195000111006405040068007516500026008196500025008457000022008707000051008921237004420020812080859.0010405s2001 mau b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc20 to ja00 04-05-01; jp07 04-11-01 sent to sl;jp85 to Dewey 04-19-01; aa20 04-20-01aps13 2001-08-16 bk rec'd, to CIP ver.fjf07 2001-08-20ajf00 2001-08-20gjf12 2001-08-23 to bccdajf01 2001-09-13 copy 2 added to BCCD a 2001031277 a0262032937 (hc. : alk. paper) aDLCcDLC00aQA76.6b.I5858 200100a005.122100aIntroduction to algorithms /cThomas H. Cormen ... [et al.].30aAlgorithms a2nd ed. aCambridge, Mass. :bMIT Press,cc2001. axxi, 1180 p. cm. aRev. ed. of: Introduction to algorithms / Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest. c1990. aIncludes bibliographical references (p. [1127]-1130) and index. 0aComputer programming. 0aComputer algorithms.1 aCormen, Thomas H.1 aCormen, Thomas H.tIntroduction to algorithms.01009pam 2200265 a 4500001000800000005001700008008004100025035002100066906004500087955011600132010001700248020002200265040001800287050002600305082001700331100001800348245003700366260005300403300003500456440005200491500002700543504006400570650004400634991006500678303540919960425075058.2951006s1996 njua b 001 0 eng  9(DLC) 95045017 a7bcbccorignewd1eocipf19gy-gencatlg apc17 RUSH to ja00 10-06-95;jf05 to subj. 10/06/95; jf04 to S.L. 10-06-95; jf14 10-10-95; CIP ver. jk14 04-22-96 a 95045017  a0133708756 (pbk.) aDLCcDLCdDLC00aQA76.73.C28bG69 199600a005.13/32201 aGraham, Paul.10aANSI Common Lisp /cPaul Graham. aEnglewood Cliffs, N.J. :bPrentice Hall,cc1996. axiii, 432 p. :bill. ;c23 cm. 0aPrentice Hall series in artificial intelligence a"An Alan R. Apt book." aIncludes bibliographical references (p. 401-414) and index. 0aCOMMON LISP (Computer program language) bc-GenCollhQA76.73.C28iG69 1996p00034751468tCopy 1wBOOKS \ No newline at end of file diff --git a/tags/rel-1.2/test/marc8.py b/tags/rel-1.2/test/marc8.py deleted file mode 100644 index ed09748..0000000 --- a/tags/rel-1.2/test/marc8.py +++ /dev/null @@ -1,20 +0,0 @@ -from pymarc import marc8_to_unicode -from unittest import TestCase - -class MARC8Test(TestCase): - - def test_marc8_to_unicode(self): - marc8_file = file('test/test_marc8.txt') - utf8_file = file('test/test_utf8.txt') - count = 0 - - while True: - marc8 = marc8_file.readline().strip("\n") - utf8 = utf8_file.readline().strip("\n") - if marc8 == '' or utf8 == '': - break - count += 1 - self.assertEquals(marc8_to_unicode(marc8).encode('utf8'), utf8) - - self.assertEquals(count, 1514) - diff --git a/tags/rel-1.2/test/one.dat b/tags/rel-1.2/test/one.dat deleted file mode 100644 index a43cf54..0000000 --- a/tags/rel-1.2/test/one.dat +++ /dev/null @@ -1 +0,0 @@ -00755cam 22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500fol05731351 IMchF20000613133448.0000107s2000 nyua 001 0 eng  a 00020737  a0471383147 (paper/cd-rom : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P22bM33 200000a005.13/32211 aMartinsson, Tobias,d1976-10aActivePerl with ASP and ADO /cTobias Martinsson. aNew York :bJohn Wiley & Sons,c2000. axxi, 289 p. :bill. ;c23 cm. +e1 computer laser disc (4 3/4 in.) a"Wiley Computer Publishing." 0aPerl (Computer program language)00aActive server pages.00aActiveX. \ No newline at end of file diff --git a/tags/rel-1.2/test/reader.py b/tags/rel-1.2/test/reader.py deleted file mode 100644 index 52bf586..0000000 --- a/tags/rel-1.2/test/reader.py +++ /dev/null @@ -1,45 +0,0 @@ -import util -import unittest -import pymarc -import re - -class MARCReaderFileTest( unittest.TestCase ): - """ - Tests for the pymarc.MARCReader class which provides iterator - based access to a MARC file. - """ - - def setUp( self ): - self.reader = pymarc.MARCReader(file('test/test.dat')) - - def test_iterator( self ): - count = 0 - for record in self.reader: - count += 1 - self.assertEquals(count, 10, 'found expected amt of MARC21 records') - - def test_string( self ): - ## basic test of stringification - startsWithLeader = re.compile( "^=LDR" ) - hasNumericTag = re.compile( "\n=\d\d\d " ) - for record in self.reader: - text = str(record) - self.failUnless( startsWithLeader.search(text), 'got leader') - self.failUnless(hasNumericTag.search(text), 'got a tag') - -class MARCReaderStringTest(MARCReaderFileTest): - - def setUp(self): - raw = file('test/test.dat').read() - self.reader = pymarc.reader.MARCReader(raw) - - # inherit same tests from MARCReaderTestFile - -def suite(): - fileSuite = unittest.makeSuite(MARCReaderFileTest, 'test') - stringSuite = unittest.makeSuite(MARCReaderStringTest, 'test') - suite = unittest.TestSuite((fileSuite, stringSuite)) - return suite - -if __name__ == "__main__": - unittest.main() diff --git a/tags/rel-1.2/test/record.py b/tags/rel-1.2/test/record.py deleted file mode 100644 index 331e1a1..0000000 --- a/tags/rel-1.2/test/record.py +++ /dev/null @@ -1,178 +0,0 @@ -import util -import unittest - -from pymarc import Record, Field -from pymarc.exceptions import * - -class RecordTest( unittest.TestCase ): - - def test_add_field( self ): - record = Record() - field = Field( - tag = '245', - indicators = [ '1', '0' ], - data = [ 'a', 'Python', 'c', 'Guido' ] ) - record.addField( field ) - self.failUnless( field in record.fields, msg='found field' ) - - def test_quick_access( self ): - record = Record() - title = Field( - tag = '245', - indicators = [ '1', '0' ], - data = [ 'a', 'Python', 'c', 'Guido' ] ) - record.addField( title ) - self.assertEqual( record['245'], title, 'short access' ) - self.assertEqual( record['999'], None, 'short access with no field' ) - - def test_field_not_found( self ): - record = Record() - self.assertEquals( len( record.fields ), 0 ) - - def test_find( self ): - record = Record() - subject1 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Programming Language' ] ) - record.addField( subject1 ) - subject2 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Object Oriented' ] ) - record.addField( subject2 ) - found = record.getFields( '650' ) - self.assertEqual( found[0], subject1, 'getFields() item 1' ) - self.assertEqual( found[0], subject1, 'getFields() item 2' ) - found = record.getFields() - self.assertEqual(len(found), 2, 'getFields() with no tag') - - def test_multi_find( self ): - record = Record() - subject1 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Programming Language' ] ) - record.addField( subject1 ) - subject2 = Field( - tag = '651', - indicators = [ '', '0' ], - data = [ 'a', 'Object Oriented' ] ) - record.addField( subject2 ) - found = record.getFields( '650', '651' ) - self.assertEquals( len(found), 2 ) - - def test_bad_leader( self ): - record = Record() - self.failUnlessRaises( RecordLeaderInvalid, - record.decodeMARC, 'foo' ) - - def test_bad_base_address( self ): - record = Record() - self.failUnlessRaises( BaseAddressInvalid, - record.decodeMARC, '00695cam 2200241Ia 45x00' ) - - def test_title( self ): - record = Record() - self.assertEquals( record.title(), None ) - record.addField( Field( '245', [0,1], - subfields=[ 'a', "Foo :", 'b', 'bar' ] ) ) - self.assertEquals( record.title(), 'Foo :bar' ) - - record = Record() - record.addField( Field( '245', [0,1], - subfields=[ 'a', "Farghin" ] ) ) - self.assertEquals( record.title(), "Farghin" ) - - def test_isbn( self ): - record = Record() - self.assertEquals( record.isbn(), None ) - record.addField( Field( '020', [0,1], subfields=['a', '123456789' ] ) ) - self.assertEquals( record.isbn(), '123456789' ) - - def test_author( self ): - record = Record() - self.assertEquals( record.author(), None) - record.addField( Field( '100', [1,0], subfields=['a', 'Bletch, Foobie,', 'd', '1979-1981.'] ) ) - self.assertEquals( record.author(), 'Bletch, Foobie, 1979-1981.') - - record = Record() - record.addField( Field( '130', [0,' '], subfields=['a', 'Bible.', 'l', 'Python.'] ) ) - self.assertEquals( record.author(), None) - - def test_uniformtitle( self ): - record = Record() - self.assertEquals( record.uniformtitle(), None ) - record.addField( Field( '130', [0,' '], - subfields=[ 'a', "Tosefta.", 'l', "English.", 'f', "1977." ] ) ) - self.assertEquals( record.uniformtitle(), "Tosefta. English. 1977." ) - - record = Record() - record.addField( Field( '240', [1,4], - subfields=[ 'a', "The Pickwick papers.", 'l', "French." ] ) ) - self.assertEquals( record.uniformtitle(), "The Pickwick papers. French." ) - - def test_subjects( self ): - record = Record() - r1 = '=630 0\\$aTosefta.$lEnglish.$f1977.' - r2 = '=600 10$aLe Peu, Pepe.' - shlist = [r1, r2] - self.assertEquals( record.subjects(), [] ) - record.addField( Field( '630', [0,' '], - subfields=[ 'a', "Tosefta.", 'l', "English.", 'f', "1977." ] ) ) - record.addField( Field( '730', [0,' '], - subfields=[ 'a', "Tosefta.", 'l', "English.", 'f', "1977." ] ) ) - record.addField( Field( '600', [1,0], - subfields=[ 'a', "Le Peu, Pepe." ] ) ) - self.assertEquals( len( record.subjects() ), 2 ) - self.assertEquals( record.subjects()[0].__str__(), r1 ) - self.assertEquals( record.subjects()[1].__str__(), r2 ) - rshlist = [rsh.__str__() for rsh in record.subjects()] - self.assertEquals( shlist, rshlist ) - - def test_added_entries( self ): - record = Record() - ae1 = '=730 0\\$aTosefta.$lEnglish.$f1977.' - ae2 = '=700 10$aLe Peu, Pepe.' - aelist = [ae1, ae2] - self.assertEquals( record.addedentries(), [] ) - record.addField( Field( '730', [0,' '], - subfields=[ 'a', "Tosefta.", 'l', "English.", 'f', "1977." ] ) ) - record.addField( Field( '700', [1,0], - subfields=[ 'a', "Le Peu, Pepe." ] ) ) - record.addField( Field( '245', [0,0], - subfields=[ 'a', "Le Peu's Tosefa." ] ) ) - self.assertEquals( len( record.addedentries() ), 2 ) - self.assertEquals( record.addedentries()[0].__str__(), ae1 ) - self.assertEquals( record.addedentries()[1].__str__(), ae2 ) - raelist = [rae.__str__() for rae in record.addedentries()] - self.assertEquals( aelist, raelist ) - - def test_location( self ): - record = Record() - loc1 = '=852 \\\\$aAmerican Institute of Physics.$bNiels Bohr Library and Archives.$eCollege Park, MD' - loc2 = '=852 01$aCtY$bMain$hLB201$i.M63' - loclist = [loc1, loc2] - self.assertEquals( record.location(), [] ) - record.addField( Field('040', [' ',' '], - subfields=[ 'a', 'DLC', 'c', 'DLC' ] ) ) - record.addField( Field('852', [' ',' '], - subfields=[ 'a', 'American Institute of Physics.', - 'b', 'Niels Bohr Library and Archives.', - 'e', 'College Park, MD' ] ) ) - record.addField( Field('852', [0,1], - subfields=['a', 'CtY', 'b', 'Main', 'h', 'LB201', 'i', '.M63'] ) ) - self.assertEquals( len( record.location() ), 2 ) - self.assertEquals( record.location()[0].__str__(), loc1 ) - self.assertEquals( record.location()[1].__str__(), loc2 ) - rloclist = [rloc.__str__() for rloc in record.location()] - self.assertEquals( loclist, rloclist ) - -def suite(): - suite = unittest.makeSuite( RecordTest, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - - diff --git a/tags/rel-1.2/test/test.dat b/tags/rel-1.2/test/test.dat deleted file mode 100644 index 68d6dad..0000000 --- a/tags/rel-1.2/test/test.dat +++ /dev/null @@ -1 +0,0 @@ -00755cam 22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500fol05731351 IMchF20000613133448.0000107s2000 nyua 001 0 eng  a 00020737  a0471383147 (paper/cd-rom : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P22bM33 200000a005.13/32211 aMartinsson, Tobias,d1976-10aActivePerl with ASP and ADO /cTobias Martinsson. aNew York :bJohn Wiley & Sons,c2000. axxi, 289 p. :bill. ;c23 cm. +e1 computer laser disc (4 3/4 in.) a"Wiley Computer Publishing." 0aPerl (Computer program language)00aActive server pages.00aActiveX.00647pam 2200241 a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001500161100002600176245006700202260003800269263000900307300001100316650003700327650002500364700001600389fol05754809 IMchF20000601115601.0000203s2000 mau 001 0 eng  a 00022023  a1565926994 aDLCcDLCdDLC apcc00aQA76.73.P22bD47 200000a005.742211 aDescartes, Alligator.10aProgramming the Perl DBI /cAlligator Descartes and Tim Bunce. aCmabridge, MA :bO'Reilly,c2000. a1111 ap. cm. 0aPerl (Computer program language) 0aDatabase management.1 aBunce, Tim.00605cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077040001800094042000800112050002700120082001700147100002100164245005500185260004500240300002600285504005100311650003700362fol05843555 IMchF20000525142739.0000318s1999 cau b 001 0 eng  a 00501349  aDLCcDLCdDLC apcc00aQA76.73.P22bB763 199900a005.13/32211 aBrown, Martin C.10aPerl :bprogrammer's reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axix, 380 p. ;c22 cm. aIncludes bibliographical references and index. 0aPerl (Computer program language)00579cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002700135082001700162100002100179245005500200260004500255300003600300650003700336fol05843579 IMchF20000525142716.0000318s1999 caua 001 0 eng  a 00502116  a0072120002 aDLCcDLCdDLC apcc00aQA76.73.P22bB762 199900a005.13/32211 aBrown, Martin C.10aPerl :bthe complete reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axxxv, 1179 p. :bill. ;c24 cm. 0aPerl (Computer program language)00801nam 22002778a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001800156100002000174245008800194250003200282260004100314263000900355300001100364650003700375650003600412650002600448700002500474700002400499fol05848297 IMchF20000524125727.0000518s2000 mau 001 0 eng  a 00041664  a1565924193 aDLCcDLC apcc00aQA76.73.P22bG84 200000a005.2/7622211 aGuelich, Scott.10aCGI programming with Perl /cScott Guelich, Shishir Gundavaram & Gunther Birznieks. a2nd ed., expanded & updated aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language) 0aCGI (Computer network protocol) 0aInternet programming.1 aGundavaram, Shishir.1 aBirznieks, Gunther.00665nam 22002298a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002700130082001700157111005200174245008600226250001200312260004100324263000900365300001100374650005000385fol05865950 IMchF20000615103017.0000612s2000 mau 100 0 eng  a 00055759  a0596000138 aDLCcDLC apcc00aQA76.73.P22bP475 200000a005.13/32212 aPerl Conference 4.0d(2000 :cMonterey, Calif.)10aProceedings of the Perl Conference 4.0 :bJuly 17-20, 2000, Monterey, California. a1st ed. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)vCongresses.00579nam 22002178a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100002800173245006200201260004100263263000900304300001100313650003700324fol05865956 IMchF20000615102948.0000612s2000 mau 000 0 eng  a 00055770  a1565926099 aDLCcDLC apcc00aQA76.73.P22bB43 200000a005.13/32211 aBlank-Edelman, David N.10aPerl for system administration /cDavid N. Blank-Edelman. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)00661nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100001700173245006700190250001200257260004100269263000900310300001100319650003700330700002300367700001700390fol05865967 IMchF20000615102611.0000614s2000 mau 000 0 eng  a 00055799  a0596000278 aDLCcDLC apcc00aQA76.73.P22bW35 200000a005.13/32211 aWall, Larry.10aProgramming Perl /cLarry Wall, Tom Christiansen & Jon Orwant. a3rd ed. aCambridge, Mass. :bO'Reilly,c2000. a0007 ap. cm. 0aPerl (Computer program language)1 aChristiansen, Tom.1 aOrwant, Jon.00603cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001700161100003200178245006000210260005700270300003300327650003700360fol05872355 IMchF20000706095105.0000315s1999 njua 001 0 eng  a 00500678  a013020868X aDLCcDLCdDLC apcc00aQA76.73.P22bL69 199900a005.13/32211 aLowe, Vincentq(Vincent D.)10aPerl programmer's interactive workbook /cVincent Lowe. aUpper Saddle River, NJ :bPrentice Hall PTP,cc1999. axx, 633 p. :bill. ;c23 cm. 0aPerl (Computer program language)00696nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020002800094040001300122042000800135050002600143082001700169100002600186245004400212260005100256263000900307300001100316500002000327650003700347650001700384650004100401fol05882032 IMchF20000707091904.0000630s2000 cau 001 0 eng  a 00058174  a0764547291 (alk. paper) aDLCcDLC apcc00aQA76.73.P22bF64 200000a005.13/32212 aFoster-Johnson, Eric.10aCross-platform Perl /cEric F. Johnson. aFoster City, CA :bIDG Books Worldwide,c2000. a0009 ap. cm. aIncludes index. 0aPerl (Computer program language) 0aWeb servers. 0aCross-platform software development. \ No newline at end of file diff --git a/tags/rel-1.2/test/test_marc8.txt b/tags/rel-1.2/test/test_marc8.txt deleted file mode 100644 index d656f3f..0000000 --- a/tags/rel-1.2/test/test_marc8.txt +++ /dev/null @@ -1,1514 +0,0 @@ -(3YhOI,(B (3eMeO(B. -(3cja(B (3SbWJ(B (3GdedcjI(B (3aj(B (3eUQ?(B : -(3GdWHYI(B 1. -(3GdbGgQI(B : -$1!S+!#!'`X!_s(B. -$1!Os!0!!#!!A3'44(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!!!!m(B $1i$N(B $1!X$-SD(B $1!`;!0$!\g(B / -$1!D&!0a(B : -$1!X$-SD(B $1!`;!0$!\g(B, -$1!:g!D&(B $1!1:!0m(B, -$1!X$-SD(B $1!`;!0$!\g(B, -$1i%$i%.i%ji%9(B $1!BX!:`!5=(B : -$1!D&!0a(B : -$1!Tk!Xl(B $1!Tk!BX!:`(B $1!Y4!!L$(B $1!=>(B, -$1!Bk!0d(B $1i$Di$Ri$K(B $1i$+i$Xi$ii$:(B : -$1!WN!JH(B. -$1!D&!0a(B : -$1!X$-SD(B $1!`;!0$!\g(B, -$1!0-!L,(B $1i$N(B $1!X\(B : -$1!D&!0a(B : -$1!05!L$(B $1!:[!0!(B, -$1!X$-SD(B $1!`;!0$!\g(B, -$1!GzK\[(B $1!0!!9'(B, -$1!X$-SD(B $1!`;!0$!\g(B, -$1!TX!U}i!&i%7i%'i%$i%/i%9i%Ti%"i!&i%(i%ji%*i%Ci%H(B / -$1!Os(B 1$1!JH(B. -$1!D&!0a(B : -$1!D-!;S(B $1!TX!U}(B, -$1!]y'O@(B $1-1w!1W(B, -$1!D-!;S(B $1!TX!U}(B, -$1!15!0;!^U(B $1!_0!5=(B, -$1!X$-SD(B $1!`;!0$!\g(B $1!Y$(B : -$1!D&!0a(B : -$1!KG!0s(B $1!X\!0d!Y$(B $1!5+!CU(B ; -$1!X$-SD(B $1!`;!0$!\g(B, -(3THjdj,(B (3YHO(B (3GdQMef(B. -(3GdcdeI(B (3GdYQHjI(B : -[Saudi Arabia] : -(3cJGH(B (3GdTQb(B (3GdGhSW(B -(3ecGfI(B (3GdEHGVjI(B (3aj(B (3GdMVGQI(B (3GdESdGejI(B / -(3GdWHYI(B 1. -[(3GdbGgQI(B] : -$1!X$-SD(B $1!`;!0$!\g(B, -$1!:m!Ci(B $1!X$-SD(B $1!`;!0$!\g(B $1!3"!_A(B. -$1!WN!JH(B. -$1!D&!0a(B : -$1!X$-SD(B $1!`;!0$!\g(B $1!3"!_A(B. -$1!<7!V3(B $1!R;!0s!:M(B, -$1!;%i$7i$$(B $1'Rt(B : -$1!D&!0a(B : -$1!X$-SD(B $1!`;!0$!\g(B, -$1!X$-SD(B $1!`;!0$!\g(B, -$1!(B $1!RA!Tk(B $1'5+'CU(B ; -(3aQRGO,(B (3YHO(B (3GdMSjf(B. -(3GdefgL(B (3aj(B (3JGQjN(B (3GdCOH(B (3GdYQHj(B : -Tehran : -$1!8x(B $1!D3!Bu(B. -$1!G[!`[(B $1!C\!1W(B / -Kuala Lumpur : -$1!08!WX(B $1!3K!JH(B $1!Pn!3W(B ; -$1!:M!Cg(B, -$1!C{!<5(B $1!Bs'X<(B / -[Singapore] : -$1!:M!Cg(B, -(3LGFRI(B (3SdWGf(B (3GdYhjS(B (3GdKbGajI(B : -(3GdTGQbI(B : -(3efThQGJ(B (3GJMGO(B (3cJGH(B (3hGOHGA(B (3GdGeGQGJ(B -(3eDSSI(B (3SdWGf(B (3Hf(B (3Ydj(B (3GdYhjS(B (3GdKbGajI(B. -(3GJMGO(B (3cJGH(B (3hCOHGA(B (3GdEeGQGJ(B. -$1!By'4U!#!!F\!#!!7u!#!!1?!JU!#!'^i!Pn!#!!5#!#!!3*!#!!35'2f!#!'X}!@z!#!!4x!KH(B : -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -$1!5t(B $1!1a!04(B $1';@'[4(B $1!5w(B $1!0q(B $1!M"(B $1!@&'Rw(B $1'?n!5"(B / -[$1'^L!C%(B] : -$1!5t(B $1!1a!04(B, -$1!04!3((B $1!5@!D$(B $1!MI!9f(B. -$1!4c';2!(B $1!O2'43!;P(B. -$1'=*!X$(B $1'8t!Bo(B $1!T&!G4'4U(B $1!4c';2!.!Hu(B $1'T2(B $1!Na'CZ(B $1'YK!_z(B -$1!Os(B1$1!JH(B. -$1!4I!0a!!#!!7t!CU!`y(B $1!V+!#!!BK!It!#!!\S!CU!#!KN7!ON!#!!Y$!UN!#!!MB!]t!#!!P{!=<(B / -$1!BK!It!#!!\S!CU!#!KN7!ON!#!!Y$!UN!#!!MB!]t!#!!P{!=<(B -$1!7o'2>!#!!7t!CU!`y(B $1!V+!#!!BK!It!#!!\S!CU!#!KN7!ON!#!!Y$!UN!#!!MB!]t!#!!P{!=<(B -$1!Os(B1$1!JH(B. -$1!4I!0a!!#!!7t!CU!`y(B -$1!\l(B $1!F]!O$(B, -$1'`v#Nl(B : -$1!\l(B $1!F]!O$(B $1!`1'EN(B $1'XN'Y$!_A(B -$1!WN!JH(B. -[Singapore] : -1950$1oL(oL}!#!o]OoPpoJ6!#!oVi!#!o\eoIo!#!oR_o]J!#!oU~!#!oVj!#!oT"oOh!#!oW=oQX!#!oVi!#!oQaoIg!#!(B/ -$1oS!oV>!#!o[ZoQ=oT#!#!(B: -$1o\eoIo!#!o].oL}oR_!#!oVi!#!oW'!#!oVloT$(B ; -$1o].oL}oR_!#!oUaoInoS?!#!oJ6o]K!#!oUaoIn(B -$1o\e!#!o]soS[(B. -$1o\eoIo!#!oW=oT%!#!oPJo]?!#!oUaoInoVG(B. -$1!BK!It!#!!?V!G:!#!!C[!0n!#!!XR!Dc(B / -$1!C[!0n!#!!XR!Dc(B -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -"$1!Ci!CU!#!!B=!]t!#!!BK!It!#!!?V!G:!R0!#!!\S!8!!#!!3K!7u!#!!M"!#!i!T!1J!R_!#!!5w!#!!04!?u!#!!M^!;3!#!!XR!CU!#!!7e!C-!#!!C[!0n!#!!0T!4W!Dci!U!#!(B($1!PA!O(B $1!Df!:M(B, -$1!0!'_N(B $1!T5!Tx!`"(B / -[s.l.] : -$1!4l'U<(B $1!1?'4`(B $1!BX'5+(B. -$1!3i!E[!V0(B $1!D-!(B $1!X(B $1';7!1?(B $1'X8'3|(B $1':`'6>(B $1!1?!6-!_A(B -$1!WN!JH(B. -[Singapore] : -$1!Bg(B $1!DG!a)(B. - $1!;I(B $1!0e(B. -$1'R{(B $1K_p!C%(B $1!7z(B $1!6@!G!(B : -$1!;I(B $1!0e(B $1!N%!P.(B $1!;E'Xi(B -$1!WN!JH(B. -Singapore : -$1!=x'CU(B ; -$1!L}(B $1!U1(B. -$1!L}(B $1!U1(B $1!BM!BX'\O(B / -$1!WN!JH(B. -Singapore : -$1!Be!4&!8+(B $1!Be'U<(B $1!1?'2>(B $1'5+'CU(B -$1!Be!4&!8+(B $1!Be'U<(B $1!1?'2>(B $1!1?!6-!_A(B ; -$1'E*(B $1!>0(B, -$1!db(B $1!Be'U<(B $1!BX'8d(B $1'Y$(B $1!5#(B $1!4l'U<(B $1!BX':`(B / -$1!WN!JH(B. -Singapore : -$1!Be!4&!8+(B $1!Be'U<(B $1!1?'2>(B $1!1?!6-!_A(B ; -$1!5t(B $1!GE!<&(B. -$1'9$E7h(B $1!0d!Ky(B / -$1!WN!JH(B. -Singapore : -$1!5t(B $1!GE!<&(B $1!1?!6-(B ; -$1'_#(B $1!0;!_`(B, -$1!Nk!<5(B $1!9%!7y(B $1!6F'E](B $1'If!^v(B : -$1!04K7o(B $1!6F'E-(B $1'Kg!8W(B $1!5w(B $1!BX!4H(B $1!M"'YK'\Q(B -$1!WN!JH(B. -[Singapore] : -$1!T9!87'Qd(B $1!BX!JU'Xm(B / -[$1!T9!87'Qd(B. -$1!T9!87'Qd(B (China). -$1!T9!87'Qd(B (China). -$1!T9!87'Qd(B (China). -$1!04!7o(B $1!5.!0s(B $1!=3!P:(B $1!F*!5=(B $1!7t!Xi(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!(B : -$1!04!9*(B $1!FM!Bo(B $1!9%':`(B $1!04K7o(B $1!;F'BT(B $1!FM!Bo(B $1KN7!ON(B $1!04!=x(B $1'5+'CU(B -$1!\o-HE'3k!Bo(B $1!T&!G4!Bp(B (China) -$1'Kg(B $1!GB!(B $1!Bg!X7(B $1'Xl!`1(B $1!N7!ON(B / -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -$1!A)!P{(B $1!0=(B $1!D((B : -$1'_T!4c(B $1'Yl'Y~(B $1':`!^z(B $1!=3!DC(B 50$1!5t!'CZ(B. -$1!;&!43(B $1!U4!DU(B : -$1'7F!0s(B $1!N#'Y<(B $13BD!S,(B $1!M"(B $1'YK!_z(B -$1!Os(B1$1!JH(B. -$1!F''HW(B : -$1!3'!3((B $1-Fm!O|(B $1KN7!ON(B : -$1!Os(B1$1!JH(B. -$1'^L!Fw(B : -$1!3'!3((B $1!P'!KH(B $1'Y$'5+(B -$1'`N(B $1!1I'U<(B, -$1'\V'7U(B $1!Be!0-'Pp(B : -$1'=*!<5!E(B $1!Pn'Q1(B $1!M"(B $1!KH'Y$(B $1'T2(B $1';1'Zh(B -$1!Os(B1$1!JH(B. -$1'=*!<5(B : -$1'=*!<5(B (China) -$1!?p(B $1!\+(B -$1'V$(B $1!;{!G=(B. -$1!0"(B $1!=3'23(B. -$1'`.(B $1!@m'\D(B. -$1!;e!X$(B $1!5.!Nh!8@(B : -$1!M{!Oe(B $1!7z(B $1!0d(B $1!Nk(B $1!0=(B $1'^U(B -$1!Os(B1$1!JH(B. -$1'I1'_.!(B $1!CU!Pn(B -$1!K3(B $1K7o'QN(B, -$1!Cs(B $1!4&'E7(B. -$1'[4!K}(B $1!Ky!JU(B $1!@,EWF(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!!BX(B $1!N7!ON(B $1!Y$!BX(B; -$1!UZ!F#!1W(B, -$1'V5'(B $1o[loWloT#(B : -$1oT%(B $1o].oWn(B. -$1!F'(B $1!Bw!;x(B. -$1!Gn!2~(B $1!bb!;e(B $1!M"(B $1!S8'=e(B : -$1!@0';B(B $1!=w!<5(B -$1!Os(B2$1!JH(B. -$1'=*!<5(B : -$1'a_'KG(B $1!0=!Bk(B = -$1!=w!<5(B $1!7y'4U(B(China) -$1!=w!<5(B $1!7y'4U(B(China) -$1!4c(B $1'bV'[4(B. -$1!FF'[=(B $1!BA!G4(B $1'Wl!!.!>m(B $1'T2(B $1';1'Zh(B / -$1!Os(B1$1!JH(B. -$1'I&!4c(B : -$1!FH(B $1'I!'D&(B, -$1!0R(B $1'_T(sm(B. -$1'ZO(B $1'Xm!>#(B. -$1!FM!Bo(B $1!BX':`(B $1'Y$!O>(B / -$1!Os(B1$1!JH(B. -$1'I1'_.!!DN!Tx(B : -$1!87!!Y?(B $1!R!(B / -$1!Os(B1$1!JH(B. -$1!^L!C%(B : -$1!4"(B $1!BX!Gb(B, -Confucius. -$1!<:!0/(B $1!C!(B. -$1!4"(B $1!BX!Gb(B, -$1!UW(B $1!G@'\4(B, -$1!Rr!Ih(B $1!7y!!W&(B $1!G6!G%(B $1!M"(B $1!=Q!?b(B, $1'\4!WD(B $1'T2(B $1!@z'Wl(B $1KN7!ON(B / -$1!Os(B1$1!JH(B. -$1!0&!GW!#!FH(B. -$1!123BD(B $1!Ci'X0(B $1!>.!>m(B $1'Y$-J;(B $1!M"(B $1'KG!0s!>4(B $1!R]!;3(B / -$1!Os(B1$1!JH(B. -$1!0&!GW(B : -$1!04K7o(B $1!M"(B $1'KG!0s!>4(B $1'T2(B $1!0d!BX(B $1':`EWF(B $1'5+'CU(B -$1!7y!KH(B $1!1W!>E(B $1'T2(B $1'X)'3|(B $1!B(B, -$1'b^';C(B $1!TP!HG!LG(B, 2004 = -$1!Os(B1$1!JH(B. -$1!4I!0a!.!Hu(B $1!5='Y$(B / -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -"$1)JD!X$(B $1'(B $1'Z"!4)(B $1!3K!JH(B"--P. facing t.p. -$1!:j!0s(B $1!2F!X<(B $1!Z"!B\(B $1!5+!3U(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!4(B $1!<7!O5(B $1'T2(B $1!P'!KH(B = -$1!Os(B1$1!JH(B. -$1!4I!0a!(B / -$1!Os(B1$1!JH(B. -$1'^S!;(B $1!BX!4H(B $1KN7!ON(B $1'5+'CU(B -$1!04K7o(B $1'Yl!;'(B $1!Be'Yx(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!w!FM(B. -$1!a\!59'bV(B $1'4{!5=(B $1'T2(B $1!BX!4H(B $1':`EWF(B $1KN7'X='CZ(B -$1!a\!59'bV!5=(B $1!Be(B $1KN7!ON(B / -$1!a\!59'bV(B $1'4{!5=(B $1'T2(B $1!BX!4H(B $1':`EWF(B $1KN7'X='CZ(B $1'Y$!BX!_A(B -$1!Os(B1$1!JH(B. -$1!=2!5@!.!>m(B $1'T2(B $1'Wl!!_z(B / -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -$1!04!4c(B $1'Yl'Q<(B $1!9%':`(B $1'Yl!BA':`(B $1!4d!8r'bj(B $1';D'F(B, -$1!]>!C!!`y(B $1!5+!O>(B $1!WN!Q[(B / -$1!4I!0a(B $1!Os(B1$1!JH(B. -$1!4I!0a(B : -$1!_#(B $1!;#!>F(B $1!_A(B -$1'D&!4I(B $1!R\!<7'E-(B $1!8(B $1!1?!6-(B $1!Pa'\O(B -$1!Fw(B $1'^='U<(B. -$1!C[(B $1'U<(B. -$1!9%!7q(B $1!'CZ(B . -$1!4c!0a!(B, -$1!Tk!PV(B $1!_"!;6(B $1'Wl!(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1oJ;(B $1oMSoX+(B, -$1oIUoW=(B $1oI!oNnoQ,(B $1oRl(B $1oIDoW?oO/(B $1oX0oWt(B $1oJ(oW?(B $1oUaoIn(B / -$1oS!oV>(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1oYQ(B $1oS/oJ.(B. -OECD $1oJ6oUN(B $1oX)oPz(B $1oInoWI(B $1oVGoYe(B $1oVi(B $1oIooK_oQ,(B $1oS[oV9(B $1oUV(B $1oIZo\e(B $1oUaoIn(B / -$1oS!oV>(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1oJ;(B $1oW=oS](B. -$1o\voW=oQ,(B $1oRl(B $1oW'o[o(B $1oV-(B $1oQZoW/(B $1o\noI?(B $1oQ,oW?(B $1oUaoIn(B / -$1oS!oV>(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1oJ;(B $1oS[oX+(B, -$1oIUoPGoVG(B $1oI{oVk(B $1o\xoRl(B $1oVd(B $1oVSo\e(B $1o\voW=(B $1oInoW?(B $1oQ,oW?(B $1oUaoIn(B / -$1oS!oV>(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1!2?(B $1!1T!E7(B, -$1!2?(B $1!1T!E7(B $1!X4!YJ(B $1!:W!:M(B : -$1!WN!JH(B. -$1(;}!4I!Qd(B $1!Be!k(B $1!A&!88(B $1!M"(B $1!P.!`2(B -$1!Os(B1$1!JH(B. -$1!a)!H$(B : -$1!04!7o(B $1!3(!Kz!bo(B -$1!04!7o(B $1!7o!FM!bo(B -$1!5\(B $1!Hm!Ky(B. -$1!D$(B $1!VF(B $1!T2(B $1!BX!4H(B $1!9%!_z!5y(B / -$1!Os(B2$1!JH(B. -Carle Place, N.Y. : -$1i!T!MO!MHi!U!Pn!3W(B ; -$1!D$(B $1!VF(B, -$1!5t(B $1!@*!0d(B. -$1!Bu!Cd(B $1!a)!H$(B $1!_U!=Y!5=(B (1897-1945) / -$1!a)!H$(B : -$1!Cs(B $1!0w-U-(B. -$1!aq(B $1!?b!>.(B. -$1!3#!;l(B $1!;!!1J(B 50 $1!(B $1'Z=!4)(B $1!3K!JH(B." -$1!\s(B $1!RB(B, -$1!^L'=v(B : -$1!Os(B1$1!JH(B. -$1!a)!H$(B : -$1!04!7o(B $1!3(!Kz!bo(B -$1!04!7o(B $1!7o!FM!bo(B -$1!a)!H$i!&!BX!4Hi!&KN7!ON(B / -$1!a)!H$(B : -$1!5\(B $1!1e!_B(B. -$1!a,(B $1!2A!23(B. -$1!5d(B $1!9%!EN(B. -$1!0}(B $1!?n(B $1!BO!N_!]t(B / -$1!WN!JH(B. -Singapore : -$1!K3(B $1#6j!F'(B. -$1!:|(B $1!;F!C^(B. -$1!04!Bs(B $1'^i!Pn(B $1!8}'QN(B $1!\*!X+(B : -$1!5.:(L(B $1!>#!9'(B $13BD!A,(B $1'\W'CI(B $1'Pp!>'(B $1'Y$!BX!_A(B -$1!a)!H$(B $1!WN!JH(B. -$1!a)!H$(B : -$1!5.:(L(B $1!>#!9'(B, -$1!5.:(L(B $1!>#!9'(B $13BD!A,(B $1'\W'CI(B $1'Pp!>'(B $1'Y$!BX!_A(B $1'Q['[M(B $1!9f'6>'CZ(B. -$1KGa!:|(B $1!T+!IC(B $1![i!Aq(B $1!5=!B\(B / -$1!WN!JH!+4(B -$1!T+!4I!%(B $1!GW!J((B. -$1!04!U<(B $1!CZ!`y(B (Kobe-shi, Japan) -$1!K3(B $1!bt!]L(B. -$1!UV!UH(B $1!Iz'Ms(B / -1$1!JH(B. -$1!T+!4I!4!3[(B $1!04!7o(B / -$1!WN!JH(B. -$1(;}!4I!oS,(B. -$1oWIoS$(B $1oVi(B $1o]8oQ\(B $1oZpoM*(B $1oPu(B $1oUV(B : -$1oYHo[o(B. -$1oS!oV>oT#(B : -$1oV\(B $1oMGoWl(B, -(3Hdabjg,(B (3YHO(B (3Gddg(B (3Hf(B (3MSjf(B (3Hf(B (3YHO(B (3Gddg(B. -(3bhJ(B (3GdCdHGH(B (3ef(B (3eLGfj(B (3Lfj(B (3GdCdHGH(B / -(3JQje,(B (3MVQehJ(B : -(3Rcj,(B (3QeVGf(B (3NejS(B. -(3eaghe(B (3GdSff(B (3GdQHGfjI(B : -(3GdWHYI(B 1. -(3GdbGgQI(B : -(3gPG(B (3gh(B (3GdESdGe(B (3;(B -(3YeGQI,(B (3eMeO(B. -(3bQGAI(B (3GdfU(B (3GdOjfj(B : -(3GdWHYI(B 1. -(3GdbGgQI(B : -(3gPG(B (3gh(B (3GdESdGe(B (3;(B -(3fOhI(B (3GdSjQI(B (3GdfHhjI(B : -(3GdWHYI(B 1. -[Omdurman] : -(3efThQGJ(B (3GdeQcR(B (3;(B -(3EeGe,(B (3MeGOI(B. -(3eHGQc(B (3hGdENhGf(B / -(3GdWHYI(B (3GdYQHjI(B 1. -(3GdegfOSjf(B [Giza] : -$1!Be!YF(B $1!5.!BX(B $1![`!`S!Q|(B / -$1!WN!JH(B. -$1!T+!4I!'7q(B $1!5w(B $1'C-'^U(B -$1!Os(B1$1!JH(B. -$1!4I!0a!!X%(B = -$1!Os(B1$1!JH(B. -$1!4I!0a!!X%i!U'Q[!Q|(B $1!9f'6>'CZ(B. -$1!04K7o(B $1!Os!0Q(B $1'CI!5=(B $1'E_!DB'`y(B. -$1'`y!V+(B $1!FMK7o(B $1(;}'IC(B $1'E_!DB(B $1'4Q'Q[(B / -$1!FMK7o(B $1(;}'IC(B $1'E_!DB(B $1'4Q'Q[(B -$1(;}'IC(B $1'E_!DB(B $1'4Q'Q[(B -$1!Os(B1$1!JH(B. -$1!4I!0a!w(B, - $1!8{!Cr(B $1!9%(B,1966- -$1!?b!L$(B $1!c+!0!(B. -$1KF*!5=':`(B $1i$N(B $1i%]i%8i%7i%gi%Ji%ji%Fi%#(B : -$1!D&!0a(B : -$1!;e!'(B $1i$H(B $1i%+i%ji%-i%ei%ii%`(B $1!E9!\)(B / -$1!WN!JH(B. -$1!D&!0a(B : -$1!v3(B $1-1w!_B(B, -$1!35!Be(B $1!52!RW(B $1'[`!3,(B / -$1!52!RW(B $1'[`!3,(B -$1!D&!0a(B : -$1!0;!1a!L$(B $1!GZ(B, -$1i$3i$Hi$P!+5i$3i$Hi$P!+5i$3i$Hi$P(B / -$1!WN!JH(B. -$1!D&!0a(B : -$1!;E!D$(B $1!0!!T{(B, -$1i$@i$s!WZ(B : -$1!0!!T{(B $1!T&!Oy(B $1!59!_A(B -$1!D&!0a(B : -$1!GzK\[(B $1!4a!\g(B. -$1!;n!Ci(B $1!6<'Xm(B, -$1!]Z!!N_(B $1i$N(B $1!BX':`!+5!bu!T=i$9i$k(B $1!;*!Xf(B -$1!D&!0a(B : -$1!;E!;y(B $1!1W!9'(B, -$1KEa9Y?(B $1K7o'2>(B $1-?n!L5i$Ji$-(B $1!Bs!Ci(B / -$1!D&!0a(B : -$1KYJ9Z/(B $1!Be!Rq!Na(B. -$1!5@!L$(B $1!6a!]:(B, -$1!5@!L$(B $1!6a!]:(B : -$1KYK!Yf(B $1i$N(B $1!2-!KH(B -$1!D&!0a(B : -$1!Ul!;1(B $1!]:E=S(B, -$1!Cs(B $1!J((B, -$1!_'(B $1!WD!N#(B $1i$N(B $1KV1!WF(B $13BD!S,!Y$(B : -$1!WN!JH(B. -$1!D&!0a(B : -$1!_'(B $1!WD!N#(B, -$1!;;!.!>m(B $1i$G(B $1KYKi$oi$k(B : -$1!WN!JH(B. -$1!D&!0a(B : -$1!FF!L$!0S(B $1'3k!0f(B, -$192F!Xi(B $1i$H(B $1!5=K;1(B $1i$N(B $1i$Oi$6i$^(B : -$1!D&!0a(B : -$1!Y"(B $1i$G(B $1i$b(B $1KYJi$ai$k(B $1!Bs!Ci(B $1!5.!0s!5=(B $1!!BX!`y(B. -$1!1a!^q(B $1!F#!(B $1!Na'CZ(B $1i$H(B $1!9%':`(B $1i$N(B $1!@d-?n(B : -$1!WN!JH(B. -$1!D&!0a(B : -$1!Ci!8}(B $1!4d!0=(B, -$1-?nK7o(B $1!Qq3YX!Cd(B $1i$N(B $1!Yo!<^(B $1i$H(B $1!N(!a\'Wl(B / -$1!D&!0a(B : -$1!Z"!B\(B $1!_A!?b(B $1-?n-J;(B $1i$H(B $1!_6!:~!R_(B / -$1!D&!0a(B : -$1!4W!0T!.!>m(B $1i$H(B $1!WD!44(B $1i$r(B $1!R]i$(i$k(B : -$1!0a!\n!>!0!(B. -$13=u!<4(B $1!<]!!0=(B, -$1'b~!V3(B $1!2'(B, -$1!L$!^U(B $1!G"!:M(B, -$1!+%![k!0s(B $1'2>!Bo!+&i$H(B $1i%\i%Gi%#i!&i%]i%ji%Fi%#i%/i%9(B / -$1!0a!\n!(B. -$1!3K'1L"]M(B $1!9(!K3!Nr(B $1!bS!:M!Nk![2i!&!G(!F\![2(B / -$1!bS!:M!Nk![2i!&!G(!F\![2(B -$1!5E!5.!;X!'CZ(B. -$1!04K7o(B $1K;C!8{(B $1!Y~!C"(B $1!Q1!X8(B / -2005$1!!_A(B. -$1!5E!5.!;X!`!9&(B. -$1!FtKQv(B $1!G6-I:(B $1'0L"Mc(B $1i$r(B $1!1N(B $1i$H(B $1i$7i$?(B $1!G7!;l(B $1'HD!7y(B $1i$N(B $1KQm'^]!M"(B $1!Kg!8W(B $1!XN32](B $1i$N(B $1!X[i$_(B / -$1KEV!`(B $1i$H(B $1'CZ!G>(B $1!D-!(B : -$1'CZ!G>!Tg!D-!!V0(B (Japan) -$1!Nv!;y(B $1KQd!Oe(B $1!4d!JU!`y(B. -$1!Tg!D-!87(B $1!9(!:f!^[(B (Museum) -(3TjN(B (3GdCQV,(B (3eMeO(B. -(3aTI(B (3Ndb(B / -(3GHh(B (3XHj(B : -(3GHf(B (3NdOhf(B. -(3ebOeg(B (3GHf(B (3NdOhf(B / -(31G(B) 2. -(3JgQGf(B : -(3GfJTGQGJ(B (3HfjGO(B (3JQLeg(B (3h(B (3fTQ(B (3cJGH(B (3;(B -(3fGHGOi,(B (3eMeO(B )(3Qhjf(B. -(3TgQGfi,(B (3YfGjJ(B (3Gddg(B. -(3VQH(B (3GdeKdgGi(B (3OQi(B (3GaZGfSJGf(B : -(3cdQi,(B (3GdHQJG(B [Calgary, Alberta, Canada]: -(3chTGf,(B (3eMeO(B (3Wg(B. -(3jYbhHj,(B (3CMeO(B (3Hf(B (3CHj(B (3jYbhH(B. -(3JGQjN(B (3jYbhHi(B / -(3JgQGf(B : -(3GfJTGQGJ(B (3HfGg(B (3JQLeg(B (3h(B (3fTQ(B (3cJGH(B (3;(B -(3BjJi,(B (3GHQGgje(B. -(3ZjQJ(B (3cQeGfTGgi,(B (3YHO(B (3GdcQje(B. -(3cdjGJ(B (3BKGQ(B (3SjO(B (3YHO(B (3GdcQje(B (3ZjQJ(B (3cQeGfTGgi(B / -[(3JgQGf(B : -(3ZjQJ,(B (3eMeO(B (3SYjO(B. diff --git a/tags/rel-1.2/test/test_utf8.txt b/tags/rel-1.2/test/test_utf8.txt deleted file mode 100644 index 83f58f2..0000000 --- a/tags/rel-1.2/test/test_utf8.txt +++ /dev/null @@ -1,1514 +0,0 @@ -عودة، محمد. -كيف سقطت الملكية في مصر؟ : -الطبعة 1. -القاهرة : -肖 显靜. -第一 推动 / -第1版. -北京市 : -与 2049年 的 中国 对话 -吴 国林, -芋生 裕信, -西脇 順三郎 の 研究 : -東京 : -新典社 選書 ; -西脇 順三郎, - 交通 运输 管理志 / -第1版. -天津市 : -天津市 西青区 系列 分志 ; -天津市 地方志 丛书 -Transportation -西青区 (Tianjing, China). -鎌倉 近世 史料 / -[鎌倉市] : -鎌倉市 (Japan) -澤 壽郎, -片桐 一男, -鎌倉市 中央 図書舘. -نعيم، عبدالعزيز العلى. -نظام الضرائب فى الإسلام ومدى تطبيقه فى المملكة العربية السعودية : -[Cairo : -回想 の 西脇 順三郎 / -東京 : -西脇 順三郎, -安東 伸介, -西脇 順三郎, -イギリス 文學史 : -東京 : -英語 英文學 講座 -١ا) 4. -تهران : -صفا، ذبيح الله. -金田 弘, -旅人 つひに かへらず : -初版. -東京 : -西脇 順三郎, -世界 の 詩 : -東京 : -串田 孫一, -西脇 順三郎, -渡辺 一夫, -西脇 順三郎, -芭蕉・シェイクスピア・エリオット / -第 1版. -東京 : -松尾 芭蕉, -鍵谷 幸信, -松尾 芭蕉, -佐久間 隆史, -西脇 順三郎 論 : -東京 : -現代 詩人論 叢書 ; -西脇 順三郎, -شبيلي، عبد الرحمن. -الكلمة العربية : -[Saudi Arabia] : -كتاب الشرق الاوسط -مكانة الإباضية في الحضارة الإسلامية / -الطبعة 1. -[القاهرة] : -西脇 順三郎, -定本 西脇 順三郎 全集. -初版. -東京 : -西脇 順三郎 全集. -工藤 美代子, -寂しい 声 : -東京 : -西脇 順三郎, -西脇 順三郎, -幻影 の 人 西脇 順三郎 を 語る / -西脇 順三郎 を 語る -第 1版. -東京 : -西脇 順三郎, -西脇 順三郎 を 偲ぶ 会. -双鸭山 林业局 志 / -第1版. -[双鸭山? : -黑龙江省 (China). -伊 蝉. -非常 误会/ -Singapore : -狮城 作家 群英 丛书 ; -فرزاد، عبد الحسين. -المنهج في تاريخ الأدب العربي : -Tehran : -夏 枯早. -涼風 有信 / -Kuala Lumpur : -丹袖 出版 系列 ; -子木, -杭州 日记 / -[Singapore] : -子木, -جائزة سلطان العويس الثقافية : -الشارقة : -منشورات اتحاد كتاب وادباء الامارات -مؤسسة سلطان بن علي العويس الثقافية. -اتحاد كتاب وأدباء الإمارات. -旱区 水 土 作物 关系 及 其 最优 调控 原理 : -第1版. -北京 : -周 保中 将军 和 他 的 抗联 战友 / -[长春] : -周 保中, -中共 吉林 省委. -南宁市 稅务誌 / -稅务誌 -第1版. -[南宁市 : -南宁 (China) -广西 壮族 自治区 南宁市 国家 稅务局. -广西 壮族 自治区 南宁市 地方 稅务局. -中国 副食品 市场 需求 与 "菜篮子 工程" 布局 / -第1版. -北京 : -رياض، محمد. -رحله في زمان النوبة : -[القاهرة] : -عبد الرسول، كوثر. -جياني، الحسين بن محمد. -تسمية شيوخ أبي داود السجستاني / -الطبعة 1. -بيروت : -أبو داود سليمان بن الأشعث السجستاني. -فجي، جاسم بن محمد بن حمود. -ابن الدباغ، يوسف بن عبد العزيز. -جابري، رياض. -سعد الله الجابري وحوار مع التاريخ : -الطبعة 1. -حمص : -جابري، سعد الله. -إبراهيم، أيمن. -الإسلام والسلطان والملك : -الطبعة 1. -دمشق : -سليطين، وفيق. -الزمن الأبدي : -الطبعة 1. -اللاذقية : -وقائع حلقة النقاش الأولى حول تطوير أساليب تعليم اللغة العربية لغير الناطقين بها : -الطبعة العربية 1. -عمان : -مصطلحات ميكانيك السيارات. -الطبعة 1. -[Amman] : -خصاونة، عوني محمد. -التطبيقات الفلكية في الشريعة الإسلامية / -تطبيقات علم الفلك في الشريعة الإسلامية -بدر، عبد الرحيم. -موسوعة أسماء النجوم عند العرب في الفلك القديم والحديث / -عمان : -تكريتي، شاكر علي. -مذكراتي وذكرياتي-- هذه / -الطبعة 1. -بغداد : -تكريتي، شاكر علي. -يحيى، حسب الله. -فنارات في القصة والرواية / -الطبعة 1. -بغداد : -عاني، يوسف. -المسرح، الوجود، الحلم / -الطبعة 1. -بغداد : -راوي، نوري. -متحف الحقيقة، متحف الخيال : -الطبعة 1. -بغداد : -حديثي، بهجت عبد الغفور. -الروح الايماني في الشعر العربي : -الطبعة 1. -بغداد : -نفحات الهند واليمن بأسانيد الشيخ أبي الحسن : -الطبعة 1. -الرياض : -قاضي، النعمان. -شعر الفتوح الإسلامية في صدر الإسلام / -الطبعة 1. -جدة : -من أدب الجهاد -حسن، حسن مصطفى. -الحيوان في الشعر العربي / -الطبعة 1. -الرياض : -زهراني، علي بن صالح السلوك. -بلاد غامد وزهران / -الطبعة 3.، وقد أضيفت اليها فصول جديدة وزيادات مهمة. -جدة : -معجم الجغرافي للبلاد العربية السعودية -عبدلي، عبد الله منسي. -المسجد الحرام في قلب الملك عبد العزيز / -مكة : -رومي، عدنان سالم. -علماء الكويت وأعلامها خلال ثلاثة قرون / -الطبعة 1. -الكويت : -سلسلة تاريخ ما أهمله التاريخ ؛ -أغبري، أكرم عبد الملك. -أهمية البحر الأحمر في علاقة الجمهورية اليمنية بدول مجلس التعاون الخليجي / -الطبعة 1. -صنعاء : -كتاب الثوابت ؛ -بلو، محمد. -إنفاق الميسور في تاريخ بلاد التكرور / -الرباط : -منشورات معهد الدراسات الإفريقية. سلسلة نصوص ووثائق ؛ -شاذلي، بهيجة. -ذاكر، عبد النبي. -الواقعي والمتخيل في الرحلة الأوروبية إلي المغرب / -أكادير : -ذنون، عبد الحكيم. -تاريخ الشام القديم / -الطبعة 1. -دمشق : -العلاقات المصرية-اليابانية / -الجيزة : -مدني، إسماعيل محمد. -بيئة البحرين البحرية / -البحرين : -سلسلة كتب حول الحياة الفطرية ؛ -실크 로드 와 韓國 文化 의 探究 / -대전 광역시 : -人文 硏究 學術 叢書 ; -史 在東, -红盾 耕耘录 : -第1版. -[厦门] : -龙海市 (China) -بدر، عزة. -أم الدنيا : -كتاب الجمهورية -خلايلي، خليل. -تاريخ جسكالا : -الطبعة 1. -دمشق ؛ -راوى، صلاح. -فلسفة الوعى الشعبى : -الطبعة 1. -القاهرة : -刘 宏. -百年 梦寻 : -20世纪 中国 经济 思潮 与 社会 变革 -第1版. -北京市 : -世纪 回眸. -沈 山. -石 淑华, -趋势 与 策略 / -Kuala Lumpur : -林 水〓. -陈 友信. -西脇 順三郎, -西脇 順三郎・パイオニア の 仕事 / -パイオニア の 仕事 -第 1版. -東京 : -コレクション・日本 シュ-ルレアリスム ; -和田 桂子, -申 國美. -1900-2001 國家 圖書館 藏 敦煌 遺書 研究 論著 目錄 索引 / -敦煌 遺書 研究 論著 目錄 索引 -國家 圖書館 藏 敦煌 遺書 研究 論著 目錄 索引 -第1版. -北京市 : -敦煌縣 (China) -中國 國家 圖書館 -郭 永秀, -余韵 : -郭 永秀 音乐 评论集 -初版. -[Singapore] : -1950년대 후반기 의 한국 사회 와 이 승만 정부 의 붕괴 / -서울 특별시 : -한국 현대사 의 재 인식 ; -현대사 연구소 기획 연구 -한 흥수. -한국 정신 문화 연구원. -敦煌 懸泉 月令 詔條 / -月令 詔條 -第1版. -北京 : -"本書 收錄 敦煌 懸泉置 遺址 出土 的 《使者 和 中所 督察 詔書 四時 月令 五十條》 (簡稱 「月令 詔條」)". -懸泉置 Sites (China) -中國 文物 硏究所. -甘肅省 文物 考古 硏究所. -刘 星, -文化界 人士 / -Singapore : -新加坡 文艺 协会 丛书 ; -金 梅子, -一双 舊草鞋 / -[s.l.] : -印华 作协 文丛. -前橋藩 松平家 記錄 / -[Tokyo] : -前橋 市立 図書館. -長崎県 水 調查書 : -[長崎市] : -長崎県 (Japan). -許 保由, -不枉此生 : -許 保由 回憶錄 -Sibu, Sarawak : -許 保由, -吴 木炎. -前路 亮红灯 / -第1版. -K. L., Malaysia : -大将 观点 ; -薛 嘉元, -猫城 猫语 / -第1版. -K.L. [i.e. Kuala Lumpur], Malaysia : -大将 fuse ; -晨露, -鱼說 / -初版. -Miri, Sarawak : -美里 笔会 丛书 ; -梁 菊庵, -飄逝 的 年華 : -菊庵 文集 -[Jakarta : -青春 是 一首歌 : -驻校 作家 写作 计划 学员 作品集 -初版. -[Singapore] : -方 桂香. - 尤 今. -听 青春 在 哭泣 : -尤 今 短篇 小说 -初版. -Singapore : -心书 ; -白 荷. -白 荷 散文选 / -初版. -Singapore : -新加坡 新华 作家 丛书 -新加坡 新华 作家 作品集 ; -杨 怡, -从 新华 文坛 论 及 印华 文学 / -初版. -Singapore : -新加坡 新华 作家 作品集 ; -周 洛崙. -梦廻 人生 / -初版. -Singapore : -周 洛崙 作品 ; -陈 久霖, -神州 大地 商机 无限 : -中国 商业 环境 和 文化 的变迁 -初版. -[Singapore] : -舒城县 文物志 / -[舒城县. -舒城县 (China). -舒城县 (China). -舒城县 (China). -中國 古代 建築 歷史 圖說 / -第1版. -北京市 : -侯 幼彬. -李 婉貞. -孔 繁志. -敖鲁古雅 鄂温克人 的 文化 变迁 = -第1版. -天津 : -中央 民族 大学 中国 少数 民族 研究 中心 丛书 -鄂温克族 自治旗 (China) -环 洞庭湖 经济圈 建设 硏究 / -第1版. -长沙市 : -湖南省 (China) -朱 翔. -谢 留文. -客家 方言 语音 硏究 / -第1版. -北京 : -探索 之 果 : -云南 财贸 学院 建校 50周年 论文选 -第1版. -北京 : -云南 财贸 学院 学术 委员会. -宿務 華人 的 經濟--社會史 (附 從 糖業 看 菲律濱 華人) / -糖業 看 菲律濱 華人 -初版. -菲律濱 : -Go, Bon Juan. -珠江 三角洲 公共 管理 模式 硏究 / -第1版. -北京 : -教育部 人文 社会 科学 重点 硏究 基地 中山大学 行政 管理 硏究 中心 学术 文库 -"地方 政府 与 区域 公共 管理 研究" 系列 -陈 瑞莲. -蔡 立辉. -黎 军, -甘 靑 宁 民族 地区 现代 远程 敎育 / -第1版. -北京市 : -مجدلاني، أحمد. -دراسة تحليلية حول أثر النظام الانتخابي على تركيبة المجلس التشريعي القادم / -رام الله : -سلسلة تقارير دورية -شاكري، حسين. -ذكرياتي / -الطبعة 1. -قم : -ميردامادي، عبد المجيد. -زيارة الرسول المصطفى وآله : -الطبعة 2. -تهران : -موسوعة الرسول المصطفى ؛ -حلاق، حسان. -مناهج تحقيق التراث والمخطوطات العربية / -الطبعة 1. -بيروت : -حسين، قصي. -في الحضارة العربية : -الطبعة 1. -طرابلس، لبنان : -عباس، محمد. -ثوار ... عظماء / -بوزريعة، الجزائر : -تطاوي، عبد الله. -اللغة والمتغير الثقافي : -الطبعة 1. -القاهرة : -غوادره، فيصل حسين. -التمرد في شعر العصر العباسي الأول / -الطبعة 1. -عمان : -黑 岩, -各舉 門神 的 風采 / -Sibu, Sarawak : -漳泉 之聲 叢書 ; -陆 力军. -市场 义乌 : -第1版. -杭州 : -义乌市 (China) -义乌市 (China) -白 小虎. -王 祖強. -靖 国平. -教育 的 智慧 性格 : -当代 知识 教育 的 变革 -第1版. -武汉 : -公共 决策 研究 : -第1版. -长沙 : -公共 管理 论丛 -颜 佳华, -迈向 新世纪 : -广州市城市 规划 信息 系统 的 理论 与 实践 -第1版. -广州 : -广州 (China) -戴 逢 -姜 崇洲. -丁 建伟. -韩 振远. -山西 古祠堂 : -矗立 在 人 神 之 间 -第1版. -沈阳市 : -中国 文化 遗珍 丛书. 山西 -潘 知常, -王 国维 : -第1版. -北京 : -跨文化 沟通 个案 研究 丛书 -文津 書系 -王 国维, -李 加荣. -军用 生物 技术 / -第1版. -北京市 : -庄 力霞. -邱 德修. -商周 用鼎 制度 之 理論 基礎 / -限定版. -臺北市 : -商周 金文 硏究 論文; -蒲正信, -药师经注释 / -第1版. -成都市 : -佛典丛书. -زاهي، فريد. -العين والمرآة : -[Rabat] : -دواليبي، محمد معروف. -مذكرات الدكتور معروف الدواليبي / - الطبعة 1. -الرياض : -أبو الخير، محمود عبد الله. -شعر رثاء النفس : -عمان : -黎平 剿匪 斗争 / -第1版. -[黎平 : -中共 黎平 县委. -鬼谷子 学术 研讨会 -第一届 鬼谷子 学术 研讨会 论文集 / -鬼谷子 学术 研讨会 论文集 -第1届 鬼谷子 学术 研讨会 论文集 -北京 第1版. -北京 : -鬼谷子, -鬼谷子 学术 研究会. -فقير، بدر بن عادل. -تغير الأنماط السكنية في مدينة الدرعية : -الرياض : -إصدارات دارة الملك عبد العزيز ؛ -سمحي، علي حمود. -داخل آزال خارج صنعاء : -صنعاء : -شمري، محمد علي. -شعراء الخليج : -الطبعة 1. -عمان : -الشعر النبطي : -الطبعة 1. -عمان : -حنداين، محمد. -المخزن وسوس، 1672-1822 : -الطبعة 1. -الرباط : -عبيدات، داود عمر سلامة. -الموحدون في الأندلس : -إربد، الأردن : -مدني، إسماعيل محمد. -رحلتي مع البيئة / -الطبعة 1. -[?Manama] : -حميد الدين، عبد الله بن محمد. -الهوية في بنية النظام الدولي / -الطبعة 1. -عمان : -سيد، محمد عبد الرحمن. -تجرية دولة قطر في مجال ذوي الاحتياجات الخاصة / -[الدوحة] : -فاضل لنكراني، محمد. -كتاب الطهارة : -الطبعة 1. -[Tehran] : -نجمآبادي، أبو الفضل. -حاشية المكاسب : -الطبعة 1. -قم : -مجموعة آثار آية الله الميرزا أبو الفضل النجمآبادي ؛ -انصاري، مرتضى بن محمد أمين، -مؤسسة آية الله العظمى البروجردي. -东北亚 区域 经济 社会 合作 与 发展 国际 学术 研讨会 -东北亚 自由 贸易区 : -2004年 东北亚 区域 经济 社会 合作 与 发展 国际 学术 研讨会 论文选 -第1版. -沈阳 : -李 向平. -李 勇辉, -城镇 居民 住宅 消费 保障 制度 / -第1版. -北京市 : -陈 相灵. -《武经 七书》 与 当代 战争 战略 / -第1版. -北京 : -武经 七书. -社会 保障 社会 福祉 大事典 = -初版. -東京 : -労働 旬報社. -한국 팝 의 고고학 1970 : -제1판. -경기도 파주시 : -신 현준. -武 旭峰. -深入 黃山 的 背后 : -找寻 徽州 -第2版. -广州 : -发现 之旅 = -徽州 地区(China) -徽州 地区(China) -南 丽军. -比较 政治 制度 / -第1版. -哈尔滨 : -向 俊杰. -孔 兆政. -贾 少华. -民办 大学 的 战略 / -第1版. -杭州 : -浙江省 教育 科学 规划 2005 年 重点 研究 课题 -刘 晓琴. -中国 近代 留英 教育史 / -第1版. -天津市 : -近代 中国 研究 丛书 -Rev. ed. of author's doctoral thesis under title: 中国 近代 留英 教育 研究. -刘 晓琴. -党 崇民, -论 邓小平 战役 指导 特色 = -第1版. -北京 : -中国 军事学 博士 文库 -邓 小平, -建立 农村 劳动力 平等 就业 制度 / -第1版. -北京市 : -陈 晓华. -张 红宇. -胡 小林. -毛 泽东 的 学习 思想 与 实践 / -第1版. -济南 : -毛 泽东, -于 云才. -赵 志忠. -民族 文学 论稿 / -第1版. -沈阳市 : -至尊 宗喀巴 大师传 / -第3版, 修订本. -西宁 : -郭 和卿. -威慑 人类 / -第1版. -北京 : -沈 晓阳. -傅 国涌, -主角 与 配角 : -近代 中国 大转型 的 台前 幕后 -第1版. -武汉市 : -白 友涛. -盘根草 : -城市 现代化 背景下 的 回族 社区 -第1版. -银川市 : -邬 大光. -危机 与 转机 : -第1版. -[厦门] : -厦门 大学 WTO 硏究 中心 系列 丛书 ; -林 莉. -刘 学杰. -新疆 旧事 = -第1版. -乌魯木齐市 : -居上 图书 -新疆 维吾尔自治区 (China) -吴 静安, -春秋 左氏傳 舊注 疏證 續 / -第1版. -長春 : -劉 文淇, -Confucius. -左丘 明. -劉 文淇, -董 洪运, -聚焦 地平线下 : -漫谈 新时期 人民 防空 -北京 第1版. -北京市 : -皇甫 宜川. -中国 战争 电影史 / -第1版. -北京 : -百年 中国 电影 研究 书系 -高等 教育 发展 与 财政 政策 国际 研讨会 -高等 教育 发展 的 财政 政策 : -OECD 与 中国 -第1版. -北京 : -"根据 中国 教育部 和 经济 合作 与 发展 组织(OECD) 的 协商, 2004年月11--14日, 双方 在 北京 共同 召开了 '高等 教育 发展 与 财政 政策 国际 研讨会'" -- Foreword. -范 文曜. -闫 国华. -中国 当代 文学史 / -第1版. -海口 : -21世纪 高等 敎育 系列 敎材. 汉语言 文学类 -田 中阳. -赵 树勤. -王 中江. -进化 主义 在 中国 = -第1版. -北京 : -20世纪 西方 哲学 东渐史 -董 贵昕. -金融 泡沫 的 形成, 运行 与 控制 研究 / -第1版. -上海市 : -黄皮书 系列 -周 到. -周 到 藝術 考古 文集 / -第1版. -郑州市 : -河南 博物院 学术 文库 -河南 博物院. -唐 忠毛. -佛教 本觉 思想 论争 的 现代性 考察 / -第1版. -上海 : -中国 的 现代性 与 人文 学术 丛书 -地理 信息 与 规划 支持 系统 / -第1版. -北京 : -李 楯, -面对 艾滋病, 2004 = -第1版. -北京市 : -李 丹. -中国 上市 公司 发展 规模 研究 = -第1版. -武汉 : -管理 新干线 -卢 洪涛, -中国 现代 文学 思潮 史论 / -第1版. -北京 : -"陕西 师范 大学 优秀 著作 出版 基金 资助 出版"--P. facing t.p. -宋代 傳記 資料 叢刊 / -第1版. -北京市 : -宋元明清 傳記 資料 叢刊 系列 - Vol. 49 called "索引" with added title page: 四十七種 宋代 傳記 綜合 引得 / 洪 業 ... [et al.] 編纂. -洪 業. -北京 圖書館 出版社. -四十七種 宋代 傳記 綜合 引得. -作战 指挥学 / -北京 第1版. -北京 : -丁 邦宇. -装备 保障性 工程 与 管理 = -第1版. -北京市 : -徐 宗昌, -黄 益嘉. -杨 宏伟. -刘 佐泉. -太平 天国 与 客家 / -第1版. -开封市 : -客家 文化 研究 丛书 -中国 财富 新贵 / -第1版. -北京市 : -范 爱民. -高句丽 厉史 与 文化 学术 研讨会 -高句丽史 新 研究 / -高句丽 厉史 与 文化 学术 研讨会 论文集 -第1版. -延吉市 : -高句丽 (Kingdom) -李 国强. -李 宗勋. -中国 小额 信贷 发展 研究 = -第1版. -北京 : -曹 子娟. -陶 江. -陶姓 史话 = -第1版. -南昌市 : -中华 姓氏 文化 丛书 系列. 中华 姓氏 史话 丛书 -陈 光焱. -中国 财政 思想 与 制度 改革 / -第1版. -北京 : -中南 财经 大学 财政学 博士点 导师 文集 -郑 永振. -渤海 墓葬 研究 / -第1版. -长春市 : -严 长录. -陳 寅恪, -金明館 叢稿 初編 / -北京 第1版. -北京 : -陳 寅恪 集 -东北 老工业 基地 振兴 与 管理 现代化 / -第1版. -北京 : -中国 企业 管理 研究会. -中国 社会 科学院. -寒 布. -故宮 = -第1版. -北京 : -北京 的 世界 文化 遗产 = -故宮 博务院 (China) -北京 (China) -北京 (China) -閆 修篆. -易經 的 圖 與 卦 / -臺北市 : -易經. -浪尖 逐梦 : -余 柱业 口述 历史 档案 -初版. -Petaling Jaya, Selangor, Malaysia : -风云 丛书 ; -陈 剑, -郴州市 2000年 人口 普查 资料 / -郴州市 人口 普查 资料 -2000年 人口 普查 资料 -[郴州市 : -向 曽榆. -郴州市 第五次 人口 普查 领导 小组. -רוזנמן, מרדכי. -שמחת מרדכי. -ספר שמחת מרדכי / -ניו יורק : -חלק ב׳ : בראשית, שמות, ענינים שונים ־־ -徐 宗幹, -斯未 信齋 文編 -斯未 信齋 文編 ; -斯未 信齋 文編 ; 斯未 信齋 雜錄 -初版. -南投市 : -臺灣 歷史 文獻 叢刊 -徐 宗幹, -臺戰 實紀. -臺戰 演義 / -初版. -南投市 : -臺灣 歷史 文獻 叢刊 -劉永福, -臺灣 銀行. -冯 文炳. -废名 作品 精选 / -第1版. -武汉市 : -现代 文学 名家 作品 精选 -沙 铁华. -月 华. -大園 市藏. -臺灣 事蹟 綜覽 / -台北市 : -幕府山 胜迹 寻踪 / -南京市 : -下关文史 ; -政协 南京市下关区文史 资料 委员会 . -南京市 幕府山 地区 保护 开发领导 小组 办公室. -赵 淑敏, -京梦 / -第1版. -广州市 : -吴 兢 -贞观 政要 / -第1版. -合肥市 : -中华 古典 智慧 珍品 -唐 太宗, -范 勇胜. -העיירה שלי : -תל־אביב : -גרנצרסקי־קדרי, בינה. -科学 发展观 与 新一轮 经济 增长 / -第1版. -上海 : -厉 无畏. - 王 振. -熊谷 弘, -英米 陪審 制度 の 運用 と 其の 批判 / -[Tokyo] : -司法 研究 報告書 ; -이 준우, -국, 공유지 신탁 법제 개선 방안 연구 / -서울 특별시 : -연구 보고 ; -김 두진, -공정 거래법 상 경제력 집중 규제 연구 / -서울 특별시 : -연구 보고 ; -최 성근. -OECD 기업 지배 구조 원칙 의 국내법 수용 에 관한 연구 / -서울 특별시 : -연구 보고 ; -김 정순. -행정법 상 재판 외 분쟁 해결 법제 연구 / -서울 특별시 : -연구 보고 ; -김 수진, -공무원 권익 향상 을 위한 행정 구제 법제 연구 / -서울 특별시 : -연구 보고 ; -傅 佩榮, -傅 佩榮 解讀 孟子 : -初版. -台北縣 新店市 : -世界 公民 叢書 ; -Mencius. -Mencius. -平 可夫. -中國 軍事 與 國際 戰略 / -第1版. -香港 : -黑白講 李 敖 : -第1版. -[香港] : -富達 文庫 ; -李 敖, -齊 以正. -吳 小攀. -孟 庆顺. -"一国 两制" 与 香港 回归后 的政治 发展 / -香港 回归后 的政治 发展 -香港 初版. -香港 : -鄭 義, -中共 十大 敗仗 : -中共官方戰史上 被刻意 掩埋 的 篇章 -第1版. -香港 : -中國 共產黨 -中國 國民黨 -吳 潤生. -林 彪 與 文化 大革命 / -第2版. -Carle Place, N.Y. : -《眞相》系列 ; -林 彪, -周 承人. -早期 香港 電影史 (1897-1945) / -香港 : -李 以荘. -魏 成思. -兩岸 密使 50 年 / -香港 : -記憶 歷史 叢書 -程 希, -当代 中囯 留学生 硏究 / -初版. -香港 : -北京 大学 华侨 华人 硏究 中心 丛书 ; -"北京 大学 龚 诗贮 基金 赞助 出版." -鄭 義, -長征 : -第1版. -香港 : -中國 共產黨 -中國 國民黨 -香港・文化・研究 / -香港 : -吳 俊雄. -馬 傑偉. -呂 大樂. -伊 戰 啓示錄 / -初版. -Singapore : -王 賡武. -宮 少朋. -中日 关系 多维 透視 : -古厩 忠夫 教授 还历 纪念 论文集 -香港 初版. -香港 : -古厩 忠夫, -古厩 忠夫 教授 还历 纪念 论文集 编辑 委员会. -清宮 臺灣 巡撫 史料 / -初版. -臺北市 : -國立 故宮 博物院 院藏 清代 臺灣 文獻 叢編 -洪 安全, -馮 明珠. -落地 生根. -落地 生根 : -神戶 華僑 與 神阪 中華 會館 百年史 -香港 初版. -香港 : -北京 大學 華僑 華人 研究 中心 叢書 ; -Translation of: 落地 生根 : 神戶 華僑 と 神阪 中華 会館 の 百年. -中華 会館 (Kobe-shi, Japan) -忽 海燕. -中華 會館 (Kobe-shi, Japan) -王 鼎鈞. -葡萄 熟了 / -1版. -臺北市 : -大地 叢書 ; -戴 錦華, -性別 中國 / -初版. -台北市 : -麥田 人文 -附 參考 文獻. -盧 增. -柬埔寨 企业 纳稅 指南, 2004 / -中文 版. -[Phnom Penh?] : -הלר חדד, הילה. -התכלית של ועדות מייעצות ציבוריות לעניין מסוים־ נוסח אד הוקת בישראל : תוך התמקדות בשלוש הועדות הבאות: ועדת וילנאי (1999), ועדת טל (2000), ועדת בן בסט (2000) / -[Israel : -פרג׳, רג׳א סעיד. -הקשרים בין הדרוזים והיהודים עד הקמת מדינת ישראל (1948) / -ינוח : -חלפין, יגאל. -הטיהורים הסטליניסטיים : -תל אביב : -פטיש -קרליץ, שמריהו יוסף נסים. -חוט שני (הלכות רבית) -ספר חוט שני : -בני ברק : -הוכמן, חיים אריה, -안 도섭. -조선 의 혼불 타던 밤 에 : -초판. -서울시 : -윤 동주, -بلفقيه، عبد الله بن حسين بن عبد الله. -قوت الألباب من مجاني جني الألباب / -تريم، حضرموت : -زكي، رمضان خميس. -مفهوم السنن الربانية : -الطبعة 1. -القاهرة : -هذا هو الإسلام ؛ -عمارة، محمد. -قراءة النص الديني : -الطبعة 1. -القاهرة : -هذا هو الإسلام ؛ -ندوة السيرة النبوية : -الطبعة 1. -[Omdurman] : -منشورات المركز ؛ -إمام، حمادة. -مبارك والإخوان / -الطبعة العربية 1. -المهندسين [Giza] : -新譯 古文 辭類纂 / -初版. -臺北市 : -古籍 今注 新譯 叢書 -姚 鼐, -黃 鈞. -刘 文锁, -尼雅 : -静止 的 家园 和 时间 -第1版. -北京市 : -神秘 中国 -民丰县 (China) -民丰县 (China) -中国 新编 地方志 总目 提要 = -第1版. -北京市 : -《中国 新编 地方志 总目 提要》编纂 委员会. -中国 第二 历史 档案馆. -馆藏 民国 台湾 档案 汇编 / -民国 台湾 档案 汇编 -台湾 档案 汇编 -第1版. -北京市 : -台湾 文献 史料 出版 工程 -陈 云林. -海峡 两岸 出版 交流 中心. -黃 俊傑, -德川 日本 《論語》詮釋 史論 / -初版. -臺北市 : -東亞 文明 研究 叢書 ; -Confucius. -東亞 視域中 的 國籍、移民 與 認同 學術 研討會 -東亞 視域中 的 國籍、移民 與 認同 / -初版. -臺北市 : -東亞 文明 研究 叢書 ; -甘 懷真, -貴志 俊彦, -川島 真, -בסן, צדוק. -יתומות : -ירושלים : -רז, גאי. -בית האמנים. -שלו, אריה. -כישלון והצלחה בהתרעה : -תל אביב : -אריאלי, שאול. -תפסת מרובה לא תפסת : -ירושלים : -תמונת מצב -שביט, יעקב. -אירופה המהוללת והמקוללת : -תל אביב : -ריינהרץ, יהודה. -שי, דב. -15 מכל 100 שרדו : -חמישה עשר מכל מאה שרדו -מהד׳ 2. -[ת״א ז״א תל אביב : -שי, דב. -עדווי, ג׳מאל, -פעילות הקוויקרים האמריקנים בפלישתינה 1948-1869 / -Haifa] : -חסקין, גילי. -שבוי בקסמה : -הוד השרון : -טאוב, גדי. -המתנחילים והמאבק על משמעותה של הציונות / -מתנחלים -תל אביב : -פרוזה (ידיעות אחרונות). -日本軍 「慰安婦」 関係 資料 集成 / -初版. -東京 : -鈴木 裕子, -山下 英愛, - 外村 大,1966- -成田 龍一. -歴史学 の ポジショナリティ : -東京 : -山崎 一穎, -森 鷗外 論攷 / -東京 : -森 鷗外, -木村 博一, -日本 社会科 の 成立 理念 と カリキュラム 構造 / -初版. -東京 : -堀 幸雄, -最新 右翼 辞典 / -右翼 辞典 -東京 : -久保田 淳, -ことば、ことば、ことば / -初版. -東京 : -小林 一茶, -だん袋 : -一茶 自筆 句集 -東京 : -渡辺 卓郎. -岡本 哲志, -銀座 四百年 : -東京 : -講談社 選書 メチエ ; -銀座 (Tokyo, Japan) -千石 英世, -小島 信夫 : -暗示 の 文学、鼓舞する 寓話 -東京 : -小島 信夫, -検証 国家 戦略なき 日本 / -東京 : -読売 新聞社. -吉田 喜重, -吉田 喜重 : -変貌 の 倫理 -東京 : -蓮實 重彦, -李 燕, -陶 行知 の 芸術 教育論 : -初版. -東京 : -陶 行知, -寺崎 昌男, -大学 は 歴史 の 思想 で 変わる : -初版. -東京 : -比田井 克仁, -伝說 と 史実 の はざま : -東京 : -誰 で も 読める 日本 古代史 年表 : -日本 古代史 年表 -東京 : -吉川 弘文館. -保阪 正康, -松本 清張 と 昭和 史 / -初版. -東京 : -平凡社 新書 ; -松本 清張, -松本 清張, -松本 清張, -東京 大学. -戦争 の 表象 : -東京 : -東京 大学. -吉見 俊哉, -人口 減少 時代 の 日本 経済 / -東京 : -人口学 ライブラリー ; -大淵 寬, -森岡 仁, -日本 の 所得 分配 : -初版. -東京 : -小塩 隆士, -田近 栄治. -府川 哲夫, -佐々木 毅, -知識 基盤 社会 と 大学 の 挑戦 : -初版. -東京 : -本多 博之, -戦国 織豊期 の 貨幣 と 石高制 / -東京 : -資料 集成 戦争 と 障害者 / -東京 : -十五年 戦争 極秘 資料集. 補卷 ; -橋本 雅之, -古風土記 の 研究 / -初版. -大阪市 : -研究 叢書 ; -古風土記 -常陸国 風土記. -八代 斌助 の 思想 と 行動 を 考える : -京都市 : -神戶 国際 大学 経済 文化 研究所 叢書 ; -八代 斌助, -日本 聖公会 -桑田 優, -平尾 武之, -山本 祐策, -小川 恭一. -徳川 幕府 の 昇進 制度 : -寬政 十年末 旗本 昇進表 -東京 : -ジャーナリズム と 権力 / -京都市 : -大石 裕, -日本 の 地方 民鉄 と 地域 社会 / -初版. -東京 : -青木 栄一, -少子化 の 経済 分析 / -東京 : -高山 憲之, -斎藤 修, -田間 泰子, -「近代 家族」と ボディ・ポリティクス / -京都市 : -四川省 潼南县 地名录 / -潼南县 地名录 -[潼南县 : -四川省 地名录 丛书 ; -潼南县 (China) -四川省 潼南县 地名 领导 小组. -四川省 武隆县 地名录 = -武隆县 地名录 -[武隆县 : -四川省 地名录 丛书 ; -武隆县 (China) -武隆县 地名 领导 小组. -四川省 新都县 地名录 / -新都县 地名录 -[新都县 : -四川省 地名录 丛书 ; -新都县 (China) -新都县 地名 领导 小组. -مالح، محمد رياض. -الشيخ الأكبر محيي الدين بن العربي سلطان العارفين / -أبو ظبي : -حميري، جمال الدين عبد الله. -النسبة إلى المواضع والبلدان / -الطبعة 1. -أبو ظبي : -مزروعي، فاطمة حمد. -تمثيلات الآخر في أدب قبل الإسلام / -أبو ظبي : -يوميات زايد / -الطبعة 1. -أبو ظبي : -المأمورة : -الطبعة 1. -Abu Dhabi : -العاديات : -الطبعة 1. -Abu Dhabi : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1997 حتى عام 2006 بشأن الأراضي الممنوحة للمواطنين / -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1996 حتى عام 2006 في العلامات التجاربة / -[?Dubai] : -قانون اتحادي رقم 24 لسنة 2006 م في شأن حماية المستهلك. -[?Dubai] : -قانون مكافحة التستر التجاري رقم 17 لسنة 2004 م. -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1999 حتى عام 2006 في المنازعات بين الؤجرين والمستأجرين : -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1990 حتى عام 2005 في الإبعاد / -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1988 حتى عام 2005 م في أحكام بطاقة الإئتمان. -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1991 حتى عام 2005 في بطلان الإعلان / -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1997 حتى عام 2005 في الملكية التجارية والصناعية / -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1991 حتى عام 2006 في التسهيلات المصرفية / -[?Dubai] : -حجي، عبد الرحمن. -دراسة الظاهرة العلمية في المجتمع الأندلسي / -أبو ظبي : -مري، سعيد. -ديوان الغواص / -أبو ظبي : -نجمآبادي، أبو الفضل. -كتاب القضاء : -الطبعة 1. -قم : -مجموعة ىثار آية الله الميرزا أبو الفضل النجم آبادي ؛ -نجمآبادي، أبو الفضل. -الرسائل الفقهية : -الطبعة 1. -قم : -مجموعة آثار آية الله الميرزا أبو الفضل النجمآبادي ؛ -한국 의 민주 정부. -한국 의 민주 정부. -חיים ביהודה. -[Jerusalem] : -松村 潤, -米國 議會 圖書館 所藏 滿洲語 文獻 目錄 / -滿洲語 文獻 目錄 -東京 : -東北 アジア 文獻 硏究 叢刊 ; -פוגל, דוד. -חרא של פרסום / -מהד׳ 1. -[Israel] : -פוגל, דוד. -ישראל. -אזורי עדיפות לאומית : -ירושלים : -دارا شكوه. -منتخبات آثار : -[تهران] : -جلالى نائينى، محمد رضا. -صادق عنقا. -١نته : -١ا) 22. -Verdugo City, Ca : -בר־עם שחל, ליאורה. -הנחיות לסקר ותיעוד אתרים לשימור / -[Israel] : -ארן, זלמן. -דברים על החינוך בדור הדעת / -חינוך בדור הדעת -אבא אבן -ירושלים : -סדרת ״השרים״ / יוסף יונאי -יונאי, יוסף. -הגדה של פסח : -ירושלים : -אלישיב, יוסף שלו׳. -קהלות יעקב. -ישראלזון, משה. -ורנר, שלמה י. -ליל שמורים. -ספר ליל שמורים : -ליל שמורים -ברוקלין, נ.י. : -ברוודה, שלמה. -חד גדיא. -הגדה של פסח : -ירושלים : -קניבסקי, יעקב ישראל. -ברונשטיין, ישראל יוסף בן משה אליעזר. -מוסקאוויטש, נפתלי אשר ישעי׳. -פירות האילן (ארבעה המינים) -ספר פירות האילן : -פירות האילן -אשדוד : -ספר יהושע. -ספר יהושעץ -יהושע -[ירושלים : -ספר יהושע. -ספר שופטים. -וילהלם, אהרן אליהו בן יחזקאל. -ספר שופטים. -אילה שלוחה. -דיקמאן, אברהם ש. -ספר שלשים יום קודם החג : -שלשים יום קודם החג -זכרון משה -מהד׳ 2. מתוקנת. -ליקוואוד, נ. דז. : -אורנשטיין, יעקב משולם. -ישועות יעקב -ספר ישועות יעקב : -נדפס ונסדר מחדש. -אשדוד : -תורה. -באום, אברהם. -לילה כיום יאיר : -ירושלים : -אוצר מפרשי קהלת / -ירושלם : -קהלת. -ואנונו, שמעון. -קהלת. -דיין, נסים. -ספר יעלת חן : -יעלת חן -בני ברק : -תורה. -מרגליות התורה : -ספר מרגליות התורה -ירושלים : -תורה. -ואנונו, שמעון. -רבינוביץ־תאומים, בנימין בן יעקב. -ספר יחלק שלל : -יחלק שלל -ירושלים : -תורה. -ספורנו ורבינו בחיי. -ספר פניני ספורנו ורבינו בחיי : -לונדון : -תורה. -רוזנבוים, יעקב מאיר. -ספורנו, עובדיה בן יעקב, -בחיי בן אשר בן חלבא, -ראבד, רם משה. -הגדה של פסח מהדורת טנן : -פתח תקוה : -הגדה של פסח. -東京 大学. -東京 大学 総合 研究 博物館 所蔵 渡辺 武男 収集 広島・長崎 被爆 関連 資料 目錄 / -渡辺 武男 収集 広島・長崎 被爆 関連 資料 目錄 -広島・長崎 被爆 関連 資料 目錄 -東京 : -東京 大学 総合 研究 博物館 標本 資料 報告, - 渡辺 武男, -東京大学. -田賀井 篤平, -シルク ロード 草原 の 道 に おける アルジャィ 石窟 の 歴史 と 文化・国際 シンポジウム, 2007年 3月 27日 : -静岡市 : -楊 海英, -報告書 日系 アメリカ人 リーダーシップ シンポジウム 「芸術 から ビジネス まで: 多様 な 職業 を 通じた 日系 アメリカ人 の 貢献」/ -日系 アメリカ人 リーダーシップ シンポジウム 「芸術 から ビジネス まで: 多様 な 職業 を 通じた 日系 アメリカ人 の 貢献」 -東京 : -武田 興欣, -国際 交流 基金. -出来町 天王祭 鹿子神車・河水車 / -鹿子神車・河水車 -名古屋市 : -名古屋市 山車 調查 報告書 ; -名古屋市 文化財 調查 報告 ; -名古屋市 教育 委員会. -中国 対外 貿易 統計 / -2005年版. -東京 : -海外 調查 シリーズ ; -日本 貿易 振興 機構. -専門 用語 分野 の 国際 規格 共同 開発 調查 研究 成果 報告書. -東京 : -Japan. -日本 規格 協会. -群杭 基礎 の 大型 振動台 実験 / -[つくば市] : -土木 研究所 資料, -土木 研究所 (Japan). -マテリアル フロー データ ブック : -第 3版. -つくば市 : -森口 祐一. -橋本 征二, -産総研 レア メタル シンポジウム, 平成 18年 10月 2日. -「産総研 レア メタル シンポジウム」講演 予稿集. -名古屋市 : -産業 技術 総合 研究所. -古川 恵太. -沖縄 泡瀬 干潟 を 例 と した 沿岸 湿地 の 総合的 環境 評価 の 試み / -横須賀市 : -国土 技術 政策 総合 研究所 資料 = -徳川 将軍家 と 会津 松平家 : -会津若松市 : -会津藩 (Japan) -福島 県立 博物館. -若松城 天守閣 (Museum) -شيخ الأرض، محمد. -فشة خلق / -ابو ظبي : -ابن خلدون. -مقدمه ابن خلدون / -١ا) 2. -تهران : -انتشارات بنياد ترجمه و نشر كتاب ؛ -نابادى، محمد )روين. -شهرانى، عنايت الله. -ضرب المثلهاى درى افغانستان : -كلرى، البرتا [Calgary, Alberta, Canada]: -كوشان، محمد طه. -يعقوبي، أحمد بن أبي يعقوب. -تاريخ يعقوبى / -تهران : -انتشارات بناه ترجمه و نشر كتاب ؛ -آيتى، ابراهيم. -غيرت كرمانشاهى، عبد الكريم. -كليات آثار سيد عبد الكريم غيرت كرمانشاهى / -[تهران : -غيرت، محمد سعيد. diff --git a/tags/rel-1.2/test/util.py b/tags/rel-1.2/test/util.py deleted file mode 100644 index 7ade343..0000000 --- a/tags/rel-1.2/test/util.py +++ /dev/null @@ -1,4 +0,0 @@ -import sys -sys.path.append( '../pymarc' ); - - diff --git a/tags/rel-1.2/test/writer.py b/tags/rel-1.2/test/writer.py deleted file mode 100644 index 5e5e284..0000000 --- a/tags/rel-1.2/test/writer.py +++ /dev/null @@ -1,31 +0,0 @@ -import util -import unittest -import pymarc -import re -import os - -class MARCWriterTest(unittest.TestCase): - - def test_write(self): - - # write a record off to a file - writer = pymarc.MARCWriter(file('test/writer-test.dat','w')) - record = pymarc.Record() - field = pymarc.Field('245', ['0','0'], ['a', 'foo']) - record.addField(field) - writer.write(record) - writer.close() - - # read it back in - reader = pymarc.MARCReader(file('test/writer-test.dat')) - record = reader.next() - - # remove it - os.remove('test/writer-test.dat') - -def suite(): - suite = unittest.makeSuite(MARCWriterTest, 'test') - return suite - -if __name__ == "__main__": - unittest.main() diff --git a/tags/rel-1.2/test/xml_test.py b/tags/rel-1.2/test/xml_test.py deleted file mode 100644 index c173911..0000000 --- a/tags/rel-1.2/test/xml_test.py +++ /dev/null @@ -1,28 +0,0 @@ -from unittest import TestCase -from pymarc import parse_xml_to_array, Record - -class XmlTest(TestCase): - - def test_parse_to_array(self): - records = parse_xml_to_array('test/batch.xml') - self.assertEqual(len(records), 2) - - # should've got two records - self.assertEqual(type(records[0]), Record) - self.assertEqual(type(records[1]), Record) - - # first record should have 18 fields - r = records[0] - self.assertEqual(len(r.getFields()), 18) - - # check the content of a control field - self.assertEqual(r['008'].data, - u'910926s1957 nyuuun eng ') - - # check a data field with subfields - f = r['245'] - self.assertEqual(f.indicator1, '0') - self.assertEqual(f.indicator2, '4') - self.assertEqual(f['a'], u'The Great Ray Charles') - self.assertEqual(f['h'], u'[sound recording].') - diff --git a/tags/rel-1.4/Changes b/tags/rel-1.4/Changes deleted file mode 100644 index ced9d6c..0000000 --- a/tags/rel-1.4/Changes +++ /dev/null @@ -1,96 +0,0 @@ -v1.4 Tue Nov 27 13:44:41 EST 2007 -- map_xml can take multiple files - -v1.3 Tue Nov 20 08:48:51 EST 2007 -- added map_xml to pymarc/marcxml.py for a more functional processing - -v1.2 Tue Sep 4 08:22:44 EDT 2007 -- added pymarc/marcxml.py for marcxml reading support -- added test of marcxml reading: test/xml_test.py -- modified Field so that default indicators and subfields are - not set to a default array in the method signature. This causes - subtle bugs since new arrays are not contructed for - repeated calls to the constructor. - -v1.1 Wed Aug 15 08:34:39 EDT 2007 -- updated the homepage for the package - -v1.0 Wed Jul 18 14:55:19 EDT 2007 -- added marc8_to_unicode() support for applications that need to - convert marc8 data to unicode ... many thanks for Aaron Lav - for allowing relevant bits of code to be lifted from PyZ3950; - also thanks to Mark Matienzo for the idea and for testing. -- added some tests for new marc8_to_unicode functionality. Thanks - to the Library of Congress for providing equivalent marc8 and - utf8 marc record batches to use for constructing test data -- The folowing changes are courtesy of Mark Matienzo: - - modified __str__ methods for Field and Record to produce - data in MARCMaker [1] format. THIS MAY BREAK YOUR CODE. This is - not a complete implementation as support for special character - mnemonics [2] has yet to be added - - modified test cases for string conversion and added tests for - control fields - - added formatField() and isSubjectField() methods to Field and - the author(), uniformtitle(), subjects(), addedentries(), - and location() methods to Record, and tests for those methods - - [1] http://www.loc.gov/marc/makrbrkr.html - [2] http://www.loc.gov/marc/mnemonics.html - -v0.9 Tue Apr 10 21:54:02 EDT 2007 -- various simplifications and pythonifications (thanks Dan Chudnov) -- added easy_install support - -v0.85 Fri Feb 3 13:08:35 EST 2006 -- added default leader template for when records are created - from scratch (thanks Kurt Nordstrom) - -v0.81 Mon Jan 30 16:33:36 EST 2006 -- getFields() wasn't returning all the fields when no tag was passed in. - -v0.8 Mon Jan 30 07:05:36 CST 2006 -- added the ability to read raw marc from strings THIS MAY BREAK - YOUR CODE. pymarc no longer supports passing file paths to the - MARCReader constructor. You need to simply change: - - reader = MARCReader('marc.dat') - - to: - - reader = MARCReader(file('marc.dat')) - - Thanks to Daniel Hoth for suggesting this. It just makes sense to - be able to pass in MARC that you got from a Z39.50 network connection - or database, etc. - -v0.7 Mon Jan 23 15:08:55 EST 2006 -- added addSubfield() to Subfield (thanks Kurt Nordstrom) - -v0.6 Tue Nov 29 20:48:31 CST 2005 -- fixed test suite to run under the unittest that ships with python2.3 -- allow non-integer field tags -- fixed MARCWriter and added test (thanks Mikel Larreategi) - -v0.5 Thu Feb 10 10:01:12 CST 2005 -- handle empty subfields - -v0.4 Wed Feb 2 22:29:33 CST 2005 -- fixed directory validation: thanks Aaron Lav -- added iterator for pymarc.Field for iterating through subfields -- added pymarc.Field.value() for getting a field value easily - -v0.3 Wed Jan 5 17:03:37 CST 2005 -- changed mind about accessors (again): - removed getField() must use getFields() - renamed subfield() to getSubfields() and have it return a list -- added doctest support to pymarc/__init__.py -- added a test batch file of python data - -v0.2 Tue Jan 4 21:01:22 CST 2005 -- removed getField() and renamed getFields() to find() - -v0.11 Mon Jan 3 20:42:19 CST 2005 -- fixed test suite execution - -v0.1 Wed Dec 29 19:54:23 CST 2004 -- initial release diff --git a/tags/rel-1.4/MANIFEST.in b/tags/rel-1.4/MANIFEST.in deleted file mode 100644 index 591cc6d..0000000 --- a/tags/rel-1.4/MANIFEST.in +++ /dev/null @@ -1,3 +0,0 @@ -global-include *.py *.dat -include README MANIFEST.in - diff --git a/tags/rel-1.4/ez_setup.py b/tags/rel-1.4/ez_setup.py deleted file mode 100644 index 38c09c6..0000000 --- a/tags/rel-1.4/ez_setup.py +++ /dev/null @@ -1,228 +0,0 @@ -#!python -"""Bootstrap setuptools installation - -If you want to use setuptools in your package's setup.py, just include this -file in the same directory with it, and add this to the top of your setup.py:: - - from ez_setup import use_setuptools - use_setuptools() - -If you want to require a specific version of setuptools, set a download -mirror, or use an alternate download directory, you can do so by supplying -the appropriate options to ``use_setuptools()``. - -This file can also be run as a script to install or upgrade setuptools. -""" -import sys -DEFAULT_VERSION = "0.6c5" -DEFAULT_URL = "http://cheeseshop.python.org/packages/%s/s/setuptools/" % sys.version[:3] - -md5_data = { - 'setuptools-0.6b1-py2.3.egg': '8822caf901250d848b996b7f25c6e6ca', - 'setuptools-0.6b1-py2.4.egg': 'b79a8a403e4502fbb85ee3f1941735cb', - 'setuptools-0.6b2-py2.3.egg': '5657759d8a6d8fc44070a9d07272d99b', - 'setuptools-0.6b2-py2.4.egg': '4996a8d169d2be661fa32a6e52e4f82a', - 'setuptools-0.6b3-py2.3.egg': 'bb31c0fc7399a63579975cad9f5a0618', - 'setuptools-0.6b3-py2.4.egg': '38a8c6b3d6ecd22247f179f7da669fac', - 'setuptools-0.6b4-py2.3.egg': '62045a24ed4e1ebc77fe039aa4e6f7e5', - 'setuptools-0.6b4-py2.4.egg': '4cb2a185d228dacffb2d17f103b3b1c4', - 'setuptools-0.6c1-py2.3.egg': 'b3f2b5539d65cb7f74ad79127f1a908c', - 'setuptools-0.6c1-py2.4.egg': 'b45adeda0667d2d2ffe14009364f2a4b', - 'setuptools-0.6c2-py2.3.egg': 'f0064bf6aa2b7d0f3ba0b43f20817c27', - 'setuptools-0.6c2-py2.4.egg': '616192eec35f47e8ea16cd6a122b7277', - 'setuptools-0.6c3-py2.3.egg': 'f181fa125dfe85a259c9cd6f1d7b78fa', - 'setuptools-0.6c3-py2.4.egg': 'e0ed74682c998bfb73bf803a50e7b71e', - 'setuptools-0.6c3-py2.5.egg': 'abef16fdd61955514841c7c6bd98965e', - 'setuptools-0.6c4-py2.3.egg': 'b0b9131acab32022bfac7f44c5d7971f', - 'setuptools-0.6c4-py2.4.egg': '2a1f9656d4fbf3c97bf946c0a124e6e2', - 'setuptools-0.6c4-py2.5.egg': '8f5a052e32cdb9c72bcf4b5526f28afc', - 'setuptools-0.6c5-py2.3.egg': 'ee9fd80965da04f2f3e6b3576e9d8167', - 'setuptools-0.6c5-py2.4.egg': 'afe2adf1c01701ee841761f5bcd8aa64', - 'setuptools-0.6c5-py2.5.egg': 'a8d3f61494ccaa8714dfed37bccd3d5d', -} - -import sys, os - -def _validate_md5(egg_name, data): - if egg_name in md5_data: - from md5 import md5 - digest = md5(data).hexdigest() - if digest != md5_data[egg_name]: - print >>sys.stderr, ( - "md5 validation of %s failed! (Possible download problem?)" - % egg_name - ) - sys.exit(2) - return data - - -def use_setuptools( - version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, - download_delay=15 -): - """Automatically find/download setuptools and make it available on sys.path - - `version` should be a valid setuptools version number that is available - as an egg for download under the `download_base` URL (which should end with - a '/'). `to_dir` is the directory where setuptools will be downloaded, if - it is not already available. If `download_delay` is specified, it should - be the number of seconds that will be paused before initiating a download, - should one be required. If an older version of setuptools is installed, - this routine will print a message to ``sys.stderr`` and raise SystemExit in - an attempt to abort the calling script. - """ - try: - import setuptools - if setuptools.__version__ == '0.0.1': - print >>sys.stderr, ( - "You have an obsolete version of setuptools installed. Please\n" - "remove it from your system entirely before rerunning this script." - ) - sys.exit(2) - except ImportError: - egg = download_setuptools(version, download_base, to_dir, download_delay) - sys.path.insert(0, egg) - import setuptools; setuptools.bootstrap_install_from = egg - - import pkg_resources - try: - pkg_resources.require("setuptools>="+version) - - except pkg_resources.VersionConflict, e: - # XXX could we install in a subprocess here? - print >>sys.stderr, ( - "The required version of setuptools (>=%s) is not available, and\n" - "can't be installed while this script is running. Please install\n" - " a more recent version first.\n\n(Currently using %r)" - ) % (version, e.args[0]) - sys.exit(2) - -def download_setuptools( - version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, - delay = 15 -): - """Download setuptools from a specified location and return its filename - - `version` should be a valid setuptools version number that is available - as an egg for download under the `download_base` URL (which should end - with a '/'). `to_dir` is the directory where the egg will be downloaded. - `delay` is the number of seconds to pause before an actual download attempt. - """ - import urllib2, shutil - egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3]) - url = download_base + egg_name - saveto = os.path.join(to_dir, egg_name) - src = dst = None - if not os.path.exists(saveto): # Avoid repeated downloads - try: - from distutils import log - if delay: - log.warn(""" ---------------------------------------------------------------------------- -This script requires setuptools version %s to run (even to display -help). I will attempt to download it for you (from -%s), but -you may need to enable firewall access for this script first. -I will start the download in %d seconds. - -(Note: if this machine does not have network access, please obtain the file - - %s - -and place it in this directory before rerunning this script.) ----------------------------------------------------------------------------""", - version, download_base, delay, url - ); from time import sleep; sleep(delay) - log.warn("Downloading %s", url) - src = urllib2.urlopen(url) - # Read/write all in one block, so we don't create a corrupt file - # if the download is interrupted. - data = _validate_md5(egg_name, src.read()) - dst = open(saveto,"wb"); dst.write(data) - finally: - if src: src.close() - if dst: dst.close() - return os.path.realpath(saveto) - -def main(argv, version=DEFAULT_VERSION): - """Install or upgrade setuptools and EasyInstall""" - - try: - import setuptools - except ImportError: - egg = None - try: - egg = download_setuptools(version, delay=0) - sys.path.insert(0,egg) - from setuptools.command.easy_install import main - return main(list(argv)+[egg]) # we're done here - finally: - if egg and os.path.exists(egg): - os.unlink(egg) - else: - if setuptools.__version__ == '0.0.1': - # tell the user to uninstall obsolete version - use_setuptools(version) - - req = "setuptools>="+version - import pkg_resources - try: - pkg_resources.require(req) - except pkg_resources.VersionConflict: - try: - from setuptools.command.easy_install import main - except ImportError: - from easy_install import main - main(list(argv)+[download_setuptools(delay=0)]) - sys.exit(0) # try to force an exit - else: - if argv: - from setuptools.command.easy_install import main - main(argv) - else: - print "Setuptools version",version,"or greater has been installed." - print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)' - - - -def update_md5(filenames): - """Update our built-in md5 registry""" - - import re - from md5 import md5 - - for name in filenames: - base = os.path.basename(name) - f = open(name,'rb') - md5_data[base] = md5(f.read()).hexdigest() - f.close() - - data = [" %r: %r,\n" % it for it in md5_data.items()] - data.sort() - repl = "".join(data) - - import inspect - srcfile = inspect.getsourcefile(sys.modules[__name__]) - f = open(srcfile, 'rb'); src = f.read(); f.close() - - match = re.search("\nmd5_data = {\n([^}]+)}", src) - if not match: - print >>sys.stderr, "Internal error!" - sys.exit(2) - - src = src[:match.start(1)] + repl + src[match.end(1):] - f = open(srcfile,'w') - f.write(src) - f.close() - - -if __name__=='__main__': - if len(sys.argv)>2 and sys.argv[1]=='--md5update': - update_md5(sys.argv[2:]) - else: - main(sys.argv[1:]) - - - - - diff --git a/tags/rel-1.4/pymarc/__init__.py b/tags/rel-1.4/pymarc/__init__.py deleted file mode 100644 index 22f1d2a..0000000 --- a/tags/rel-1.4/pymarc/__init__.py +++ /dev/null @@ -1,73 +0,0 @@ -# __init__.py - -r''' - -The pymarc module provides an API for reading, writing and modifying -MARC records. MARC (MAchine Readable Cataloging) is a metadata format for -bibliographic data. More about MARC can be found at the Library of Congress: -http://lcweb.loc.gov/marc - -Below are some common examples of how you might want to use pymarc. If you -run across an example that you think should be here please contribute it -by writing to the author. - -1. Reading a batch of records and printing out the 245 subfield a. If you - are curious this example uses the batch file available in the distribution. - - >>> from pymarc import MARCReader - >>> reader = MARCReader( 'test/marc.dat' ) - >>> for record in reader: - ... print record['245']['a'] - The pragmatic programmer : - Programming Python / - Learning Python / - Python cookbook / - Python programming for the absolute beginner / - Web programming : - Python programming on Win32 / - Python programming : - Python Web programming / - Core python programming / - Python and Tkinter programming / - Game programming with Python, Lua, and Ruby / - Python programming patterns / - Python programming with the Java class libraries : - Learn to program using Python : - Programming with Python / - BSD Sockets programming from a multi-language perspective / - Design patterns : - Introduction to algorithms / - ANSI Common Lisp / - -2. Creating a record and writing it out to a file. - - >>> from pymarc import Record, Field - >>> record = Record() - >>> record.add_field( \ - ... Field( \ - ... tag = '245', - ... indicators = ['0','1'], - ... subfields = [ \ - ... 'a', 'The pragmatic programmer : ', - ... 'b', 'from journeyman to master /', - ... 'c', 'Andrew Hunt, David Thomas.' ] ) ) - >>> out = file( 'file.dat', 'w' ) - >>> out.write( record.as_marc21() ) - -''' - -__version__ = '1.0' - -from record import * -from field import * -from exceptions import * -from reader import * -from writer import * -from constants import * -from marc8 import marc8_to_unicode -from marcxml import * - -if __name__ == "__main__": - import doctest - doctest.testmod() - diff --git a/tags/rel-1.4/pymarc/constants.py b/tags/rel-1.4/pymarc/constants.py deleted file mode 100644 index bd148c2..0000000 --- a/tags/rel-1.4/pymarc/constants.py +++ /dev/null @@ -1,7 +0,0 @@ -LEADER_LEN = 24 -DIRECTORY_ENTRY_LEN = 12 -SUBFIELD_INDICATOR = chr( 0x1F ) -END_OF_FIELD = chr( 0x1E ) -END_OF_RECORD = chr( 0x1D ) - - diff --git a/tags/rel-1.4/pymarc/exceptions.py b/tags/rel-1.4/pymarc/exceptions.py deleted file mode 100644 index 4be03df..0000000 --- a/tags/rel-1.4/pymarc/exceptions.py +++ /dev/null @@ -1,30 +0,0 @@ -class pymarcException( Exception ): - pass - -class RecordLengthInvalid( pymarcException): - def __str__( self ): - return( "Invalid record length in first 5 bytes of record" ) - -class RecordLeaderInvalid( pymarcException ): - def __str__ ( self ): - return "Unable to extract record leader" - -class RecordDirectoryInvalid( pymarcException ): - def __str__( self ): - return "Invalid directory" - -class NoFieldsFound( pymarcException ): - def __str__ ( self ): - return "Unable to locate fields in record data" - -class BaseAddressInvalid( pymarcException ): - def __str__ ( self ): - return "Base address exceeds size of record" - -class WriteNeedsRecord( pymarcException ): - def __str__( self ): - return "Write requires a pymarc.Record object as an argument" - -class NoActiveFile( pymarcException ): - def __str__( self ): - return "There is no active file to write to in call to write" diff --git a/tags/rel-1.4/pymarc/field.py b/tags/rel-1.4/pymarc/field.py deleted file mode 100644 index 9778b76..0000000 --- a/tags/rel-1.4/pymarc/field.py +++ /dev/null @@ -1,167 +0,0 @@ -from constants import * -from exceptions import * - -class Field( object ): - - def __init__( self, tag, indicators=None, subfields=None, data='' ): - """ - Field() pass in the field tag, indicators and subfields for the tag. - - field = Field( \ - tag = '245', - indicators = ['0','1'], - subfields = [ \ - 'a', 'The pragmatic programmer : ', - 'b', 'from journeyman to master /', - 'c', 'Andrew Hunt, David Thomas.' ] - - If you want to create a control field you don't pas in the indicators - and use a data parameter rather than a subfields parameter: - - field = Field( tag='001', data='fol05731351' ) - - """ - if indicators == None: - indicators = [] - if subfields == None: - subfields = [] - - tag = "%03s" % tag - if ( tag < '010' ): - self.tag = tag - self.data = data - else: - self.tag = tag - self.indicators = indicators - self.indicator1 = indicators[0] - self.indicator2 = indicators[1] - self.subfields = subfields - - def __iter__(self): - self.__pos = 0 - return self - - def __str__( self ): - """ - A Field object in a string context will return the tag, indicators - and subfield as a string. This follows MARCMaker format; see [1] - and [2] for further reference. Special character mnemonic strings - have yet to be implemented (see [3]), so be forewarned. Note also - for complete MARCMaker compatibility, you will need to change your - newlines to DOS format ('\r\n'). - - [1] http://www.loc.gov/marc/makrbrkr.html#mechanics - [2] http://search.cpan.org/~eijabb/MARC-File-MARCMaker/ - [3] http://www.loc.gov/marc/mnemonics.html - """ - if ( self.isControlField() ): - text = "=%s %s" % ( self.tag, self.data.replace(' ','\\') ) - else: - text = "=%s " % ( self.tag ) - for indicator in self.indicators: - if indicator in (' ','\\'): - text += "\\" - else: - text += "%s" % indicator - for subfield in self: - text += ("$%s%s" % subfield) - return text - - def __getitem__( self, subfield ): - """ - Retrieve the first subfield with a given subfield code in a field: - - field['a'] - - Handy for quick lookups. - """ - subfields = self.getSubfields( subfield ) - if len(subfields) > 0: return subfields[0] - return None - - def next( self ): - while self.__pos < len(self.subfields): - subfield = ( self.subfields[ self.__pos ], \ - self.subfields[ self.__pos+1 ] ) - self.__pos += 2 - return subfield - raise StopIteration - - def value( self ): - """ - Returns the field as a string without tag, indicators, and - subfield indicators. - """ - if self.isControlField(): - return self.data - string = "" - for subfield in self: - string += subfield[1] - return string - - def getSubfields( self, *codes ): - """ - getSubfields() accepts one or more subfield codes and will return a list - of subfield values. The order of the subfield values in the list - will be the order that they appear in the field. - - print field.getSubfields( 'a' ) - - print field.getSubfields( 'a', 'b', 'z' ) - """ - values = [] - for subfield in self: - if subfield[0] in codes: - values.append( subfield[1] ) - return values - - def addSubfield( self, code, value ): - """ - Adds a subfield code/value pair to the field. - - field.addSubfield('u', 'http://www.loc.gov') - """ - self.subfields.append(code) - self.subfields.append(value) - - def isControlField( self ): - """ - returns true or false if the field is considered a control field. - Control fields lack indicators and subfields. - """ - if self.tag < '010': - return True - return False - - def asMARC21( self ): - """ - used during conversion of a field to raw marc - """ - if self.isControlField(): - return self.data + END_OF_FIELD - marc = str(self.indicator1) + str(self.indicator2) - for subfield in self: - marc += SUBFIELD_INDICATOR + subfield[0] + subfield[1] - return marc + END_OF_FIELD - - def formatField( self ): - """ - Returns the field as a string without tag, indicators, and subfield indicators. Like pymarc.Field.value(), but prettier (adds spaces, formats subject headings). - """ - if self.isControlField(): return self.data - fielddata = '' - for subfield in self: - if not self.isSubjectField(): - fielddata += ' %s' % subfield[1] - else: - if subfield[0] not in ('v','x','y','z'): - fielddata += ' %s' % subfield[1] - else: fielddata += ' -- %s' % subfield[1] - return fielddata.strip() - - def isSubjectField( self ): - """ - returns True or False if the field is considered a subject field - used by formatField - """ - if self.tag.startswith('6'): return True - return False diff --git a/tags/rel-1.4/pymarc/marc8.py b/tags/rel-1.4/pymarc/marc8.py deleted file mode 100644 index cb1c894..0000000 --- a/tags/rel-1.4/pymarc/marc8.py +++ /dev/null @@ -1,101 +0,0 @@ -# see http://www.loc.gov/marc/specifications/speccharmarc8.html - -import unicodedata -import marc8_mapping - -def marc8_to_unicode(marc8): - converter = MARC8_to_Unicode() - return converter.translate(marc8) - -class MARC8_to_Unicode: - """Converts MARC-8 to Unicode. Note that currently, unicode strings - aren't normalized, and some codecs (e.g. iso8859-1) will fail on - such strings. When I can require python 2.3, this will go away. - - Warning: MARC-8 EACC (East Asian characters) makes some - distinctions which aren't captured in Unicode. The LC tables give - the option of mapping such characters either to a Unicode private - use area, or a substitute character which (usually) gives the - sense. I've picked the second, so this means that the MARC data - should be treated as primary and the Unicode data used for display - purposes only. (If you know of either of fonts designed for use - with LC's private-use Unicode assignments, or of attempts to - standardize Unicode characters to allow round-trips from EACC, - or if you need the private-use Unicode character translations, - please inform me, asl2@pobox.com.""" - - basic_latin = 0x42 - ansel = 0x45 - def __init__ (self, G0 = basic_latin, G1 = ansel): - self.g0 = G0 - self.g1 = G1 - - def is_multibyte (self, charset): - return charset == 0x31 - - g0_set = set(['(', ',', '$']) - g1_set = set([')', '-', '$']) - - def translate (self, s): - uni_list = [] - combinings = [] - pos = 0 - while pos < len (s): -## http://www.loc.gov/marc/specifications/speccharmarc8.html - if s[pos] == '\x1b': - next = s[pos+1] - if (next in self.g0_set): - if s[pos+2] == ',' and next == '$': - pos += 1 - self.g0 = ord(s[pos+2]) - pos = pos + 3 - continue - elif next in self.g1_set: - if s[pos+2] == '-' and next == '$': - pos += 1 - self.g1 = ord(s[pos+2]) - pos = pos + 3 - continue - - mb_flag = self.is_multibyte(self.g0) - - if mb_flag: - d = (ord (s[pos]) * 65536 + - ord (s[pos+1]) * 256 + - ord (s[pos+2])) - pos += 3 - else: - d = ord (s[pos]) - pos += 1 - - if (d < 0x20 or - (d > 0x80 and d < 0xa0)): - uni = unichr (d) - continue - - try: - if d > 0x80 and not mb_flag: - (uni, cflag) = marc8_mapping.codesets [self.g1] [d] - else: - (uni, cflag) = marc8_mapping.codesets [self.g0] [d] - except KeyError, e: - print "couldn't find", self.g0, self.g1, d, str(e) - uni = ord(' ') - cflag = False - - if cflag: - combinings.append (unichr (uni)) - else: - uni_list.append (unichr (uni)) - if len (combinings) > 0: - uni_list += combinings - combinings = [] - - # what to do if combining chars left over? - uni_str = u"".join (uni_list) - - # unicodedata.normalize not available until Python 2.3 - if hasattr (unicodedata, 'normalize'): - uni_str = unicodedata.normalize ('NFC', uni_str) - - return uni_str diff --git a/tags/rel-1.4/pymarc/marc8_mapping.py b/tags/rel-1.4/pymarc/marc8_mapping.py deleted file mode 100644 index e69de29..0000000 diff --git a/tags/rel-1.4/pymarc/marcxml.py b/tags/rel-1.4/pymarc/marcxml.py deleted file mode 100644 index f9429e0..0000000 --- a/tags/rel-1.4/pymarc/marcxml.py +++ /dev/null @@ -1,100 +0,0 @@ -from xml.sax import make_parser -from xml.sax.handler import ContentHandler, feature_namespaces, \ - feature_namespace_prefixes -from pymarc import Record, Field - -class XmlHandler(ContentHandler): - """ - You can subclass XmlHandler and add your own process_record - method that'll be passed a pymarc.Record as it becomes - available. This could be useful if you want to stream the - records elsewhere (like to a rdbms) without having to store - them all in memory. - """ - - def __init__(self): - self.records = [] - self._record = None - self._field = None - self._subfield_code = None - self._text = [] - - def startElementNS(self, name, qname, attrs): - el = name[1] - self._text = [] - - if el == 'record': - self._record = Record() - elif el == 'controlfield': - tag = attrs.getValue((None, u'tag')) - self._field = Field(tag) - elif el == 'datafield': - tag = attrs.getValue((None, u'tag')) - ind1 = attrs.getValue((None, u'ind1')) - ind2 = attrs.getValue((None, u'ind2')) - self._field = Field(tag, [ind1, ind2]) - elif el == 'subfield': - self._subfield_code = attrs[(None, 'code')] - - def endElementNS(self, name, qname): - el = name[1] - text = u''.join(self._text) - - if el == 'record': - self.process_record(self._record) - self._record = None - elif el == 'leader': - self._record.leader = text - elif el == 'controlfield': - self._field.data = text - self._record.addField(self._field) - self._field = None - elif el == 'datafield': - self._record.addField(self._field) - self._field = None - elif el == 'subfield': - self._field.subfields.append(self._subfield_code) - self._field.subfields.append(text) - self._subfield_code = None - - self._text = [] - - def characters(self, chars): - self._text.append(chars) - - def process_record(self, record): - self.records.append(record) - -def parse_xml(file, handler): - """ - parse a file with a given subclass of xml.sax.handler.ContentHandler - """ - parser = make_parser() - parser.setContentHandler(handler) - parser.setFeature(feature_namespaces, 1) - parser.parse(file) - -def map_xml(f, *files): - """ - map a function onto the file, so that for each record that is - parsed the function f will get called with the extracted record - - def do_it(r): - print r - - map_xml(do_it, 'marc.xml') - """ - parser = make_parser() - handler = XmlHandler() - handler.process_record = f - for file in files: - parse_xml(file, handler) - -def parse_xml_to_array(file): - """ - parse an xml file and return the records as an array - """ - handler = XmlHandler() - parse_xml(file, handler) - return handler.records - diff --git a/tags/rel-1.4/pymarc/reader.py b/tags/rel-1.4/pymarc/reader.py deleted file mode 100644 index 8258868..0000000 --- a/tags/rel-1.4/pymarc/reader.py +++ /dev/null @@ -1,56 +0,0 @@ -from pymarc import Record, Field -from constants import END_OF_RECORD -from exceptions import * -from types import * -from cStringIO import StringIO - -class Reader( object ): - """ - A base class for all iterating readers in the pymarc package. - """ - def __iter__( self ): - return self - -class MARCReader( Reader ): - """ - An iterator class for reading a file of MARC21 records. - - Simple usage: - - from pymarc import MARCReader - - ## pass in a file object - reader = MARCReader(file('file.dat')) - for record in reader: - ... - - ## pass in marc in transmission format - reader = MARCReader(rawmarc) - for record in reader: - ... - - """ - - def __init__(self, f): - """ - The constructor which you can pass either raw marc or a file object. - """ - if (type(f) == FileType): self.fh = f - else: self.fh = StringIO(f) - - def next( self ): - """ - To support iteration. - """ - first5 = self.fh.read( 5 ) - if not first5: - raise StopIteration - if len( first5 ) < 5: - raise RecordLengthInvalid - - length = int( first5 ) - chunk = self.fh.read( length - 5 ) - chunk = first5 + chunk - r = Record( chunk ) - return r - diff --git a/tags/rel-1.4/pymarc/record.py b/tags/rel-1.4/pymarc/record.py deleted file mode 100644 index 92062bb..0000000 --- a/tags/rel-1.4/pymarc/record.py +++ /dev/null @@ -1,289 +0,0 @@ -from exceptions import * -from constants import * -from field import * -from types import * -import string -import re - - -class Record( object ): - """ - Record - - A class for representing a MARC record. Each Record object is made up of - multiple Field objects. You'll probably want to look at the docs for Field - to see how to fully use a Record object. - - Basic usage: - - field = Field( \ - tag = '245', - indicators = ['0','1'], - subfields = [ \ - 'a', 'The pragmatic programmer : ', - 'b', 'from journeyman to master /', - 'c', 'Andrew Hunt, David Thomas.' ] - - record.addField( field ) - - Or creating a record from a chunk of MARC in transmission format: - - record = Record( data=chunk ) - - Or getting a record as serialized MARC21. - - raw = record.asMARC21() - - You'll normally want to use a MARCReader object to iterate through - MARC records in a file. - """ - - def __init__( self, data='' ): - self.leader = (' '*10) + '22' + (' '*8) + '4500' - self.fields = list() - self.pos = 0 - if len(data) > 0: - ok = self.decodeMARC( data ) - - def __str__( self ): - """ - In a string context a Record object will return a prettified version - of the record in MARCMaker format. See the docstring for Field.__str__ - for more information. - """ - # join is significantly faster than concatenation - text = "=LDR %s\n" % self.leader - text += string.join( map( str, self.fields ), "\n" ) - text += '\n' - return text - - def __getitem__( self, tag ): - """ - Allows a shorthand lookup by tag: - - record["245"] - - """ - fields = self.getFields( tag ) - if len(fields) > 0: return fields[0] - return None - - def __iter__( self ): - self.__pos = 0 - return self - - def next(self): - if self.__pos >= len( self.fields ): - raise StopIteration - self.__pos += 1 - return self.fields[ self.__pos-1 ] - - def addField( self, *fields ): - """ - addField() will add pymarc.Field objects to a Record object. - Optionally you can pass in multiple fields. - """ - self.fields.extend(fields) - - def getFields( self, *args ): - """ - When passed a tag ( '245' ) getFields() will return a list of all the - fields in a record with a given tag. - - title = record.getFields( '245' ) - - If no fields with the specified - tag are found then an empty list is returned. If you are interested - in more than one tag you can pass in a list: - - subjects = record.getFields( '600', '610', '650' ) - - If no tag is passed in to fields() a list of all the fields will be - returned. - """ - if (len(args) == 0): - return self.fields - - return [f for f in self.fields if f.tag in args] - - def decodeMARC( self, marc ): - """ - decodeMARC() accepts a MARC record in transmission format as a - a string argument, and will populate the object based on the data - found. The Record constructor actually uses decodeMARC() behind - the scenes when you pass in a chunk of MARC data to it. - - """ - - # extract record leader - self.leader = marc[ 0 : LEADER_LEN ] - if len( self.leader ) != LEADER_LEN: raise RecordLeaderInvalid - - # extract the byte offset where the record data starts - baseAddress = int( marc[ 12 : 17 ] ) - if baseAddress <= 0: raise BaseAddressNotFound - if baseAddress >= len( marc ): raise BaseAddressInvalid - - # extract directory, baseAddress-1 is used since the - # director ends with an END_OF_FIELD byte - directory = marc[ LEADER_LEN : baseAddress-1 ] - - # determine the number of fields in record - if len(directory) % DIRECTORY_ENTRY_LEN <> 0: - raise RecordDirectoryInvalid - numFields = len( directory ) / DIRECTORY_ENTRY_LEN - - # add fields to our record using directory offsets - fieldNum = 0 - while ( fieldNum < numFields ): - entryStart = fieldNum * DIRECTORY_ENTRY_LEN - entryEnd = entryStart + DIRECTORY_ENTRY_LEN - entry = directory[ entryStart : entryEnd ] - entryTag = entry[ 0 : 3 ] - entryLength = int( entry[ 3 : 7 ] ) - entryOffset = int( entry[ 7 : 12 ] ) - entryData = marc[ baseAddress + entryOffset : - baseAddress + entryOffset + entryLength - 1 ] - - if entryTag < '010': - field = Field( tag=entryTag, data=entryData ) - else: - subfields = list() - subs = entryData.split( SUBFIELD_INDICATOR ) - i1 = subs[0][0] - i2 = subs[0][1] - for subfield in subs[1:]: - if len(subfield) == 0: continue - code = subfield[0] - data = subfield[1:] - subfields.append( code ) - subfields.append( data ) - field = Field( - tag = entryTag, - indicators = [ i1, i2 ], - subfields = subfields ) - - self.addField( field ) - fieldNum += 1 - - if fieldNum == 0: raise NoFieldsFound - - def asMARC21( self ): - """ - returns the record serialized as MARC21 - """ - fields = '' - directory = '' - offset = 0 - - # build the directory - # each element of the directory includes the tag, the byte length of - # the field and the offset from the base address where the field data - # can be found - for field in self.fields: - fieldData = field.asMARC21() - fields += fieldData - directory += "%03d%04d%05d" % (int(field.tag),len(fieldData),offset) - offset += len( fieldData ) - - # directory ends with an end of field - directory += END_OF_FIELD - - # field data ends with an end of record - fields += END_OF_RECORD - - # the base address where the directory ends and the field data begins - baseAddress = LEADER_LEN + len(directory) - - # figure out the length of the record - recordLength = baseAddress + len(fields) - - # update the leader with the current record length and base address - # the lengths are fixed width and zero padded - self.leader = "%05d%s%05d%s" % \ - ( recordLength, self.leader[5:12], baseAddress, self.leader[17:] ) - - # return the encoded record - return self.leader + directory + fields - - def title( self ): - """ - Returns the title of the record (245 $a an $b). - """ - title = None - try: - title = self['245']['a'] - title += self['245']['b'] - except TypeError, e: - pass - return title - - def isbn( self ): - """ - Returns an ISBN if appropriate. If not present None will - be returned. - """ - isbn = None - try: - # if anyone ever cares alot about performance - # this compilation could be moved out and compiled once - isbnPattern = re.compile( '^([0-9A-Za-z]+)' ) - isbn = isbnPattern.match( self["020"]["a"] ).group(1) - except Exception, e: - pass - return isbn - - def author( self ): - if self['100']: - return self['100'].formatField() - elif self['110']: - return self['110'].formatField() - elif self['111']: - return self['111'].formatField() - return None - - def uniformtitle( self ): - if self['130']: - return self['130'].formatField() - elif self['240']: - return self['240'].formatField() - return None - - def subjects( self ): - """ - Note: Fields 690-699 are considered "local" added entry fields but - occur with some frequency in OCLC and RLIN records. - """ - subjlist = self.getFields ( - '600', '610', '611', '630', '648', '650', '651', '653', '654', - '655', '656', '657', '658', '662', '690', '691', '696', '697', - '698', '699' - ) - return subjlist - - def addedentries( self ): - """ - Note: Fields 790-799 are considered "local" added entry fields but - occur with some frequency in OCLC and RLIN records. - """ - aelist = self.getFields ( - '700', '710', '711', '720', '730', '740', '752', '753', '754', - '790', '791', '792', '793', '796', '797', '798', '799' - ) - return aelist - - def location( self ): - loc = self.getFields('852') - return loc - - def notes( self ): - # todo - pass - - def publisher( self ): - # todo - pass - - def pubyear( self ): - # todo - pass diff --git a/tags/rel-1.4/pymarc/writer.py b/tags/rel-1.4/pymarc/writer.py deleted file mode 100644 index 23c32ff..0000000 --- a/tags/rel-1.4/pymarc/writer.py +++ /dev/null @@ -1,49 +0,0 @@ -from pymarc import Record, Field, WriteNeedsRecord, NoActiveFile -from types import * -from cStringIO import StringIO - -class Writer( object ): - - def write( self ): - pass - -class MARCWriter( Writer ): - """ - A class for writing MARC21 records in transmission format. - - Simple usage: - - from pymarc import MARCWriter - - ## pass in a file - writer = MARCWriter(file('file.dat','w')) - writer.write(record) - - ## use StringIO if you want to write to a string - string = StringIO() - writer = MARCWriter(string) - writer.write(record) - print string - """ - - def __init__(self, f): - """ - You need to pass in a file like object. - """ - self.fh = f - - def write(self, record): - """ - Writes a record. - """ - if type(record) != Record: - raise WriteNeedsRecord - self.fh.write(record.asMARC21()) - - def close( self ): - """ - Closes the file. - """ - self.fh.close() - self.fh = None - diff --git a/tags/rel-1.4/setup.py b/tags/rel-1.4/setup.py deleted file mode 100644 index 43d6ced..0000000 --- a/tags/rel-1.4/setup.py +++ /dev/null @@ -1,39 +0,0 @@ -# bootstrap easy_install -import ez_setup -ez_setup.use_setuptools() - -from setuptools import setup -from sys import version_info - -classifiers = """\ -Intended Audience :: Education -Intended Audience :: Developers -Intended Audience :: Information Technology -License :: OSI Approved :: BSD License -Programming Language :: Python -Topic :: Text Processing :: General -""" - -# workaround for older pythons that don't -# understand classifiers - -if version_info < (2, 3): - _setup = setup - def setup(**kwargs): - if kwargs.has_key("classifiers"): - del kwargs["classifiers"] - _setup(**kwargs) - -setup( - name = 'pymarc', - version = '1.4', - url = 'http://cheeseshop.python.org/pypi/pymarc', - author = 'Ed Summers', - author_email = 'ehs@pobox.com', - license = 'http://www.opensource.org/licenses/bsd-license.php', - packages = [ 'pymarc' ], - description = "read, write and modify MARC bibliographic data", - classifiers = filter( None, classifiers.split("\n") ), - test_suite = 'test' -) - diff --git a/tags/rel-1.4/test.py b/tags/rel-1.4/test.py deleted file mode 100644 index 8ea1517..0000000 --- a/tags/rel-1.4/test.py +++ /dev/null @@ -1,19 +0,0 @@ -import unittest -import test.record -import test.field -import test.reader -import test.encode -import test.writer - -def suite(): - suite = unittest.TestSuite() - suite.addTest( test.record.suite() ) - suite.addTest( test.field.suite() ) - suite.addTest( test.reader.suite() ) - suite.addTest( test.encode.suite() ) - suite.addTest( test.writer.suite() ) - return suite - -runner = unittest.TextTestRunner() -runner.run( suite() ) - diff --git a/tags/rel-1.4/test/__init__.py b/tags/rel-1.4/test/__init__.py deleted file mode 100644 index 4c41d24..0000000 --- a/tags/rel-1.4/test/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -import record -import field -import reader -import marc8 diff --git a/tags/rel-1.4/test/bad.dat b/tags/rel-1.4/test/bad.dat deleted file mode 100644 index 4800dc9..0000000 --- a/tags/rel-1.4/test/bad.dat +++ /dev/null @@ -1,191 +0,0 @@ - - Date: 03/15/2007 - - When searching the Florida State University Library catalog, - you sent the following records: - - -FMT BK -LDR 00000nam 2200409Ia 4500 -006 m d -007 cr cnu|||unuuu -008 041015s2004 caua sb s000|0 eng d -020 |a 1417545372 (electronic bk.) -035 |a (OCoLC)56733780 -0359 |a AMR9920 |b FS -TKR |a (Source)B0013464- 321 -TKR |a (FTaSU)NETLIBY20050112 -OWN |a FS -040 |a N$T |c N$T -05014 |a PS1303 |b .S25 2004eb -08204 |a 818/.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24510 |a Mark Twain's helpful hints for good living |h [electronic resource] : |b a handbook for the damned human race / |c edited by Lin Salamo, Victor Fischer, and Michael B. Frank of the Mark Twain Project. -260 |a Berkeley : |b University of California Press, |c c2004. -300 |a xiv, 207 p. : |b ill. |c 21 cm. -4901 |a Jumping frogs ; |v 2 -504 |a Includes bibliographical references (p. 203-206). -533 |a Electronic reproduction. |b Boulder, Colo. : |c NetLibrary, |d 2004. |n Available via World Wide Web. |n Access may be limited to NetLibrary affiliated libraries. -650 0 |a Conduct of life |v Quotations, maxims, etc. -650 0 |a Conduct of life |v Literary collections. -60010 |a Twain, Mark, |d 1835-1910 |v Quotations. -655 7 |a Electronic books. |2 local -7001 |a Salamo, Lin. -7001 |a Fischer, Victor, |d 1942- -7001 |a Frank, Michael B. -7102 |a Bancroft Library. |b Mark Twain Project. -7102 |a NetLibrary, Inc. -7761 |c Original |z 0520242459 |w (DLC) 2003024224 |w (OCoLC)53398020 -8001 |a Twain, Mark, |d 1835-1910. |t Jumping frogs ; |v 2. -85640 |3 Bibliographic record display |u http://www.netLibrary.com/urlapi.asp?action=summary&v=1&bookid=119359 |z An electronic book accessible through the World Wide Web; click for information -CAT |a NCRD |b 20 |c 20041222 -NCO |a I -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST8 |0 HOL |1 FSU60-002387996 |n 8 |a FTaSU |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -LOC8 |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -SYS 002249954 - -FMT BK -LDR 00000pam 2200301 a 4500 -008 040820s2004 nyu b 000|0 eng -010 |a 2004057341 -020 |a 0142437751 -035 |a (OCoLC)56413662 -0359 |a AMS5114 |b FS -TKR |a (Source)ONIFS141- 49 -OWN |a FS -040 |a DLC |c DLC |d YDX |d FDA -049 |a FDAA ksm -05000 |a PS1302 |b .Q56 2004 -08200 |a 818/.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24514 |a The portable Mark Twain / |c edited with an introduction by Tom Quirk. -260 |a New York : |b Penguin Books, |c 2004. -300 |a liv, 583 p. ; |c 20 cm. -440 0 |a Penguin classics -504 |a Includes bibliographical references (p. [xli]-xlv). -60010 |a Twain, Mark, |d 1835-1910 |v Correspondence. -650 0 |a Humorous stories, American. -650 0 |a Authors, American |y 19th century |v Correspondence. -7001 |a Quirk, Tom, |d 1946- -CAT |a NCRD |b 20 |c 20050218 -CAT |a NUPD |b 20 |c 20050324 -NCO |a blank -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST0 |0 Z30 |1 002255004000010 |b FSULC |c GEN |o BOOK |d 01 |f N |r FSU60-002393331 |n 0 |h PS1302 |i .Q56 2004 |3 Book Sort |4 STROZIER LIBRARY |6 Regular Loan -LOC0 |b FSULC |c GEN |o BOOK |h PS1302 |i .Q56 2004 |3 Book Sort |4 STROZIER LIBRARY |6 Regular Loan -SYS 002255004 - -FMT BK -LDR 00000nam 2200361Ia 4500 -006 m d -007 cr cnu|||unuuu -008 031127s2003 cau s 000|i eng d -020 |a 0520900995 (electronic bk.) -035 |a (OCoLC)53798433 -0359 |a ALU9407 |b FS -TKR |a (Source)B0011135- 96 -TKR |a (FTaSU)NETLIBY20040302 -OWN |a FS -040 |a N$T |c N$T -05014 |a PS1331 |b .A4 2003eb -08214 |a 818.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24010 |a Correspondence. |k Selections -24510 |a Mark Twain's letters 1876-1880. |n Volume 2, |p 1877 |h [electronic resource] / |c edited by the Mark Twain Project. -250 |a Electronic ed. -260 |a Berkeley, Calif. : |b Published for the University of California Press by the Mark Twain Project of the Bancroft Library, |c 2003. -538 |a Mode of access: World Wide Web. -506 |a Made available through NetLibrary; access may be limited to NetLibrary affiliated libraries. -500 |a Title from ebook title screen. -60010 |a Twain, Mark, |d 1835-1910 |v Correspondence. -650 0 |a Authors, American |y 19th century |v Correspondence. -650 0 |a Humorists, American |y 19th century |v Correspondence. -655 7 |a Electronic books. |2 local -7102 |a Bancroft Library. |b Mark Twain Project. -7102 |a NetLibrary, Inc. -8564 |3 Bibliographic record display |u http://www.netLibrary.com/urlapi.asp?action=summary&v=1&bookid=100194 |z An electronic book accessible through the World Wide Web; click for information -CAT |a NCRD |b 20 |c 20040224 -NCO |a I -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST8 |0 HOL |1 FSU60-002178151 |n 8 |a FTaSU |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -LOC8 |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -SYS 002042593 - -FMT BK -LDR 00000nam 2200373Ia 4500 -006 m d -007 cr cnu|||unuuu -008 031127s2003 cau s 000|i eng d -020 |a 0520900987 (electronic bk.) -035 |a (OCoLC)53798432 -0359 |a ALU9406 |b FS -TKR |a (Source)B0011135- 95 -TKR |a (FTaSU)NETLIBY20040302 -OWN |a FS -040 |a N$T |c N$T -05014 |a PS1331 |b .A4 2003eb -08214 |a 818.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24010 |a Correspondence. |k Selections -24510 |a Mark Twain's letters 1876-1880. |n Volume 1, |p 1876 |h [electronic resource] / |c edited by the Mark Twain Project. -250 |a Electronic ed. -260 |a Berkeley, Calif. : |b Published for the University of California Press by the Mark Twain Project of the Bancroft Library, |c 2003. -538 |a Mode of access: World Wide Web. -506 |a Made available through NetLibrary; access may be limited to NetLibrary affiliated libraries. -500 |a Title from ebook title screen. -60010 |a Twain, Mark, |d 1835-1910 |v Correspondence. -650 0 |a Authors, American |y 19th century |v Correspondence. -650 0 |a Humorists, American |y 19th century |v Correspondence. -655 7 |a Electronic books. |2 local -7102 |a Bancroft Library. |b Mark Twain Project. -7102 |a NetLibrary, Inc. -7102 |a NetLibrary, Inc. -8564 |3 Bibliographic record display |u http://www.netLibrary.com/urlapi.asp?action=summary&v=1&bookid=100193 |z An electronic book accessible through the World Wide Web; click for information -CAT |a NCRD |b 20 |c 20040224 -NCO |a I -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST8 |0 HOL |1 FSU60-002178150 |n 8 |a FTaSU |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -LOC8 |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -SYS 002042592 - -FMT BK -LDR 00000nam 2200361Ia 4500 -006 m d -007 cr cnu|||unuuu -008 031202s2003 cau s 000|i eng d -020 |a 0520901010 (electronic bk.) -035 |a (OCoLC)53817958 -0359 |a ALU9412 |b FS -TKR |a (Source)B0011135- 101 -TKR |a (FTaSU)NETLIBY20040302 -OWN |a FS -040 |a N$T |c N$T -05014 |a PS1331 |b .A4 2003eb -08214 |a 818.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24010 |a Correspondence. |k Selections -24510 |a Mark Twain's letters 1876-1880. |n Volume 4, |p 1879 |h [electronic resource] / |c edited by the Mark Twain Project. -250 |a Electronic ed. -260 |a Berkeley, Calif. : |b Published for the University of California Press by the Mark Twain Project of the Bancroft Library, |c 2003. -538 |a Mode of access: World Wide Web. -506 |a Made available through NetLibrary; access may be limited to NetLibrary affiliated libraries. -500 |a Title from ebook title screen. -60010 |a Twain, Mark, |d 1835-1910 |v Correspondence. -650 0 |a Authors, American |y 19th century |v Correspondence. -650 0 |a Humorists, American |y 19th century |v Correspondence. -655 7 |a Electronic books. |2 local -7102 |a Bancroft Library. |b Mark Twain Project. -7102 |a NetLibrary, Inc. -8564 |3 Bibliographic record display |u http://www.netLibrary.com/urlapi.asp?action=summary&v=1&bookid=100196 |z An electronic book accessible through the World Wide Web; click for information -CAT |a NCRD |b 20 |c 20040224 -NCO |a I -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST8 |0 HOL |1 FSU60-002178156 |n 8 |a FTaSU |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -LOC8 |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -SYS 002042598 - - - - Florida State University - Library Staff diff --git a/tags/rel-1.4/test/batch.xml b/tags/rel-1.4/test/batch.xml deleted file mode 100644 index b09773a..0000000 --- a/tags/rel-1.4/test/batch.xml +++ /dev/null @@ -1,157 +0,0 @@ - - - - - 00925njm 22002777a 4500 - 5637241 - DLC - 19920826084036.0 - sdubumennmplu - 910926s1957 nyuuun eng - - 91758335 - - - 1259 - Atlantic - - - DLC - DLC - - - Atlantic 1259 - - - The Great Ray Charles - [sound recording]. - - - New York, N.Y. : - Atlantic, - [1957?] - - - 1 sound disc : - analog, 33 1/3 rpm ; - 12 in. - - - Ray Charles, piano & celeste. - - - The Ray -- My melancholy baby -- Black coffee -- There's no you -- Doodlin' -- Sweet sixteen bars -- I surrender dear -- Undecided. - - - Brief record. - - - Jazz - 1951-1960. - - - Piano with jazz ensemble. - - - Charles, Ray, - 1930- - prf - - - - 01832cmma 2200349 a 4500 - 12149120 - 20001005175443.0 - cr ||| - 000407m19949999dcu g m eng d - - 0 - ibc - copycat - 1 - ncip - 20 - y-gencompf - - - undetermined - web preservation project (wpp) - - - vb07 (stars done) 08-19-00 to HLCD lk00; AA3s lk29 received for subject Aug 25, 2000; to DEWEY 08-25-00; aa11 08-28-00 - - - 00530046 - - - (OCoLC)ocm44279786 - - - IEU - IEU - N@F - DLC - - - lccopycat - - - n-us-dc - n-us--- - - - F204.W5 - - - 975.3 - 13 - - - The White House - [computer file]. - - - Computer data. - - - Washington, D.C. : - White House Web Team, - 1994- - - - Mode of access: Internet. - - - Title from home page as viewed on Aug. 19, 2000. - - - Features the White House. Highlights the Executive Office of the President, which includes senior policy advisors and offices responsible for the President's correspondence and communications, the Office of the Vice President, and the Office of the First Lady. Posts contact information via mailing address, telephone and fax numbers, and e-mail. Contains the Interactive Citizens' Handbook with information on health, travel and tourism, education and training, and housing. Provides a tour and the history of the White House. Links to White House for Kids. - - - White House (Washington, D.C.) - - - United States. - Executive Office of the President. - - - United States. - Office of the Vice President. - - - United States. - Office of the First Lady. - - - White House Web Team. - - - http://www.whitehouse.gov - - - http://lcweb.loc.gov/staff/wpp/whitehouse.html - Web site archive - - - diff --git a/tags/rel-1.4/test/encode.py b/tags/rel-1.4/test/encode.py deleted file mode 100644 index 27e0c76..0000000 --- a/tags/rel-1.4/test/encode.py +++ /dev/null @@ -1,25 +0,0 @@ -import util -from pymarc import MARCReader, Record, Field -import unittest -import os - -class Encode( unittest.TestCase ): - - def test_encode_decode( self ): - # get raw data from file - original = file( 'test/one.dat' ).read() - # create a record object for the file - reader = MARCReader(file('test/one.dat')) - record = reader.next() - # make sure original data is the same as - # the record encoded as MARC - raw = record.asMARC21() - self.assertEqual( original, raw ) - -def suite(): - suite = unittest.makeSuite( Encode, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - diff --git a/tags/rel-1.4/test/field.py b/tags/rel-1.4/test/field.py deleted file mode 100644 index e82aaee..0000000 --- a/tags/rel-1.4/test/field.py +++ /dev/null @@ -1,103 +0,0 @@ -import util -import unittest -from pymarc.record import Record, Field - -class FieldTest( unittest.TestCase ): - - def setUp( self ): - self.field = Field( - tag = '245', - indicators = [ 0, 1 ], - subfields = [ - 'a', 'Huckleberry Finn: ', - 'b', 'An American Odyssey' - ] - ) - - self.controlfield = Field( - tag = '008', - data = '831227m19799999nyu ||| | ger ' - ) - - self.subjectfield = Field( - tag = '650', - indicators = [' ', '0'], - subfields = [ - 'a', 'Python (Computer program language)', - 'v', 'Poetry.' - ] - ) - - def test_string( self ): - self.assertEquals( str(self.field), - '=245 01$aHuckleberry Finn: $bAn American Odyssey') - - def test_controlfield_string( self ): - self.assertEquals( str(self.controlfield), - r'=008 831227m19799999nyu\\\\\\\\\\\|||\|\ger\\') - - def test_indicators( self ): - assert self.field.indicator1 is 0 - self.assertEqual( self.field.indicator2, 1 ) - - def test_subfields_created( self ): - subfields = self.field.subfields - self.assertEqual( len( subfields ), 4 ) - - def test_subfield_short( self ): - self.assertEqual( self.field['a'], 'Huckleberry Finn: ' ) - self.assertEqual( self.field['z'], None ) - - def test_subfields( self ): - self.assertEqual( self.field.getSubfields( 'a' ), - ['Huckleberry Finn: '] ) - self.assertEqual( self.subjectfield.getSubfields( 'a' ), - ['Python (Computer program language)']) - - def test_subfields_multi( self ): - self.assertEqual( self.field.getSubfields( 'a','b' ), - ['Huckleberry Finn: ', 'An American Odyssey' ] ) - self.assertEqual( self.subjectfield.getSubfields( 'a','v' ), - ['Python (Computer program language)', 'Poetry.' ] ) - - def test_encode( self ): - self.field.asMARC21() - - def test_iterator( self ): - string = "" - for subfield in self.field: - string += subfield[0] - string += subfield[1] - self.assertEquals( string, "aHuckleberry Finn: bAn American Odyssey" ) - - def test_value( self ): - self.assertEquals( self.field.value(), - 'Huckleberry Finn: An American Odyssey' ) - self.assertEquals( self.controlfield.value(), "831227m19799999nyu ||| | ger " ) - - def test_non_integer_tag( self ): - # make sure this doesn't throw an exception - f = Field( tag="3 0", indicators=[0,1], subfields=['a', 'foo'] ) - - def test_add_subfield( self ): - f = Field( tag="245", indicators=[0,1], subfields=['a', 'foo'] ) - f.addSubfield('a','bar') - self.assertEquals( f.__str__(), '=245 01$afoo$abar') - - def test_is_subject_field( self ): - self.assertEqual( self.subjectfield.isSubjectField(), True ) - self.assertEqual( self.field.isSubjectField(), False ) - - def test_format_field( self ): - self.assertEqual( self.subjectfield.formatField(), - 'Python (Computer program language) -- Poetry.' ) - self.assertEqual( self.field.formatField(), 'Huckleberry Finn: An American Odyssey' ) - -def suite(): - suite = unittest.makeSuite( FieldTest, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - - diff --git a/tags/rel-1.4/test/marc.dat b/tags/rel-1.4/test/marc.dat deleted file mode 100644 index 9c52c7d..0000000 --- a/tags/rel-1.4/test/marc.dat +++ /dev/null @@ -1 +0,0 @@ -01060cam 22002894a 45000010009000000050017000090080041000260350021000679060045000889250044001339550160001779550053003370100017003900200015004070400018004220420008004400500023004480820014004711000025004852450088005102600044005983000027006425040041006696500026007107000026007369850008007621177850420040816084925.0990802s2000 mau b 001 0 eng  a(DLC) 99043581 a0bvipcorignewd1eocipf19gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc05 to ja00 08-02-99; jf05 to subj. 08/02/99; jf11 to sl 08-03-99; jf25 08-05-99 to ddc; bk rec'd, to CIP ver. ps07 01-07-00; CIP ver jf05 to sl 04/05/00 aADDED COPIES: another copy to ASCD ps15 01-12-00 a 99043581  a020161622X aDLCcDLCdDLC apcc00aQA76.6b.H857 200000a005.12211 aHunt, Andrew,d1964-14aThe pragmatic programmer :bfrom journeyman to master /cAndrew Hunt, David Thomas. aReading, Mass :bAddison-Wesley,c2000. axxiv, 321 p. ;c24 cm. aIncludes bibliographical references. 0aComputer programming.1 aThomas, David,d1956- eGAP00979cam 2200241 a 45000010009000000050017000090080041000269060045000679250042001129550206001540100017003600200015003770400018003920500026004100820017004361000016004532450037004692500012005062600051005183000078005695040051006476500039006981251588220020923085341.0010827s2001 cc a b 001 0 eng  a7bcbccorigcopd2encipf20gy-gencatlg0 aacquireb2 shelf copyxpolicy default apb07 2001-08-27 to ASCDajf00 2001-08-31ajf00 2001-09-05;cjf03 2001-10-16 to Subj.djf01 2001-10-25 to slejf12 2001-11-23; jf12 to Dewey 11-23-01aaa20 2001-12-07; copy 2 added jf16 to BCCD 09-23-02 a 2001276084 a0596000855 aDLCcDLCdDLC00aQA76.73.P98bL88 200100a005.13/32211 aLutz, Mark.10aProgramming Python /cMark Lutz. a2nd ed. aBeijing :aSebastopol, CA :bO'Reilly,cc2001. axxxvii, 1255 p. :bill. ;c24 cm. +e1 computer optical disc (4 3/4 in.). aIncludes bibliographical references and index. 0aPython (Computer program language)00887cam 2200253 a 45000010009000000050017000090080041000269060045000679250044001129550151001560100017003070200015003240400018003390500027003570820017003841000016004012450051004172500012004682600040004803000035005205040020005556500039005757000019006141361051220040714135238.0040601s2004 caua 001 0 eng  a7bcbccorigcopd2encipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apv17 2004-06-01 Preprocessor to ASCDajf00 2004-06-03;cjf03 2004-06-24 to Subj.djf09 2004-06-28 to slejf12 2004-07-01 to Deweyaaa25 2004-07-14 a 2004273129 a0596002815 aDLCcDLCdDLC00aQA76.73.P98bL877 200400a005.13/32221 aLutz, Mark.10aLearning Python /cMark Lutz and David Ascher. a2nd ed. aSebastopol, CA :bO'Reilly,cc2004. axxvi, 591 p. :bill. ;c24 cm. aIncludes index. 0aPython (Computer program language)1 aAscher, David.01038cam 2200289 a 45000010009000000050017000090080041000269060045000679250042001129550167001540100017003210150015003380200015003530350023003680400023003910420014004140500026004280820017004542450065004712600039005363000027005755000048006025000020006506500039006707000020007097000019007291306994220030606071827.0030127s2002 cau 001 0 eng  a7bcbcccopycatd2encipf20gy-gencatlg0 aacquireb2 shelf copyxpolicy default aps04 2003-01-27 to ASCDajf00 2003-01-30cjf05 2003-01-30 to subj.djf09 2003-01-30 to slejf12 2003-02-03 to Deweyaaa20 2003-03-10ajg07 2003-06-06 copy 2 added a 2003268354 aGBA2-Y6761 a0596001673 a(OCoLC)ocm49044543 aUKMcUKMdCUSdDLC alccopycat00aQA76.73.P98bP95 200200a005.13/322100aPython cookbook /cedited by Alex Martelli and David Ascher. aSebastopol, CA :bO'Reilly,c2002. axxix, 574 p. ;c24 cm. a"Recipes from the Python community"--Cover. aIncludes index. 0aPython (Computer program language)1 aMartelli, Alex.1 aAscher, David.00759nam 22002295a 45000010009000000050017000090080041000260350022000679060045000899250044001349550020001780100017001980200015002150400013002300420008002431000021002512450068002722600084003402630009004243000012004339630084004451312796220030318153335.0030318s2003 inu 000 0 eng  a(DLC) 2003104024 a0bibccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2003-03-18 a 2003104024 a1592000738 aDLCcDLC apcc1 aDawson, Michael.10aPython programming for the absolute beginner /cMichael Dawson. aIndianapolis, IN :bPremier Press Inc., a division of Course Technology,c2003. a0306 ap.ccm. aMargaret Bauer ; phone (812) 273-0561 ; fax null email margaret_bauer@yahoo.com01304cam 22002894a 45000010009000000050017000090080041000269060045000679250044001129550280001560100017004360200015004530400018004680420008004860500024004940820017005181000049005352450150005842460030007342600053007643000036008175040064008536500026009176500023009437000021009667000027009871256551420020718085037.0011016s2002 njua b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2001-10-16 to ASCD;cjf03 2001-10-17 to Subj.djf01 2001-10-25 to slejf25 2001-10-25 to Deweyaaa20 2001-10-26aps16 2002-01-11 bk rec'd, to CIP ver.ajf00 2002-01-16fjf04 2002-01-18 to S.L.gjf12 2002-01-18 to bccdajf00 2002-03-26; copy 2 added jf16 to BCCD 07-18-02 a 2001055410 a0130410659 aDLCcDLCdDLC apcc00aQA76.625b.T48 200200a005.2/762211 aThiruvathukal, George K.q(George Kuriakose)10aWeb programming :btechniques for integrating Python, Linux, Apache, and MySQL /cGeorge K. Thiruvathukal, John P. Shafaee, Thomas W. Christoper.14aWeb programming in Python aUpper Saddle River, NJ :bPrentice Hall,cc2002. axviii, 745 p. :bill. ;c24 cm. aIncludes bibliographical references (p. 723-725) and index. 0aInternet programming. 0aWeb sitesxDesign.1 aShafaee, John P.1 aChristopher, Thomas W.01023cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550168001560100017003240200035003410400018003760420008003940500026004020820016004281000029004442450067004732500012005402600051005523000035006035000020006386500039006586300021006977000027007181187737320010105091546.0991228s2000 cc a 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc01 12-28-99; jf03 01-04-00 ; jf11 to sl 1-4-00; jf12 to Dewey 01-06-00; aa05 01-10-00; CIP ver. pv08 to BCCD 05-01-00; copy 2 added jf16 to BCCD 01-05-01 a 99085714  a1565926218 (pbk. : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P98bH36 200000a005.2652211 aHammond, Markq(Mark J.)10aPython programming on Win32 /cMark Hammond and Andy Robinson. a1st ed. aBeijing ;aSebastopol, CA :bO'Reilly,cc2000. axvii, 652 p. :bill. ;c24 cm. aIncludes index. 0aPython (Computer program language)00aMicrosoft Win32.1 aRobinson, Andy,d1967-00867cam 22002538a 45000010009000000050017000090080041000269060045000679250044001129550127001560100017002830200015003000400013003150420008003280500026003360820017003621000019003792450080003982600047004782630009005253000011005346500039005459630029005841343237720031222144424.0031211s2003 oru 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc27 2003-12-11 RUSH to ASCDcjf07 2003-12-17 to subjectdjf09 2003-12-17 to slejp05 2003-12-18 to Deweyaaa20 2003-12-22 a 2003064366 a1887902996 aDLCcDLC apcc00aQA76.73.P98bZ45 200300a005.13/32221 aZelle, John M.10aPython programming :ban introduction to computer science /cJohn M. Zelle. aWilsonville, OR :bFranklin, Beedlec2003. a0312 ap. cm. 0aPython (Computer program language) aTom Sumner, 503-682-766801008cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550171001560100017003270200015003440400018003590420008003770500026003850820018004111000026004292450065004552600046005203000034005665000020006006500039006206500026006596500023006857000022007081222727720030509151148.0001109s2002 inua 001 0 eng  a7bcbccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 11-09-00apv11 2002-04-12 2 copies to ASCDajf00 2002-04-18;cjf03 2002-08-20 to Subj.djf09 2002-08-21 to slejf25 2002-09-10 2 copies to Deweyaaa05 2002-10-04 a 00110884  a0735710902 aDLCcDLCdDLC apcc00aQA76.73.P98bH65 200200a005.2/7622211 aHolden, Steve,d1950-10aPython Web programming /cSteve Holden [with David Beazley]. aIndianapolis, Ind. :bNew Riders,cc2002. axxi, 691 p. :bill. ;c23 cm. aIncludes index. 0aPython (Computer program language) 0aInternet programming. 0aWeb sitesxDesign.1 aBeazley, David M.01049cam 22002534a 45000010009000000050017000090080041000269060045000679250044001129550148001560100017003040200015003210400018003360420008003540500026003620820017003881000018004052450047004232600052004703000066005225040051005885380117006396500039007561216916820010522141328.0000911s2000 nju b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc16 09-11-00; jf02 09-12-00 ; jf11 to sl 9-12-00; jf12 to Dewey 09-14-00; aa05 09-14-00; CIP Ver. jf02 05-11-01; jf12 to BCCD 05-22-01 a 00047856  a0130260363 aDLCcDLCdDLC apcc00aQA76.73.P98bC48 200100a005.13/32211 aChun, Wesley.10aCore python programming /cWesley J. Chun. aUpper Saddle River, NJ :bPrentice Hall,c2001. axxix, 771 p. ;c24 cm. +e1 computer optical disc (4 3/4 in.) aIncludes bibliographical references and index. aSystem requirements for accompanying computer disc: Windows 9x/Me/NT/2000; a Web brouser; Macintosh; UNIX/Linux. 0aPython (Computer program language)00948cam 22002654a 45000010009000000050017000090080041000269060045000679250044001129550133001560100017002890200015003060400018003210420008003390500026003470820017003731000021003902450055004112600038004663000036005045040051005406500039005916500036006306300016006661213218820010817152505.0000804s2000 ctua b 001 0 eng  a7bcbccorignewd2encipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pb05 08-04-00;jfoo 08-08-00;cjf03 2001-07-18 to Subj.djf02 2001-07-19 to slejf25 2001-07-31 to Deweyaaa20 2001-08-17 a 00697831  a1884777813 aDLCcDLCdDLC apcc00aQA76.73.P98bG73 200000a005.13/32211 aGrayson, John E.10aPython and Tkinter programming /cJohn E. Grayson. aGreenwich, CT :bManning,cc2000. axxiii, 658 p. :bill. ;c24 cm. aIncludes bibliographical references and index. 0aPython (Computer program language) 0aTcl (Computer program language)00aTk toolkit.00767nam 22002295a 45000010009000000050017000090080041000260350022000679060045000899250044001349550020001780100017001980200015002150400013002300420008002432450081002512600079003322630009004113000012004204400021004329630084004531337832520031020153106.0031020s2003 inu 000 0 eng  a(DLC) 2003114351 a0bibccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc10 2003-10-20 a 2003114351 a1592000770 aDLCcDLC apcc00aGame programming with Python, Lua, and Ruby /c[edited by] Estelle Manticas. aIndianapolis, IN :bPremier Press, a Division of Course Technology,c2003. a0311 ap.ccm. aGame development aMargaret Bauer ; phone (812) 273-0561 ; fax null email margaret_bauer@yahoo.com01121cam 22002414a 45000010009000000050017000090080041000269060045000679250044001129550362001560100017005180200015005350400018005500420008005680500026005760820017006021000027006192450058006462600052007043000033007565040051007896500039008401256552920030227150222.0011016s2002 njua b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2001-10-16 to ASCD;cjf05 2001-10-17 to subj.djf04 2001-10-17 to S.L.ejf25 2001-10-25 to Deweyaaa20 2001-10-26aps11 2002-01-15 bk rec'd, to CIP ver.fjp07 2002-02-13ajp00 2002-03-08gjp85 2002-03-08 to BCCD; copy 2 added jf16 to BCCD 07-18-02ajf00 2003-01-29ajf07 2003-02-27 somehow copy 1 got back into the CIP ver. stream (handed to acting TL) a 2001055411 a0130409561 aDLCcDLCdDLC apcc00aQA76.73.P98bC47 200200a005.13/32211 aChristopher, Thomas W.10aPython programming patterns /cThomas W. Christopher. aUpper Saddle River, NJ :bPrentice Hall,c2002. axix 538 p. :bill. ;c24 cm. aIncludes bibliographical references and index. 0aPython (Computer program language)01062cam 22002778a 45000010009000000050017000090080041000269060045000679250044001129550120001560100017002760200028002930400013003210420008003340500026003420820018003681000024003862450134004102600041005442630009005853000011005946500039006056500037006446500039006819630064007201275256420020426115101.0020424s2002 mau 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc21 2002-04-24 to ASCDcjf05 2002-04-25 to subj.djf09 2002-04-25 to slejf25 2002-04-26 to Deweyaaa20 2002-04-26 a 2002066565 a0201616165 (alk. paper) aDLCcDLC apcc00aQA76.73.P98bH54 200200a005.2/7622211 aHightower, Richard.10aPython programming with the Java class libraries :ba tutorial for building Web and Enterprise applications /cRichard Hightower. aBoston, MA :bAddison-Wesley,c2002. a0207 ap. cm. 0aPython (Computer program language) 0aJava (Computer program language) 0aApplication softwarexDevelopment. aMarilyn Rash, 617-848-6509; email: timothy.nicholls@awl.com01012cam 22002294a 45000010009000000050017000090080041000269060045000679250044001129550192001560100017003480200028003650400018003930420008004110500026004190820017004451000017004622450151004792600042006303000071006726500039007431216723920010608101527.0000908s2001 mau b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc21 09-08-00;jf05 (desc) 09/08/00 ; jf11 to sl 9-11-00; jf12 to Dewey 09-12-00;aa03 9-12-00;CIP ver jf05 to sl 01/11/01; jf12 to BCCD 02-01-01; copy 2 added jf16 to BCCD 04-24-01 a 00046921  a0201709384 (alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P48bG38 200100a005.13/32211 aGauld, Alan.10aLearn to program using Python :ba tutorial for hobbyists, self-starters, and all who want to learn the art of computer programming /cAlan Gauld. aReading, MA :bAddison-Wesley,c2001. axii, 270 p. ;c24 cm.e+ 1 computer laser optical disc (4 3/4 in.) 0aPython (Computer program language)00935cam 22002534a 450000100070000000500170000700800410002403500210006590600450008692500440013195501480017501000170032302000220034004000180036204200080038005000260038808200170041410000160043124500610044726000390050830000750054765000390062270000200066120525620000830103214.0990629s2000 caua 001 0 eng  9(DLC) 99065006 a7bcbccorignewd2eopcnf19gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apn08/e-pcn 06-29-99; to ASCD pb02 06-10-00; jf00 06-13-00; jf03 08-17-00 ; jf11 to sl 8-22-00; jf25 2 copies to Dewey 08-24-00; aa19 08-30-2000 a 99065006  a0761523340 (pbk.) aDLCcDLCdDLC apcc00aQA76.73.P98bA48 199900a005.13/32211 aAltom, Tim.10aProgramming with Python /cTim Altom with Mitch Chapman. aRocklin, CA :bPrima Tech,cc1999. axxxiv, 372 p. :bill. ;c24 cm. +e1 computer optical disc (4 3/4 in.) 0aPython (Computer program language)1 aChapman, Mitch.01214cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550202001560100017003580200047003750400018004220420008004400500024004480820017004721000019004892450079005082600051005873000058006386500026006966500048007226500040007706500049008108560077008591328439520040226131230.0030722s2004 maua 001 0 eng  a7bcbccorignewd1eecipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ajf05 2003-07-22cjf05 2003-07-22 to subj.djf09 2003-07-22 to slejf12 2003-07-23 to Deweyaaa20 2003-07-29ajf00 2004-01-29fjf07 2004-02-02ejf12 2004-02-03 to BCCDajf16 2004-02-26 copy2 to BCCD a 2003016400 a1584502681 (Pbk. with CD-ROM : alk. paper) aDLCcDLCdDLC apcc00aQA76.625b.J66 200400a005.2/762221 aJones, M. Tim.10aBSD Sockets programming from a multi-language perspective /cM. Tim Jones. aHingham, Mass. :bCharles River Media,cc2004. axix, 444 p. :bill. ;c24 cm. +e1 CD-ROM (4 3/4 in.) 0aInternet programming. 0aComputer networksxDesign and construction. 0aInternetworking (Telecommunication) 0aProgramming languages (Electronic computers)413Table of contentsuhttp://www.loc.gov/catdir/toc/ecip047/2003016400.html01113cam 2200277 a 4500001000800000005001700008008004100025035002100066906004500087955011600132010001700248020003300265040001800298050002300316082001600339245009800355260004600453300003300499440004900532504006400581650005100645650003600696650002300732700001800755991006200773159816719981112152315.2940902s1995 maua b 001 0 eng  9(DLC) 94034264 a7bcbccorignewd1eocipf19gy-gencatlg apc18 to ja00 09-02-94; jf06 to subj 09-06-94; jf11 to sl 09-06-94; jf12 09-06-94 to ddc; CIP ver. jc03 11-23-94 a 94034264  a0201633612 (acid-free paper) aDLCcDLCdDLC00aQA76.64b.D47 199500a005.1/222000aDesign patterns :belements of reusable object-oriented software /cErich Gamma ... [et al.]. aReading, Mass. :bAddison-Wesley,cc1995. axv, 395 p. :bill. ;c25 cm. 0aAddison-Wesley professional computing series aIncludes bibliographical references (p. 375-381) and index. 0aObject-oriented programming (Computer science) 0aComputer softwarexReusability. 0aSoftware patterns.1 aGamma, Erich. bc-GenCollhQA76.64i.D47 1995p00011185514tCopy 1wBOOKS01233cam 2200289 a 45000010009000000050017000090080041000269060045000679250044001129550226001560100017003820200034003990400013004330500024004460820014004702450065004842460015005492500012005642600043005763000021006195000111006405040068007516500026008196500025008457000022008707000051008921237004420020812080859.0010405s2001 mau b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc20 to ja00 04-05-01; jp07 04-11-01 sent to sl;jp85 to Dewey 04-19-01; aa20 04-20-01aps13 2001-08-16 bk rec'd, to CIP ver.fjf07 2001-08-20ajf00 2001-08-20gjf12 2001-08-23 to bccdajf01 2001-09-13 copy 2 added to BCCD a 2001031277 a0262032937 (hc. : alk. paper) aDLCcDLC00aQA76.6b.I5858 200100a005.122100aIntroduction to algorithms /cThomas H. Cormen ... [et al.].30aAlgorithms a2nd ed. aCambridge, Mass. :bMIT Press,cc2001. axxi, 1180 p. cm. aRev. ed. of: Introduction to algorithms / Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest. c1990. aIncludes bibliographical references (p. [1127]-1130) and index. 0aComputer programming. 0aComputer algorithms.1 aCormen, Thomas H.1 aCormen, Thomas H.tIntroduction to algorithms.01009pam 2200265 a 4500001000800000005001700008008004100025035002100066906004500087955011600132010001700248020002200265040001800287050002600305082001700331100001800348245003700366260005300403300003500456440005200491500002700543504006400570650004400634991006500678303540919960425075058.2951006s1996 njua b 001 0 eng  9(DLC) 95045017 a7bcbccorignewd1eocipf19gy-gencatlg apc17 RUSH to ja00 10-06-95;jf05 to subj. 10/06/95; jf04 to S.L. 10-06-95; jf14 10-10-95; CIP ver. jk14 04-22-96 a 95045017  a0133708756 (pbk.) aDLCcDLCdDLC00aQA76.73.C28bG69 199600a005.13/32201 aGraham, Paul.10aANSI Common Lisp /cPaul Graham. aEnglewood Cliffs, N.J. :bPrentice Hall,cc1996. axiii, 432 p. :bill. ;c23 cm. 0aPrentice Hall series in artificial intelligence a"An Alan R. Apt book." aIncludes bibliographical references (p. 401-414) and index. 0aCOMMON LISP (Computer program language) bc-GenCollhQA76.73.C28iG69 1996p00034751468tCopy 1wBOOKS \ No newline at end of file diff --git a/tags/rel-1.4/test/marc8.py b/tags/rel-1.4/test/marc8.py deleted file mode 100644 index ed09748..0000000 --- a/tags/rel-1.4/test/marc8.py +++ /dev/null @@ -1,20 +0,0 @@ -from pymarc import marc8_to_unicode -from unittest import TestCase - -class MARC8Test(TestCase): - - def test_marc8_to_unicode(self): - marc8_file = file('test/test_marc8.txt') - utf8_file = file('test/test_utf8.txt') - count = 0 - - while True: - marc8 = marc8_file.readline().strip("\n") - utf8 = utf8_file.readline().strip("\n") - if marc8 == '' or utf8 == '': - break - count += 1 - self.assertEquals(marc8_to_unicode(marc8).encode('utf8'), utf8) - - self.assertEquals(count, 1514) - diff --git a/tags/rel-1.4/test/one.dat b/tags/rel-1.4/test/one.dat deleted file mode 100644 index a43cf54..0000000 --- a/tags/rel-1.4/test/one.dat +++ /dev/null @@ -1 +0,0 @@ -00755cam 22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500fol05731351 IMchF20000613133448.0000107s2000 nyua 001 0 eng  a 00020737  a0471383147 (paper/cd-rom : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P22bM33 200000a005.13/32211 aMartinsson, Tobias,d1976-10aActivePerl with ASP and ADO /cTobias Martinsson. aNew York :bJohn Wiley & Sons,c2000. axxi, 289 p. :bill. ;c23 cm. +e1 computer laser disc (4 3/4 in.) a"Wiley Computer Publishing." 0aPerl (Computer program language)00aActive server pages.00aActiveX. \ No newline at end of file diff --git a/tags/rel-1.4/test/reader.py b/tags/rel-1.4/test/reader.py deleted file mode 100644 index 52bf586..0000000 --- a/tags/rel-1.4/test/reader.py +++ /dev/null @@ -1,45 +0,0 @@ -import util -import unittest -import pymarc -import re - -class MARCReaderFileTest( unittest.TestCase ): - """ - Tests for the pymarc.MARCReader class which provides iterator - based access to a MARC file. - """ - - def setUp( self ): - self.reader = pymarc.MARCReader(file('test/test.dat')) - - def test_iterator( self ): - count = 0 - for record in self.reader: - count += 1 - self.assertEquals(count, 10, 'found expected amt of MARC21 records') - - def test_string( self ): - ## basic test of stringification - startsWithLeader = re.compile( "^=LDR" ) - hasNumericTag = re.compile( "\n=\d\d\d " ) - for record in self.reader: - text = str(record) - self.failUnless( startsWithLeader.search(text), 'got leader') - self.failUnless(hasNumericTag.search(text), 'got a tag') - -class MARCReaderStringTest(MARCReaderFileTest): - - def setUp(self): - raw = file('test/test.dat').read() - self.reader = pymarc.reader.MARCReader(raw) - - # inherit same tests from MARCReaderTestFile - -def suite(): - fileSuite = unittest.makeSuite(MARCReaderFileTest, 'test') - stringSuite = unittest.makeSuite(MARCReaderStringTest, 'test') - suite = unittest.TestSuite((fileSuite, stringSuite)) - return suite - -if __name__ == "__main__": - unittest.main() diff --git a/tags/rel-1.4/test/record.py b/tags/rel-1.4/test/record.py deleted file mode 100644 index 331e1a1..0000000 --- a/tags/rel-1.4/test/record.py +++ /dev/null @@ -1,178 +0,0 @@ -import util -import unittest - -from pymarc import Record, Field -from pymarc.exceptions import * - -class RecordTest( unittest.TestCase ): - - def test_add_field( self ): - record = Record() - field = Field( - tag = '245', - indicators = [ '1', '0' ], - data = [ 'a', 'Python', 'c', 'Guido' ] ) - record.addField( field ) - self.failUnless( field in record.fields, msg='found field' ) - - def test_quick_access( self ): - record = Record() - title = Field( - tag = '245', - indicators = [ '1', '0' ], - data = [ 'a', 'Python', 'c', 'Guido' ] ) - record.addField( title ) - self.assertEqual( record['245'], title, 'short access' ) - self.assertEqual( record['999'], None, 'short access with no field' ) - - def test_field_not_found( self ): - record = Record() - self.assertEquals( len( record.fields ), 0 ) - - def test_find( self ): - record = Record() - subject1 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Programming Language' ] ) - record.addField( subject1 ) - subject2 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Object Oriented' ] ) - record.addField( subject2 ) - found = record.getFields( '650' ) - self.assertEqual( found[0], subject1, 'getFields() item 1' ) - self.assertEqual( found[0], subject1, 'getFields() item 2' ) - found = record.getFields() - self.assertEqual(len(found), 2, 'getFields() with no tag') - - def test_multi_find( self ): - record = Record() - subject1 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Programming Language' ] ) - record.addField( subject1 ) - subject2 = Field( - tag = '651', - indicators = [ '', '0' ], - data = [ 'a', 'Object Oriented' ] ) - record.addField( subject2 ) - found = record.getFields( '650', '651' ) - self.assertEquals( len(found), 2 ) - - def test_bad_leader( self ): - record = Record() - self.failUnlessRaises( RecordLeaderInvalid, - record.decodeMARC, 'foo' ) - - def test_bad_base_address( self ): - record = Record() - self.failUnlessRaises( BaseAddressInvalid, - record.decodeMARC, '00695cam 2200241Ia 45x00' ) - - def test_title( self ): - record = Record() - self.assertEquals( record.title(), None ) - record.addField( Field( '245', [0,1], - subfields=[ 'a', "Foo :", 'b', 'bar' ] ) ) - self.assertEquals( record.title(), 'Foo :bar' ) - - record = Record() - record.addField( Field( '245', [0,1], - subfields=[ 'a', "Farghin" ] ) ) - self.assertEquals( record.title(), "Farghin" ) - - def test_isbn( self ): - record = Record() - self.assertEquals( record.isbn(), None ) - record.addField( Field( '020', [0,1], subfields=['a', '123456789' ] ) ) - self.assertEquals( record.isbn(), '123456789' ) - - def test_author( self ): - record = Record() - self.assertEquals( record.author(), None) - record.addField( Field( '100', [1,0], subfields=['a', 'Bletch, Foobie,', 'd', '1979-1981.'] ) ) - self.assertEquals( record.author(), 'Bletch, Foobie, 1979-1981.') - - record = Record() - record.addField( Field( '130', [0,' '], subfields=['a', 'Bible.', 'l', 'Python.'] ) ) - self.assertEquals( record.author(), None) - - def test_uniformtitle( self ): - record = Record() - self.assertEquals( record.uniformtitle(), None ) - record.addField( Field( '130', [0,' '], - subfields=[ 'a', "Tosefta.", 'l', "English.", 'f', "1977." ] ) ) - self.assertEquals( record.uniformtitle(), "Tosefta. English. 1977." ) - - record = Record() - record.addField( Field( '240', [1,4], - subfields=[ 'a', "The Pickwick papers.", 'l', "French." ] ) ) - self.assertEquals( record.uniformtitle(), "The Pickwick papers. French." ) - - def test_subjects( self ): - record = Record() - r1 = '=630 0\\$aTosefta.$lEnglish.$f1977.' - r2 = '=600 10$aLe Peu, Pepe.' - shlist = [r1, r2] - self.assertEquals( record.subjects(), [] ) - record.addField( Field( '630', [0,' '], - subfields=[ 'a', "Tosefta.", 'l', "English.", 'f', "1977." ] ) ) - record.addField( Field( '730', [0,' '], - subfields=[ 'a', "Tosefta.", 'l', "English.", 'f', "1977." ] ) ) - record.addField( Field( '600', [1,0], - subfields=[ 'a', "Le Peu, Pepe." ] ) ) - self.assertEquals( len( record.subjects() ), 2 ) - self.assertEquals( record.subjects()[0].__str__(), r1 ) - self.assertEquals( record.subjects()[1].__str__(), r2 ) - rshlist = [rsh.__str__() for rsh in record.subjects()] - self.assertEquals( shlist, rshlist ) - - def test_added_entries( self ): - record = Record() - ae1 = '=730 0\\$aTosefta.$lEnglish.$f1977.' - ae2 = '=700 10$aLe Peu, Pepe.' - aelist = [ae1, ae2] - self.assertEquals( record.addedentries(), [] ) - record.addField( Field( '730', [0,' '], - subfields=[ 'a', "Tosefta.", 'l', "English.", 'f', "1977." ] ) ) - record.addField( Field( '700', [1,0], - subfields=[ 'a', "Le Peu, Pepe." ] ) ) - record.addField( Field( '245', [0,0], - subfields=[ 'a', "Le Peu's Tosefa." ] ) ) - self.assertEquals( len( record.addedentries() ), 2 ) - self.assertEquals( record.addedentries()[0].__str__(), ae1 ) - self.assertEquals( record.addedentries()[1].__str__(), ae2 ) - raelist = [rae.__str__() for rae in record.addedentries()] - self.assertEquals( aelist, raelist ) - - def test_location( self ): - record = Record() - loc1 = '=852 \\\\$aAmerican Institute of Physics.$bNiels Bohr Library and Archives.$eCollege Park, MD' - loc2 = '=852 01$aCtY$bMain$hLB201$i.M63' - loclist = [loc1, loc2] - self.assertEquals( record.location(), [] ) - record.addField( Field('040', [' ',' '], - subfields=[ 'a', 'DLC', 'c', 'DLC' ] ) ) - record.addField( Field('852', [' ',' '], - subfields=[ 'a', 'American Institute of Physics.', - 'b', 'Niels Bohr Library and Archives.', - 'e', 'College Park, MD' ] ) ) - record.addField( Field('852', [0,1], - subfields=['a', 'CtY', 'b', 'Main', 'h', 'LB201', 'i', '.M63'] ) ) - self.assertEquals( len( record.location() ), 2 ) - self.assertEquals( record.location()[0].__str__(), loc1 ) - self.assertEquals( record.location()[1].__str__(), loc2 ) - rloclist = [rloc.__str__() for rloc in record.location()] - self.assertEquals( loclist, rloclist ) - -def suite(): - suite = unittest.makeSuite( RecordTest, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - - diff --git a/tags/rel-1.4/test/test.dat b/tags/rel-1.4/test/test.dat deleted file mode 100644 index 68d6dad..0000000 --- a/tags/rel-1.4/test/test.dat +++ /dev/null @@ -1 +0,0 @@ -00755cam 22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500fol05731351 IMchF20000613133448.0000107s2000 nyua 001 0 eng  a 00020737  a0471383147 (paper/cd-rom : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P22bM33 200000a005.13/32211 aMartinsson, Tobias,d1976-10aActivePerl with ASP and ADO /cTobias Martinsson. aNew York :bJohn Wiley & Sons,c2000. axxi, 289 p. :bill. ;c23 cm. +e1 computer laser disc (4 3/4 in.) a"Wiley Computer Publishing." 0aPerl (Computer program language)00aActive server pages.00aActiveX.00647pam 2200241 a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001500161100002600176245006700202260003800269263000900307300001100316650003700327650002500364700001600389fol05754809 IMchF20000601115601.0000203s2000 mau 001 0 eng  a 00022023  a1565926994 aDLCcDLCdDLC apcc00aQA76.73.P22bD47 200000a005.742211 aDescartes, Alligator.10aProgramming the Perl DBI /cAlligator Descartes and Tim Bunce. aCmabridge, MA :bO'Reilly,c2000. a1111 ap. cm. 0aPerl (Computer program language) 0aDatabase management.1 aBunce, Tim.00605cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077040001800094042000800112050002700120082001700147100002100164245005500185260004500240300002600285504005100311650003700362fol05843555 IMchF20000525142739.0000318s1999 cau b 001 0 eng  a 00501349  aDLCcDLCdDLC apcc00aQA76.73.P22bB763 199900a005.13/32211 aBrown, Martin C.10aPerl :bprogrammer's reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axix, 380 p. ;c22 cm. aIncludes bibliographical references and index. 0aPerl (Computer program language)00579cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002700135082001700162100002100179245005500200260004500255300003600300650003700336fol05843579 IMchF20000525142716.0000318s1999 caua 001 0 eng  a 00502116  a0072120002 aDLCcDLCdDLC apcc00aQA76.73.P22bB762 199900a005.13/32211 aBrown, Martin C.10aPerl :bthe complete reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axxxv, 1179 p. :bill. ;c24 cm. 0aPerl (Computer program language)00801nam 22002778a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001800156100002000174245008800194250003200282260004100314263000900355300001100364650003700375650003600412650002600448700002500474700002400499fol05848297 IMchF20000524125727.0000518s2000 mau 001 0 eng  a 00041664  a1565924193 aDLCcDLC apcc00aQA76.73.P22bG84 200000a005.2/7622211 aGuelich, Scott.10aCGI programming with Perl /cScott Guelich, Shishir Gundavaram & Gunther Birznieks. a2nd ed., expanded & updated aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language) 0aCGI (Computer network protocol) 0aInternet programming.1 aGundavaram, Shishir.1 aBirznieks, Gunther.00665nam 22002298a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002700130082001700157111005200174245008600226250001200312260004100324263000900365300001100374650005000385fol05865950 IMchF20000615103017.0000612s2000 mau 100 0 eng  a 00055759  a0596000138 aDLCcDLC apcc00aQA76.73.P22bP475 200000a005.13/32212 aPerl Conference 4.0d(2000 :cMonterey, Calif.)10aProceedings of the Perl Conference 4.0 :bJuly 17-20, 2000, Monterey, California. a1st ed. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)vCongresses.00579nam 22002178a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100002800173245006200201260004100263263000900304300001100313650003700324fol05865956 IMchF20000615102948.0000612s2000 mau 000 0 eng  a 00055770  a1565926099 aDLCcDLC apcc00aQA76.73.P22bB43 200000a005.13/32211 aBlank-Edelman, David N.10aPerl for system administration /cDavid N. Blank-Edelman. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)00661nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100001700173245006700190250001200257260004100269263000900310300001100319650003700330700002300367700001700390fol05865967 IMchF20000615102611.0000614s2000 mau 000 0 eng  a 00055799  a0596000278 aDLCcDLC apcc00aQA76.73.P22bW35 200000a005.13/32211 aWall, Larry.10aProgramming Perl /cLarry Wall, Tom Christiansen & Jon Orwant. a3rd ed. aCambridge, Mass. :bO'Reilly,c2000. a0007 ap. cm. 0aPerl (Computer program language)1 aChristiansen, Tom.1 aOrwant, Jon.00603cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001700161100003200178245006000210260005700270300003300327650003700360fol05872355 IMchF20000706095105.0000315s1999 njua 001 0 eng  a 00500678  a013020868X aDLCcDLCdDLC apcc00aQA76.73.P22bL69 199900a005.13/32211 aLowe, Vincentq(Vincent D.)10aPerl programmer's interactive workbook /cVincent Lowe. aUpper Saddle River, NJ :bPrentice Hall PTP,cc1999. axx, 633 p. :bill. ;c23 cm. 0aPerl (Computer program language)00696nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020002800094040001300122042000800135050002600143082001700169100002600186245004400212260005100256263000900307300001100316500002000327650003700347650001700384650004100401fol05882032 IMchF20000707091904.0000630s2000 cau 001 0 eng  a 00058174  a0764547291 (alk. paper) aDLCcDLC apcc00aQA76.73.P22bF64 200000a005.13/32212 aFoster-Johnson, Eric.10aCross-platform Perl /cEric F. Johnson. aFoster City, CA :bIDG Books Worldwide,c2000. a0009 ap. cm. aIncludes index. 0aPerl (Computer program language) 0aWeb servers. 0aCross-platform software development. \ No newline at end of file diff --git a/tags/rel-1.4/test/test_marc8.txt b/tags/rel-1.4/test/test_marc8.txt deleted file mode 100644 index d656f3f..0000000 --- a/tags/rel-1.4/test/test_marc8.txt +++ /dev/null @@ -1,1514 +0,0 @@ -(3YhOI,(B (3eMeO(B. -(3cja(B (3SbWJ(B (3GdedcjI(B (3aj(B (3eUQ?(B : -(3GdWHYI(B 1. -(3GdbGgQI(B : -$1!S+!#!'`X!_s(B. -$1!Os!0!!#!!A3'44(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!!!!m(B $1i$N(B $1!X$-SD(B $1!`;!0$!\g(B / -$1!D&!0a(B : -$1!X$-SD(B $1!`;!0$!\g(B, -$1!:g!D&(B $1!1:!0m(B, -$1!X$-SD(B $1!`;!0$!\g(B, -$1i%$i%.i%ji%9(B $1!BX!:`!5=(B : -$1!D&!0a(B : -$1!Tk!Xl(B $1!Tk!BX!:`(B $1!Y4!!L$(B $1!=>(B, -$1!Bk!0d(B $1i$Di$Ri$K(B $1i$+i$Xi$ii$:(B : -$1!WN!JH(B. -$1!D&!0a(B : -$1!X$-SD(B $1!`;!0$!\g(B, -$1!0-!L,(B $1i$N(B $1!X\(B : -$1!D&!0a(B : -$1!05!L$(B $1!:[!0!(B, -$1!X$-SD(B $1!`;!0$!\g(B, -$1!GzK\[(B $1!0!!9'(B, -$1!X$-SD(B $1!`;!0$!\g(B, -$1!TX!U}i!&i%7i%'i%$i%/i%9i%Ti%"i!&i%(i%ji%*i%Ci%H(B / -$1!Os(B 1$1!JH(B. -$1!D&!0a(B : -$1!D-!;S(B $1!TX!U}(B, -$1!]y'O@(B $1-1w!1W(B, -$1!D-!;S(B $1!TX!U}(B, -$1!15!0;!^U(B $1!_0!5=(B, -$1!X$-SD(B $1!`;!0$!\g(B $1!Y$(B : -$1!D&!0a(B : -$1!KG!0s(B $1!X\!0d!Y$(B $1!5+!CU(B ; -$1!X$-SD(B $1!`;!0$!\g(B, -(3THjdj,(B (3YHO(B (3GdQMef(B. -(3GdcdeI(B (3GdYQHjI(B : -[Saudi Arabia] : -(3cJGH(B (3GdTQb(B (3GdGhSW(B -(3ecGfI(B (3GdEHGVjI(B (3aj(B (3GdMVGQI(B (3GdESdGejI(B / -(3GdWHYI(B 1. -[(3GdbGgQI(B] : -$1!X$-SD(B $1!`;!0$!\g(B, -$1!:m!Ci(B $1!X$-SD(B $1!`;!0$!\g(B $1!3"!_A(B. -$1!WN!JH(B. -$1!D&!0a(B : -$1!X$-SD(B $1!`;!0$!\g(B $1!3"!_A(B. -$1!<7!V3(B $1!R;!0s!:M(B, -$1!;%i$7i$$(B $1'Rt(B : -$1!D&!0a(B : -$1!X$-SD(B $1!`;!0$!\g(B, -$1!X$-SD(B $1!`;!0$!\g(B, -$1!(B $1!RA!Tk(B $1'5+'CU(B ; -(3aQRGO,(B (3YHO(B (3GdMSjf(B. -(3GdefgL(B (3aj(B (3JGQjN(B (3GdCOH(B (3GdYQHj(B : -Tehran : -$1!8x(B $1!D3!Bu(B. -$1!G[!`[(B $1!C\!1W(B / -Kuala Lumpur : -$1!08!WX(B $1!3K!JH(B $1!Pn!3W(B ; -$1!:M!Cg(B, -$1!C{!<5(B $1!Bs'X<(B / -[Singapore] : -$1!:M!Cg(B, -(3LGFRI(B (3SdWGf(B (3GdYhjS(B (3GdKbGajI(B : -(3GdTGQbI(B : -(3efThQGJ(B (3GJMGO(B (3cJGH(B (3hGOHGA(B (3GdGeGQGJ(B -(3eDSSI(B (3SdWGf(B (3Hf(B (3Ydj(B (3GdYhjS(B (3GdKbGajI(B. -(3GJMGO(B (3cJGH(B (3hCOHGA(B (3GdEeGQGJ(B. -$1!By'4U!#!!F\!#!!7u!#!!1?!JU!#!'^i!Pn!#!!5#!#!!3*!#!!35'2f!#!'X}!@z!#!!4x!KH(B : -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -$1!5t(B $1!1a!04(B $1';@'[4(B $1!5w(B $1!0q(B $1!M"(B $1!@&'Rw(B $1'?n!5"(B / -[$1'^L!C%(B] : -$1!5t(B $1!1a!04(B, -$1!04!3((B $1!5@!D$(B $1!MI!9f(B. -$1!4c';2!(B $1!O2'43!;P(B. -$1'=*!X$(B $1'8t!Bo(B $1!T&!G4'4U(B $1!4c';2!.!Hu(B $1'T2(B $1!Na'CZ(B $1'YK!_z(B -$1!Os(B1$1!JH(B. -$1!4I!0a!!#!!7t!CU!`y(B $1!V+!#!!BK!It!#!!\S!CU!#!KN7!ON!#!!Y$!UN!#!!MB!]t!#!!P{!=<(B / -$1!BK!It!#!!\S!CU!#!KN7!ON!#!!Y$!UN!#!!MB!]t!#!!P{!=<(B -$1!7o'2>!#!!7t!CU!`y(B $1!V+!#!!BK!It!#!!\S!CU!#!KN7!ON!#!!Y$!UN!#!!MB!]t!#!!P{!=<(B -$1!Os(B1$1!JH(B. -$1!4I!0a!!#!!7t!CU!`y(B -$1!\l(B $1!F]!O$(B, -$1'`v#Nl(B : -$1!\l(B $1!F]!O$(B $1!`1'EN(B $1'XN'Y$!_A(B -$1!WN!JH(B. -[Singapore] : -1950$1oL(oL}!#!o]OoPpoJ6!#!oVi!#!o\eoIo!#!oR_o]J!#!oU~!#!oVj!#!oT"oOh!#!oW=oQX!#!oVi!#!oQaoIg!#!(B/ -$1oS!oV>!#!o[ZoQ=oT#!#!(B: -$1o\eoIo!#!o].oL}oR_!#!oVi!#!oW'!#!oVloT$(B ; -$1o].oL}oR_!#!oUaoInoS?!#!oJ6o]K!#!oUaoIn(B -$1o\e!#!o]soS[(B. -$1o\eoIo!#!oW=oT%!#!oPJo]?!#!oUaoInoVG(B. -$1!BK!It!#!!?V!G:!#!!C[!0n!#!!XR!Dc(B / -$1!C[!0n!#!!XR!Dc(B -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -"$1!Ci!CU!#!!B=!]t!#!!BK!It!#!!?V!G:!R0!#!!\S!8!!#!!3K!7u!#!!M"!#!i!T!1J!R_!#!!5w!#!!04!?u!#!!M^!;3!#!!XR!CU!#!!7e!C-!#!!C[!0n!#!!0T!4W!Dci!U!#!(B($1!PA!O(B $1!Df!:M(B, -$1!0!'_N(B $1!T5!Tx!`"(B / -[s.l.] : -$1!4l'U<(B $1!1?'4`(B $1!BX'5+(B. -$1!3i!E[!V0(B $1!D-!(B $1!X(B $1';7!1?(B $1'X8'3|(B $1':`'6>(B $1!1?!6-!_A(B -$1!WN!JH(B. -[Singapore] : -$1!Bg(B $1!DG!a)(B. - $1!;I(B $1!0e(B. -$1'R{(B $1K_p!C%(B $1!7z(B $1!6@!G!(B : -$1!;I(B $1!0e(B $1!N%!P.(B $1!;E'Xi(B -$1!WN!JH(B. -Singapore : -$1!=x'CU(B ; -$1!L}(B $1!U1(B. -$1!L}(B $1!U1(B $1!BM!BX'\O(B / -$1!WN!JH(B. -Singapore : -$1!Be!4&!8+(B $1!Be'U<(B $1!1?'2>(B $1'5+'CU(B -$1!Be!4&!8+(B $1!Be'U<(B $1!1?'2>(B $1!1?!6-!_A(B ; -$1'E*(B $1!>0(B, -$1!db(B $1!Be'U<(B $1!BX'8d(B $1'Y$(B $1!5#(B $1!4l'U<(B $1!BX':`(B / -$1!WN!JH(B. -Singapore : -$1!Be!4&!8+(B $1!Be'U<(B $1!1?'2>(B $1!1?!6-!_A(B ; -$1!5t(B $1!GE!<&(B. -$1'9$E7h(B $1!0d!Ky(B / -$1!WN!JH(B. -Singapore : -$1!5t(B $1!GE!<&(B $1!1?!6-(B ; -$1'_#(B $1!0;!_`(B, -$1!Nk!<5(B $1!9%!7y(B $1!6F'E](B $1'If!^v(B : -$1!04K7o(B $1!6F'E-(B $1'Kg!8W(B $1!5w(B $1!BX!4H(B $1!M"'YK'\Q(B -$1!WN!JH(B. -[Singapore] : -$1!T9!87'Qd(B $1!BX!JU'Xm(B / -[$1!T9!87'Qd(B. -$1!T9!87'Qd(B (China). -$1!T9!87'Qd(B (China). -$1!T9!87'Qd(B (China). -$1!04!7o(B $1!5.!0s(B $1!=3!P:(B $1!F*!5=(B $1!7t!Xi(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!(B : -$1!04!9*(B $1!FM!Bo(B $1!9%':`(B $1!04K7o(B $1!;F'BT(B $1!FM!Bo(B $1KN7!ON(B $1!04!=x(B $1'5+'CU(B -$1!\o-HE'3k!Bo(B $1!T&!G4!Bp(B (China) -$1'Kg(B $1!GB!(B $1!Bg!X7(B $1'Xl!`1(B $1!N7!ON(B / -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -$1!A)!P{(B $1!0=(B $1!D((B : -$1'_T!4c(B $1'Yl'Y~(B $1':`!^z(B $1!=3!DC(B 50$1!5t!'CZ(B. -$1!;&!43(B $1!U4!DU(B : -$1'7F!0s(B $1!N#'Y<(B $13BD!S,(B $1!M"(B $1'YK!_z(B -$1!Os(B1$1!JH(B. -$1!F''HW(B : -$1!3'!3((B $1-Fm!O|(B $1KN7!ON(B : -$1!Os(B1$1!JH(B. -$1'^L!Fw(B : -$1!3'!3((B $1!P'!KH(B $1'Y$'5+(B -$1'`N(B $1!1I'U<(B, -$1'\V'7U(B $1!Be!0-'Pp(B : -$1'=*!<5!E(B $1!Pn'Q1(B $1!M"(B $1!KH'Y$(B $1'T2(B $1';1'Zh(B -$1!Os(B1$1!JH(B. -$1'=*!<5(B : -$1'=*!<5(B (China) -$1!?p(B $1!\+(B -$1'V$(B $1!;{!G=(B. -$1!0"(B $1!=3'23(B. -$1'`.(B $1!@m'\D(B. -$1!;e!X$(B $1!5.!Nh!8@(B : -$1!M{!Oe(B $1!7z(B $1!0d(B $1!Nk(B $1!0=(B $1'^U(B -$1!Os(B1$1!JH(B. -$1'I1'_.!(B $1!CU!Pn(B -$1!K3(B $1K7o'QN(B, -$1!Cs(B $1!4&'E7(B. -$1'[4!K}(B $1!Ky!JU(B $1!@,EWF(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!!BX(B $1!N7!ON(B $1!Y$!BX(B; -$1!UZ!F#!1W(B, -$1'V5'(B $1o[loWloT#(B : -$1oT%(B $1o].oWn(B. -$1!F'(B $1!Bw!;x(B. -$1!Gn!2~(B $1!bb!;e(B $1!M"(B $1!S8'=e(B : -$1!@0';B(B $1!=w!<5(B -$1!Os(B2$1!JH(B. -$1'=*!<5(B : -$1'a_'KG(B $1!0=!Bk(B = -$1!=w!<5(B $1!7y'4U(B(China) -$1!=w!<5(B $1!7y'4U(B(China) -$1!4c(B $1'bV'[4(B. -$1!FF'[=(B $1!BA!G4(B $1'Wl!!.!>m(B $1'T2(B $1';1'Zh(B / -$1!Os(B1$1!JH(B. -$1'I&!4c(B : -$1!FH(B $1'I!'D&(B, -$1!0R(B $1'_T(sm(B. -$1'ZO(B $1'Xm!>#(B. -$1!FM!Bo(B $1!BX':`(B $1'Y$!O>(B / -$1!Os(B1$1!JH(B. -$1'I1'_.!!DN!Tx(B : -$1!87!!Y?(B $1!R!(B / -$1!Os(B1$1!JH(B. -$1!^L!C%(B : -$1!4"(B $1!BX!Gb(B, -Confucius. -$1!<:!0/(B $1!C!(B. -$1!4"(B $1!BX!Gb(B, -$1!UW(B $1!G@'\4(B, -$1!Rr!Ih(B $1!7y!!W&(B $1!G6!G%(B $1!M"(B $1!=Q!?b(B, $1'\4!WD(B $1'T2(B $1!@z'Wl(B $1KN7!ON(B / -$1!Os(B1$1!JH(B. -$1!0&!GW!#!FH(B. -$1!123BD(B $1!Ci'X0(B $1!>.!>m(B $1'Y$-J;(B $1!M"(B $1'KG!0s!>4(B $1!R]!;3(B / -$1!Os(B1$1!JH(B. -$1!0&!GW(B : -$1!04K7o(B $1!M"(B $1'KG!0s!>4(B $1'T2(B $1!0d!BX(B $1':`EWF(B $1'5+'CU(B -$1!7y!KH(B $1!1W!>E(B $1'T2(B $1'X)'3|(B $1!B(B, -$1'b^';C(B $1!TP!HG!LG(B, 2004 = -$1!Os(B1$1!JH(B. -$1!4I!0a!.!Hu(B $1!5='Y$(B / -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -"$1)JD!X$(B $1'(B $1'Z"!4)(B $1!3K!JH(B"--P. facing t.p. -$1!:j!0s(B $1!2F!X<(B $1!Z"!B\(B $1!5+!3U(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!4(B $1!<7!O5(B $1'T2(B $1!P'!KH(B = -$1!Os(B1$1!JH(B. -$1!4I!0a!(B / -$1!Os(B1$1!JH(B. -$1'^S!;(B $1!BX!4H(B $1KN7!ON(B $1'5+'CU(B -$1!04K7o(B $1'Yl!;'(B $1!Be'Yx(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!w!FM(B. -$1!a\!59'bV(B $1'4{!5=(B $1'T2(B $1!BX!4H(B $1':`EWF(B $1KN7'X='CZ(B -$1!a\!59'bV!5=(B $1!Be(B $1KN7!ON(B / -$1!a\!59'bV(B $1'4{!5=(B $1'T2(B $1!BX!4H(B $1':`EWF(B $1KN7'X='CZ(B $1'Y$!BX!_A(B -$1!Os(B1$1!JH(B. -$1!=2!5@!.!>m(B $1'T2(B $1'Wl!!_z(B / -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -$1!04!4c(B $1'Yl'Q<(B $1!9%':`(B $1'Yl!BA':`(B $1!4d!8r'bj(B $1';D'F(B, -$1!]>!C!!`y(B $1!5+!O>(B $1!WN!Q[(B / -$1!4I!0a(B $1!Os(B1$1!JH(B. -$1!4I!0a(B : -$1!_#(B $1!;#!>F(B $1!_A(B -$1'D&!4I(B $1!R\!<7'E-(B $1!8(B $1!1?!6-(B $1!Pa'\O(B -$1!Fw(B $1'^='U<(B. -$1!C[(B $1'U<(B. -$1!9%!7q(B $1!'CZ(B . -$1!4c!0a!(B, -$1!Tk!PV(B $1!_"!;6(B $1'Wl!(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1oJ;(B $1oMSoX+(B, -$1oIUoW=(B $1oI!oNnoQ,(B $1oRl(B $1oIDoW?oO/(B $1oX0oWt(B $1oJ(oW?(B $1oUaoIn(B / -$1oS!oV>(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1oYQ(B $1oS/oJ.(B. -OECD $1oJ6oUN(B $1oX)oPz(B $1oInoWI(B $1oVGoYe(B $1oVi(B $1oIooK_oQ,(B $1oS[oV9(B $1oUV(B $1oIZo\e(B $1oUaoIn(B / -$1oS!oV>(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1oJ;(B $1oW=oS](B. -$1o\voW=oQ,(B $1oRl(B $1oW'o[o(B $1oV-(B $1oQZoW/(B $1o\noI?(B $1oQ,oW?(B $1oUaoIn(B / -$1oS!oV>(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1oJ;(B $1oS[oX+(B, -$1oIUoPGoVG(B $1oI{oVk(B $1o\xoRl(B $1oVd(B $1oVSo\e(B $1o\voW=(B $1oInoW?(B $1oQ,oW?(B $1oUaoIn(B / -$1oS!oV>(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1!2?(B $1!1T!E7(B, -$1!2?(B $1!1T!E7(B $1!X4!YJ(B $1!:W!:M(B : -$1!WN!JH(B. -$1(;}!4I!Qd(B $1!Be!k(B $1!A&!88(B $1!M"(B $1!P.!`2(B -$1!Os(B1$1!JH(B. -$1!a)!H$(B : -$1!04!7o(B $1!3(!Kz!bo(B -$1!04!7o(B $1!7o!FM!bo(B -$1!5\(B $1!Hm!Ky(B. -$1!D$(B $1!VF(B $1!T2(B $1!BX!4H(B $1!9%!_z!5y(B / -$1!Os(B2$1!JH(B. -Carle Place, N.Y. : -$1i!T!MO!MHi!U!Pn!3W(B ; -$1!D$(B $1!VF(B, -$1!5t(B $1!@*!0d(B. -$1!Bu!Cd(B $1!a)!H$(B $1!_U!=Y!5=(B (1897-1945) / -$1!a)!H$(B : -$1!Cs(B $1!0w-U-(B. -$1!aq(B $1!?b!>.(B. -$1!3#!;l(B $1!;!!1J(B 50 $1!(B $1'Z=!4)(B $1!3K!JH(B." -$1!\s(B $1!RB(B, -$1!^L'=v(B : -$1!Os(B1$1!JH(B. -$1!a)!H$(B : -$1!04!7o(B $1!3(!Kz!bo(B -$1!04!7o(B $1!7o!FM!bo(B -$1!a)!H$i!&!BX!4Hi!&KN7!ON(B / -$1!a)!H$(B : -$1!5\(B $1!1e!_B(B. -$1!a,(B $1!2A!23(B. -$1!5d(B $1!9%!EN(B. -$1!0}(B $1!?n(B $1!BO!N_!]t(B / -$1!WN!JH(B. -Singapore : -$1!K3(B $1#6j!F'(B. -$1!:|(B $1!;F!C^(B. -$1!04!Bs(B $1'^i!Pn(B $1!8}'QN(B $1!\*!X+(B : -$1!5.:(L(B $1!>#!9'(B $13BD!A,(B $1'\W'CI(B $1'Pp!>'(B $1'Y$!BX!_A(B -$1!a)!H$(B $1!WN!JH(B. -$1!a)!H$(B : -$1!5.:(L(B $1!>#!9'(B, -$1!5.:(L(B $1!>#!9'(B $13BD!A,(B $1'\W'CI(B $1'Pp!>'(B $1'Y$!BX!_A(B $1'Q['[M(B $1!9f'6>'CZ(B. -$1KGa!:|(B $1!T+!IC(B $1![i!Aq(B $1!5=!B\(B / -$1!WN!JH!+4(B -$1!T+!4I!%(B $1!GW!J((B. -$1!04!U<(B $1!CZ!`y(B (Kobe-shi, Japan) -$1!K3(B $1!bt!]L(B. -$1!UV!UH(B $1!Iz'Ms(B / -1$1!JH(B. -$1!T+!4I!4!3[(B $1!04!7o(B / -$1!WN!JH(B. -$1(;}!4I!oS,(B. -$1oWIoS$(B $1oVi(B $1o]8oQ\(B $1oZpoM*(B $1oPu(B $1oUV(B : -$1oYHo[o(B. -$1oS!oV>oT#(B : -$1oV\(B $1oMGoWl(B, -(3Hdabjg,(B (3YHO(B (3Gddg(B (3Hf(B (3MSjf(B (3Hf(B (3YHO(B (3Gddg(B. -(3bhJ(B (3GdCdHGH(B (3ef(B (3eLGfj(B (3Lfj(B (3GdCdHGH(B / -(3JQje,(B (3MVQehJ(B : -(3Rcj,(B (3QeVGf(B (3NejS(B. -(3eaghe(B (3GdSff(B (3GdQHGfjI(B : -(3GdWHYI(B 1. -(3GdbGgQI(B : -(3gPG(B (3gh(B (3GdESdGe(B (3;(B -(3YeGQI,(B (3eMeO(B. -(3bQGAI(B (3GdfU(B (3GdOjfj(B : -(3GdWHYI(B 1. -(3GdbGgQI(B : -(3gPG(B (3gh(B (3GdESdGe(B (3;(B -(3fOhI(B (3GdSjQI(B (3GdfHhjI(B : -(3GdWHYI(B 1. -[Omdurman] : -(3efThQGJ(B (3GdeQcR(B (3;(B -(3EeGe,(B (3MeGOI(B. -(3eHGQc(B (3hGdENhGf(B / -(3GdWHYI(B (3GdYQHjI(B 1. -(3GdegfOSjf(B [Giza] : -$1!Be!YF(B $1!5.!BX(B $1![`!`S!Q|(B / -$1!WN!JH(B. -$1!T+!4I!'7q(B $1!5w(B $1'C-'^U(B -$1!Os(B1$1!JH(B. -$1!4I!0a!!X%(B = -$1!Os(B1$1!JH(B. -$1!4I!0a!!X%i!U'Q[!Q|(B $1!9f'6>'CZ(B. -$1!04K7o(B $1!Os!0Q(B $1'CI!5=(B $1'E_!DB'`y(B. -$1'`y!V+(B $1!FMK7o(B $1(;}'IC(B $1'E_!DB(B $1'4Q'Q[(B / -$1!FMK7o(B $1(;}'IC(B $1'E_!DB(B $1'4Q'Q[(B -$1(;}'IC(B $1'E_!DB(B $1'4Q'Q[(B -$1!Os(B1$1!JH(B. -$1!4I!0a!w(B, - $1!8{!Cr(B $1!9%(B,1966- -$1!?b!L$(B $1!c+!0!(B. -$1KF*!5=':`(B $1i$N(B $1i%]i%8i%7i%gi%Ji%ji%Fi%#(B : -$1!D&!0a(B : -$1!;e!'(B $1i$H(B $1i%+i%ji%-i%ei%ii%`(B $1!E9!\)(B / -$1!WN!JH(B. -$1!D&!0a(B : -$1!v3(B $1-1w!_B(B, -$1!35!Be(B $1!52!RW(B $1'[`!3,(B / -$1!52!RW(B $1'[`!3,(B -$1!D&!0a(B : -$1!0;!1a!L$(B $1!GZ(B, -$1i$3i$Hi$P!+5i$3i$Hi$P!+5i$3i$Hi$P(B / -$1!WN!JH(B. -$1!D&!0a(B : -$1!;E!D$(B $1!0!!T{(B, -$1i$@i$s!WZ(B : -$1!0!!T{(B $1!T&!Oy(B $1!59!_A(B -$1!D&!0a(B : -$1!GzK\[(B $1!4a!\g(B. -$1!;n!Ci(B $1!6<'Xm(B, -$1!]Z!!N_(B $1i$N(B $1!BX':`!+5!bu!T=i$9i$k(B $1!;*!Xf(B -$1!D&!0a(B : -$1!;E!;y(B $1!1W!9'(B, -$1KEa9Y?(B $1K7o'2>(B $1-?n!L5i$Ji$-(B $1!Bs!Ci(B / -$1!D&!0a(B : -$1KYJ9Z/(B $1!Be!Rq!Na(B. -$1!5@!L$(B $1!6a!]:(B, -$1!5@!L$(B $1!6a!]:(B : -$1KYK!Yf(B $1i$N(B $1!2-!KH(B -$1!D&!0a(B : -$1!Ul!;1(B $1!]:E=S(B, -$1!Cs(B $1!J((B, -$1!_'(B $1!WD!N#(B $1i$N(B $1KV1!WF(B $13BD!S,!Y$(B : -$1!WN!JH(B. -$1!D&!0a(B : -$1!_'(B $1!WD!N#(B, -$1!;;!.!>m(B $1i$G(B $1KYKi$oi$k(B : -$1!WN!JH(B. -$1!D&!0a(B : -$1!FF!L$!0S(B $1'3k!0f(B, -$192F!Xi(B $1i$H(B $1!5=K;1(B $1i$N(B $1i$Oi$6i$^(B : -$1!D&!0a(B : -$1!Y"(B $1i$G(B $1i$b(B $1KYJi$ai$k(B $1!Bs!Ci(B $1!5.!0s!5=(B $1!!BX!`y(B. -$1!1a!^q(B $1!F#!(B $1!Na'CZ(B $1i$H(B $1!9%':`(B $1i$N(B $1!@d-?n(B : -$1!WN!JH(B. -$1!D&!0a(B : -$1!Ci!8}(B $1!4d!0=(B, -$1-?nK7o(B $1!Qq3YX!Cd(B $1i$N(B $1!Yo!<^(B $1i$H(B $1!N(!a\'Wl(B / -$1!D&!0a(B : -$1!Z"!B\(B $1!_A!?b(B $1-?n-J;(B $1i$H(B $1!_6!:~!R_(B / -$1!D&!0a(B : -$1!4W!0T!.!>m(B $1i$H(B $1!WD!44(B $1i$r(B $1!R]i$(i$k(B : -$1!0a!\n!>!0!(B. -$13=u!<4(B $1!<]!!0=(B, -$1'b~!V3(B $1!2'(B, -$1!L$!^U(B $1!G"!:M(B, -$1!+%![k!0s(B $1'2>!Bo!+&i$H(B $1i%\i%Gi%#i!&i%]i%ji%Fi%#i%/i%9(B / -$1!0a!\n!(B. -$1!3K'1L"]M(B $1!9(!K3!Nr(B $1!bS!:M!Nk![2i!&!G(!F\![2(B / -$1!bS!:M!Nk![2i!&!G(!F\![2(B -$1!5E!5.!;X!'CZ(B. -$1!04K7o(B $1K;C!8{(B $1!Y~!C"(B $1!Q1!X8(B / -2005$1!!_A(B. -$1!5E!5.!;X!`!9&(B. -$1!FtKQv(B $1!G6-I:(B $1'0L"Mc(B $1i$r(B $1!1N(B $1i$H(B $1i$7i$?(B $1!G7!;l(B $1'HD!7y(B $1i$N(B $1KQm'^]!M"(B $1!Kg!8W(B $1!XN32](B $1i$N(B $1!X[i$_(B / -$1KEV!`(B $1i$H(B $1'CZ!G>(B $1!D-!(B : -$1'CZ!G>!Tg!D-!!V0(B (Japan) -$1!Nv!;y(B $1KQd!Oe(B $1!4d!JU!`y(B. -$1!Tg!D-!87(B $1!9(!:f!^[(B (Museum) -(3TjN(B (3GdCQV,(B (3eMeO(B. -(3aTI(B (3Ndb(B / -(3GHh(B (3XHj(B : -(3GHf(B (3NdOhf(B. -(3ebOeg(B (3GHf(B (3NdOhf(B / -(31G(B) 2. -(3JgQGf(B : -(3GfJTGQGJ(B (3HfjGO(B (3JQLeg(B (3h(B (3fTQ(B (3cJGH(B (3;(B -(3fGHGOi,(B (3eMeO(B )(3Qhjf(B. -(3TgQGfi,(B (3YfGjJ(B (3Gddg(B. -(3VQH(B (3GdeKdgGi(B (3OQi(B (3GaZGfSJGf(B : -(3cdQi,(B (3GdHQJG(B [Calgary, Alberta, Canada]: -(3chTGf,(B (3eMeO(B (3Wg(B. -(3jYbhHj,(B (3CMeO(B (3Hf(B (3CHj(B (3jYbhH(B. -(3JGQjN(B (3jYbhHi(B / -(3JgQGf(B : -(3GfJTGQGJ(B (3HfGg(B (3JQLeg(B (3h(B (3fTQ(B (3cJGH(B (3;(B -(3BjJi,(B (3GHQGgje(B. -(3ZjQJ(B (3cQeGfTGgi,(B (3YHO(B (3GdcQje(B. -(3cdjGJ(B (3BKGQ(B (3SjO(B (3YHO(B (3GdcQje(B (3ZjQJ(B (3cQeGfTGgi(B / -[(3JgQGf(B : -(3ZjQJ,(B (3eMeO(B (3SYjO(B. diff --git a/tags/rel-1.4/test/test_utf8.txt b/tags/rel-1.4/test/test_utf8.txt deleted file mode 100644 index 83f58f2..0000000 --- a/tags/rel-1.4/test/test_utf8.txt +++ /dev/null @@ -1,1514 +0,0 @@ -عودة، محمد. -كيف سقطت الملكية في مصر؟ : -الطبعة 1. -القاهرة : -肖 显靜. -第一 推动 / -第1版. -北京市 : -与 2049年 的 中国 对话 -吴 国林, -芋生 裕信, -西脇 順三郎 の 研究 : -東京 : -新典社 選書 ; -西脇 順三郎, - 交通 运输 管理志 / -第1版. -天津市 : -天津市 西青区 系列 分志 ; -天津市 地方志 丛书 -Transportation -西青区 (Tianjing, China). -鎌倉 近世 史料 / -[鎌倉市] : -鎌倉市 (Japan) -澤 壽郎, -片桐 一男, -鎌倉市 中央 図書舘. -نعيم، عبدالعزيز العلى. -نظام الضرائب فى الإسلام ومدى تطبيقه فى المملكة العربية السعودية : -[Cairo : -回想 の 西脇 順三郎 / -東京 : -西脇 順三郎, -安東 伸介, -西脇 順三郎, -イギリス 文學史 : -東京 : -英語 英文學 講座 -١ا) 4. -تهران : -صفا، ذبيح الله. -金田 弘, -旅人 つひに かへらず : -初版. -東京 : -西脇 順三郎, -世界 の 詩 : -東京 : -串田 孫一, -西脇 順三郎, -渡辺 一夫, -西脇 順三郎, -芭蕉・シェイクスピア・エリオット / -第 1版. -東京 : -松尾 芭蕉, -鍵谷 幸信, -松尾 芭蕉, -佐久間 隆史, -西脇 順三郎 論 : -東京 : -現代 詩人論 叢書 ; -西脇 順三郎, -شبيلي، عبد الرحمن. -الكلمة العربية : -[Saudi Arabia] : -كتاب الشرق الاوسط -مكانة الإباضية في الحضارة الإسلامية / -الطبعة 1. -[القاهرة] : -西脇 順三郎, -定本 西脇 順三郎 全集. -初版. -東京 : -西脇 順三郎 全集. -工藤 美代子, -寂しい 声 : -東京 : -西脇 順三郎, -西脇 順三郎, -幻影 の 人 西脇 順三郎 を 語る / -西脇 順三郎 を 語る -第 1版. -東京 : -西脇 順三郎, -西脇 順三郎 を 偲ぶ 会. -双鸭山 林业局 志 / -第1版. -[双鸭山? : -黑龙江省 (China). -伊 蝉. -非常 误会/ -Singapore : -狮城 作家 群英 丛书 ; -فرزاد، عبد الحسين. -المنهج في تاريخ الأدب العربي : -Tehran : -夏 枯早. -涼風 有信 / -Kuala Lumpur : -丹袖 出版 系列 ; -子木, -杭州 日记 / -[Singapore] : -子木, -جائزة سلطان العويس الثقافية : -الشارقة : -منشورات اتحاد كتاب وادباء الامارات -مؤسسة سلطان بن علي العويس الثقافية. -اتحاد كتاب وأدباء الإمارات. -旱区 水 土 作物 关系 及 其 最优 调控 原理 : -第1版. -北京 : -周 保中 将军 和 他 的 抗联 战友 / -[长春] : -周 保中, -中共 吉林 省委. -南宁市 稅务誌 / -稅务誌 -第1版. -[南宁市 : -南宁 (China) -广西 壮族 自治区 南宁市 国家 稅务局. -广西 壮族 自治区 南宁市 地方 稅务局. -中国 副食品 市场 需求 与 "菜篮子 工程" 布局 / -第1版. -北京 : -رياض، محمد. -رحله في زمان النوبة : -[القاهرة] : -عبد الرسول، كوثر. -جياني، الحسين بن محمد. -تسمية شيوخ أبي داود السجستاني / -الطبعة 1. -بيروت : -أبو داود سليمان بن الأشعث السجستاني. -فجي، جاسم بن محمد بن حمود. -ابن الدباغ، يوسف بن عبد العزيز. -جابري، رياض. -سعد الله الجابري وحوار مع التاريخ : -الطبعة 1. -حمص : -جابري، سعد الله. -إبراهيم، أيمن. -الإسلام والسلطان والملك : -الطبعة 1. -دمشق : -سليطين، وفيق. -الزمن الأبدي : -الطبعة 1. -اللاذقية : -وقائع حلقة النقاش الأولى حول تطوير أساليب تعليم اللغة العربية لغير الناطقين بها : -الطبعة العربية 1. -عمان : -مصطلحات ميكانيك السيارات. -الطبعة 1. -[Amman] : -خصاونة، عوني محمد. -التطبيقات الفلكية في الشريعة الإسلامية / -تطبيقات علم الفلك في الشريعة الإسلامية -بدر، عبد الرحيم. -موسوعة أسماء النجوم عند العرب في الفلك القديم والحديث / -عمان : -تكريتي، شاكر علي. -مذكراتي وذكرياتي-- هذه / -الطبعة 1. -بغداد : -تكريتي، شاكر علي. -يحيى، حسب الله. -فنارات في القصة والرواية / -الطبعة 1. -بغداد : -عاني، يوسف. -المسرح، الوجود، الحلم / -الطبعة 1. -بغداد : -راوي، نوري. -متحف الحقيقة، متحف الخيال : -الطبعة 1. -بغداد : -حديثي، بهجت عبد الغفور. -الروح الايماني في الشعر العربي : -الطبعة 1. -بغداد : -نفحات الهند واليمن بأسانيد الشيخ أبي الحسن : -الطبعة 1. -الرياض : -قاضي، النعمان. -شعر الفتوح الإسلامية في صدر الإسلام / -الطبعة 1. -جدة : -من أدب الجهاد -حسن، حسن مصطفى. -الحيوان في الشعر العربي / -الطبعة 1. -الرياض : -زهراني، علي بن صالح السلوك. -بلاد غامد وزهران / -الطبعة 3.، وقد أضيفت اليها فصول جديدة وزيادات مهمة. -جدة : -معجم الجغرافي للبلاد العربية السعودية -عبدلي، عبد الله منسي. -المسجد الحرام في قلب الملك عبد العزيز / -مكة : -رومي، عدنان سالم. -علماء الكويت وأعلامها خلال ثلاثة قرون / -الطبعة 1. -الكويت : -سلسلة تاريخ ما أهمله التاريخ ؛ -أغبري، أكرم عبد الملك. -أهمية البحر الأحمر في علاقة الجمهورية اليمنية بدول مجلس التعاون الخليجي / -الطبعة 1. -صنعاء : -كتاب الثوابت ؛ -بلو، محمد. -إنفاق الميسور في تاريخ بلاد التكرور / -الرباط : -منشورات معهد الدراسات الإفريقية. سلسلة نصوص ووثائق ؛ -شاذلي، بهيجة. -ذاكر، عبد النبي. -الواقعي والمتخيل في الرحلة الأوروبية إلي المغرب / -أكادير : -ذنون، عبد الحكيم. -تاريخ الشام القديم / -الطبعة 1. -دمشق : -العلاقات المصرية-اليابانية / -الجيزة : -مدني، إسماعيل محمد. -بيئة البحرين البحرية / -البحرين : -سلسلة كتب حول الحياة الفطرية ؛ -실크 로드 와 韓國 文化 의 探究 / -대전 광역시 : -人文 硏究 學術 叢書 ; -史 在東, -红盾 耕耘录 : -第1版. -[厦门] : -龙海市 (China) -بدر، عزة. -أم الدنيا : -كتاب الجمهورية -خلايلي، خليل. -تاريخ جسكالا : -الطبعة 1. -دمشق ؛ -راوى، صلاح. -فلسفة الوعى الشعبى : -الطبعة 1. -القاهرة : -刘 宏. -百年 梦寻 : -20世纪 中国 经济 思潮 与 社会 变革 -第1版. -北京市 : -世纪 回眸. -沈 山. -石 淑华, -趋势 与 策略 / -Kuala Lumpur : -林 水〓. -陈 友信. -西脇 順三郎, -西脇 順三郎・パイオニア の 仕事 / -パイオニア の 仕事 -第 1版. -東京 : -コレクション・日本 シュ-ルレアリスム ; -和田 桂子, -申 國美. -1900-2001 國家 圖書館 藏 敦煌 遺書 研究 論著 目錄 索引 / -敦煌 遺書 研究 論著 目錄 索引 -國家 圖書館 藏 敦煌 遺書 研究 論著 目錄 索引 -第1版. -北京市 : -敦煌縣 (China) -中國 國家 圖書館 -郭 永秀, -余韵 : -郭 永秀 音乐 评论集 -初版. -[Singapore] : -1950년대 후반기 의 한국 사회 와 이 승만 정부 의 붕괴 / -서울 특별시 : -한국 현대사 의 재 인식 ; -현대사 연구소 기획 연구 -한 흥수. -한국 정신 문화 연구원. -敦煌 懸泉 月令 詔條 / -月令 詔條 -第1版. -北京 : -"本書 收錄 敦煌 懸泉置 遺址 出土 的 《使者 和 中所 督察 詔書 四時 月令 五十條》 (簡稱 「月令 詔條」)". -懸泉置 Sites (China) -中國 文物 硏究所. -甘肅省 文物 考古 硏究所. -刘 星, -文化界 人士 / -Singapore : -新加坡 文艺 协会 丛书 ; -金 梅子, -一双 舊草鞋 / -[s.l.] : -印华 作协 文丛. -前橋藩 松平家 記錄 / -[Tokyo] : -前橋 市立 図書館. -長崎県 水 調查書 : -[長崎市] : -長崎県 (Japan). -許 保由, -不枉此生 : -許 保由 回憶錄 -Sibu, Sarawak : -許 保由, -吴 木炎. -前路 亮红灯 / -第1版. -K. L., Malaysia : -大将 观点 ; -薛 嘉元, -猫城 猫语 / -第1版. -K.L. [i.e. Kuala Lumpur], Malaysia : -大将 fuse ; -晨露, -鱼說 / -初版. -Miri, Sarawak : -美里 笔会 丛书 ; -梁 菊庵, -飄逝 的 年華 : -菊庵 文集 -[Jakarta : -青春 是 一首歌 : -驻校 作家 写作 计划 学员 作品集 -初版. -[Singapore] : -方 桂香. - 尤 今. -听 青春 在 哭泣 : -尤 今 短篇 小说 -初版. -Singapore : -心书 ; -白 荷. -白 荷 散文选 / -初版. -Singapore : -新加坡 新华 作家 丛书 -新加坡 新华 作家 作品集 ; -杨 怡, -从 新华 文坛 论 及 印华 文学 / -初版. -Singapore : -新加坡 新华 作家 作品集 ; -周 洛崙. -梦廻 人生 / -初版. -Singapore : -周 洛崙 作品 ; -陈 久霖, -神州 大地 商机 无限 : -中国 商业 环境 和 文化 的变迁 -初版. -[Singapore] : -舒城县 文物志 / -[舒城县. -舒城县 (China). -舒城县 (China). -舒城县 (China). -中國 古代 建築 歷史 圖說 / -第1版. -北京市 : -侯 幼彬. -李 婉貞. -孔 繁志. -敖鲁古雅 鄂温克人 的 文化 变迁 = -第1版. -天津 : -中央 民族 大学 中国 少数 民族 研究 中心 丛书 -鄂温克族 自治旗 (China) -环 洞庭湖 经济圈 建设 硏究 / -第1版. -长沙市 : -湖南省 (China) -朱 翔. -谢 留文. -客家 方言 语音 硏究 / -第1版. -北京 : -探索 之 果 : -云南 财贸 学院 建校 50周年 论文选 -第1版. -北京 : -云南 财贸 学院 学术 委员会. -宿務 華人 的 經濟--社會史 (附 從 糖業 看 菲律濱 華人) / -糖業 看 菲律濱 華人 -初版. -菲律濱 : -Go, Bon Juan. -珠江 三角洲 公共 管理 模式 硏究 / -第1版. -北京 : -教育部 人文 社会 科学 重点 硏究 基地 中山大学 行政 管理 硏究 中心 学术 文库 -"地方 政府 与 区域 公共 管理 研究" 系列 -陈 瑞莲. -蔡 立辉. -黎 军, -甘 靑 宁 民族 地区 现代 远程 敎育 / -第1版. -北京市 : -مجدلاني، أحمد. -دراسة تحليلية حول أثر النظام الانتخابي على تركيبة المجلس التشريعي القادم / -رام الله : -سلسلة تقارير دورية -شاكري، حسين. -ذكرياتي / -الطبعة 1. -قم : -ميردامادي، عبد المجيد. -زيارة الرسول المصطفى وآله : -الطبعة 2. -تهران : -موسوعة الرسول المصطفى ؛ -حلاق، حسان. -مناهج تحقيق التراث والمخطوطات العربية / -الطبعة 1. -بيروت : -حسين، قصي. -في الحضارة العربية : -الطبعة 1. -طرابلس، لبنان : -عباس، محمد. -ثوار ... عظماء / -بوزريعة، الجزائر : -تطاوي، عبد الله. -اللغة والمتغير الثقافي : -الطبعة 1. -القاهرة : -غوادره، فيصل حسين. -التمرد في شعر العصر العباسي الأول / -الطبعة 1. -عمان : -黑 岩, -各舉 門神 的 風采 / -Sibu, Sarawak : -漳泉 之聲 叢書 ; -陆 力军. -市场 义乌 : -第1版. -杭州 : -义乌市 (China) -义乌市 (China) -白 小虎. -王 祖強. -靖 国平. -教育 的 智慧 性格 : -当代 知识 教育 的 变革 -第1版. -武汉 : -公共 决策 研究 : -第1版. -长沙 : -公共 管理 论丛 -颜 佳华, -迈向 新世纪 : -广州市城市 规划 信息 系统 的 理论 与 实践 -第1版. -广州 : -广州 (China) -戴 逢 -姜 崇洲. -丁 建伟. -韩 振远. -山西 古祠堂 : -矗立 在 人 神 之 间 -第1版. -沈阳市 : -中国 文化 遗珍 丛书. 山西 -潘 知常, -王 国维 : -第1版. -北京 : -跨文化 沟通 个案 研究 丛书 -文津 書系 -王 国维, -李 加荣. -军用 生物 技术 / -第1版. -北京市 : -庄 力霞. -邱 德修. -商周 用鼎 制度 之 理論 基礎 / -限定版. -臺北市 : -商周 金文 硏究 論文; -蒲正信, -药师经注释 / -第1版. -成都市 : -佛典丛书. -زاهي، فريد. -العين والمرآة : -[Rabat] : -دواليبي، محمد معروف. -مذكرات الدكتور معروف الدواليبي / - الطبعة 1. -الرياض : -أبو الخير، محمود عبد الله. -شعر رثاء النفس : -عمان : -黎平 剿匪 斗争 / -第1版. -[黎平 : -中共 黎平 县委. -鬼谷子 学术 研讨会 -第一届 鬼谷子 学术 研讨会 论文集 / -鬼谷子 学术 研讨会 论文集 -第1届 鬼谷子 学术 研讨会 论文集 -北京 第1版. -北京 : -鬼谷子, -鬼谷子 学术 研究会. -فقير، بدر بن عادل. -تغير الأنماط السكنية في مدينة الدرعية : -الرياض : -إصدارات دارة الملك عبد العزيز ؛ -سمحي، علي حمود. -داخل آزال خارج صنعاء : -صنعاء : -شمري، محمد علي. -شعراء الخليج : -الطبعة 1. -عمان : -الشعر النبطي : -الطبعة 1. -عمان : -حنداين، محمد. -المخزن وسوس، 1672-1822 : -الطبعة 1. -الرباط : -عبيدات، داود عمر سلامة. -الموحدون في الأندلس : -إربد، الأردن : -مدني، إسماعيل محمد. -رحلتي مع البيئة / -الطبعة 1. -[?Manama] : -حميد الدين، عبد الله بن محمد. -الهوية في بنية النظام الدولي / -الطبعة 1. -عمان : -سيد، محمد عبد الرحمن. -تجرية دولة قطر في مجال ذوي الاحتياجات الخاصة / -[الدوحة] : -فاضل لنكراني، محمد. -كتاب الطهارة : -الطبعة 1. -[Tehran] : -نجمآبادي، أبو الفضل. -حاشية المكاسب : -الطبعة 1. -قم : -مجموعة آثار آية الله الميرزا أبو الفضل النجمآبادي ؛ -انصاري، مرتضى بن محمد أمين، -مؤسسة آية الله العظمى البروجردي. -东北亚 区域 经济 社会 合作 与 发展 国际 学术 研讨会 -东北亚 自由 贸易区 : -2004年 东北亚 区域 经济 社会 合作 与 发展 国际 学术 研讨会 论文选 -第1版. -沈阳 : -李 向平. -李 勇辉, -城镇 居民 住宅 消费 保障 制度 / -第1版. -北京市 : -陈 相灵. -《武经 七书》 与 当代 战争 战略 / -第1版. -北京 : -武经 七书. -社会 保障 社会 福祉 大事典 = -初版. -東京 : -労働 旬報社. -한국 팝 의 고고학 1970 : -제1판. -경기도 파주시 : -신 현준. -武 旭峰. -深入 黃山 的 背后 : -找寻 徽州 -第2版. -广州 : -发现 之旅 = -徽州 地区(China) -徽州 地区(China) -南 丽军. -比较 政治 制度 / -第1版. -哈尔滨 : -向 俊杰. -孔 兆政. -贾 少华. -民办 大学 的 战略 / -第1版. -杭州 : -浙江省 教育 科学 规划 2005 年 重点 研究 课题 -刘 晓琴. -中国 近代 留英 教育史 / -第1版. -天津市 : -近代 中国 研究 丛书 -Rev. ed. of author's doctoral thesis under title: 中国 近代 留英 教育 研究. -刘 晓琴. -党 崇民, -论 邓小平 战役 指导 特色 = -第1版. -北京 : -中国 军事学 博士 文库 -邓 小平, -建立 农村 劳动力 平等 就业 制度 / -第1版. -北京市 : -陈 晓华. -张 红宇. -胡 小林. -毛 泽东 的 学习 思想 与 实践 / -第1版. -济南 : -毛 泽东, -于 云才. -赵 志忠. -民族 文学 论稿 / -第1版. -沈阳市 : -至尊 宗喀巴 大师传 / -第3版, 修订本. -西宁 : -郭 和卿. -威慑 人类 / -第1版. -北京 : -沈 晓阳. -傅 国涌, -主角 与 配角 : -近代 中国 大转型 的 台前 幕后 -第1版. -武汉市 : -白 友涛. -盘根草 : -城市 现代化 背景下 的 回族 社区 -第1版. -银川市 : -邬 大光. -危机 与 转机 : -第1版. -[厦门] : -厦门 大学 WTO 硏究 中心 系列 丛书 ; -林 莉. -刘 学杰. -新疆 旧事 = -第1版. -乌魯木齐市 : -居上 图书 -新疆 维吾尔自治区 (China) -吴 静安, -春秋 左氏傳 舊注 疏證 續 / -第1版. -長春 : -劉 文淇, -Confucius. -左丘 明. -劉 文淇, -董 洪运, -聚焦 地平线下 : -漫谈 新时期 人民 防空 -北京 第1版. -北京市 : -皇甫 宜川. -中国 战争 电影史 / -第1版. -北京 : -百年 中国 电影 研究 书系 -高等 教育 发展 与 财政 政策 国际 研讨会 -高等 教育 发展 的 财政 政策 : -OECD 与 中国 -第1版. -北京 : -"根据 中国 教育部 和 经济 合作 与 发展 组织(OECD) 的 协商, 2004年月11--14日, 双方 在 北京 共同 召开了 '高等 教育 发展 与 财政 政策 国际 研讨会'" -- Foreword. -范 文曜. -闫 国华. -中国 当代 文学史 / -第1版. -海口 : -21世纪 高等 敎育 系列 敎材. 汉语言 文学类 -田 中阳. -赵 树勤. -王 中江. -进化 主义 在 中国 = -第1版. -北京 : -20世纪 西方 哲学 东渐史 -董 贵昕. -金融 泡沫 的 形成, 运行 与 控制 研究 / -第1版. -上海市 : -黄皮书 系列 -周 到. -周 到 藝術 考古 文集 / -第1版. -郑州市 : -河南 博物院 学术 文库 -河南 博物院. -唐 忠毛. -佛教 本觉 思想 论争 的 现代性 考察 / -第1版. -上海 : -中国 的 现代性 与 人文 学术 丛书 -地理 信息 与 规划 支持 系统 / -第1版. -北京 : -李 楯, -面对 艾滋病, 2004 = -第1版. -北京市 : -李 丹. -中国 上市 公司 发展 规模 研究 = -第1版. -武汉 : -管理 新干线 -卢 洪涛, -中国 现代 文学 思潮 史论 / -第1版. -北京 : -"陕西 师范 大学 优秀 著作 出版 基金 资助 出版"--P. facing t.p. -宋代 傳記 資料 叢刊 / -第1版. -北京市 : -宋元明清 傳記 資料 叢刊 系列 - Vol. 49 called "索引" with added title page: 四十七種 宋代 傳記 綜合 引得 / 洪 業 ... [et al.] 編纂. -洪 業. -北京 圖書館 出版社. -四十七種 宋代 傳記 綜合 引得. -作战 指挥学 / -北京 第1版. -北京 : -丁 邦宇. -装备 保障性 工程 与 管理 = -第1版. -北京市 : -徐 宗昌, -黄 益嘉. -杨 宏伟. -刘 佐泉. -太平 天国 与 客家 / -第1版. -开封市 : -客家 文化 研究 丛书 -中国 财富 新贵 / -第1版. -北京市 : -范 爱民. -高句丽 厉史 与 文化 学术 研讨会 -高句丽史 新 研究 / -高句丽 厉史 与 文化 学术 研讨会 论文集 -第1版. -延吉市 : -高句丽 (Kingdom) -李 国强. -李 宗勋. -中国 小额 信贷 发展 研究 = -第1版. -北京 : -曹 子娟. -陶 江. -陶姓 史话 = -第1版. -南昌市 : -中华 姓氏 文化 丛书 系列. 中华 姓氏 史话 丛书 -陈 光焱. -中国 财政 思想 与 制度 改革 / -第1版. -北京 : -中南 财经 大学 财政学 博士点 导师 文集 -郑 永振. -渤海 墓葬 研究 / -第1版. -长春市 : -严 长录. -陳 寅恪, -金明館 叢稿 初編 / -北京 第1版. -北京 : -陳 寅恪 集 -东北 老工业 基地 振兴 与 管理 现代化 / -第1版. -北京 : -中国 企业 管理 研究会. -中国 社会 科学院. -寒 布. -故宮 = -第1版. -北京 : -北京 的 世界 文化 遗产 = -故宮 博务院 (China) -北京 (China) -北京 (China) -閆 修篆. -易經 的 圖 與 卦 / -臺北市 : -易經. -浪尖 逐梦 : -余 柱业 口述 历史 档案 -初版. -Petaling Jaya, Selangor, Malaysia : -风云 丛书 ; -陈 剑, -郴州市 2000年 人口 普查 资料 / -郴州市 人口 普查 资料 -2000年 人口 普查 资料 -[郴州市 : -向 曽榆. -郴州市 第五次 人口 普查 领导 小组. -רוזנמן, מרדכי. -שמחת מרדכי. -ספר שמחת מרדכי / -ניו יורק : -חלק ב׳ : בראשית, שמות, ענינים שונים ־־ -徐 宗幹, -斯未 信齋 文編 -斯未 信齋 文編 ; -斯未 信齋 文編 ; 斯未 信齋 雜錄 -初版. -南投市 : -臺灣 歷史 文獻 叢刊 -徐 宗幹, -臺戰 實紀. -臺戰 演義 / -初版. -南投市 : -臺灣 歷史 文獻 叢刊 -劉永福, -臺灣 銀行. -冯 文炳. -废名 作品 精选 / -第1版. -武汉市 : -现代 文学 名家 作品 精选 -沙 铁华. -月 华. -大園 市藏. -臺灣 事蹟 綜覽 / -台北市 : -幕府山 胜迹 寻踪 / -南京市 : -下关文史 ; -政协 南京市下关区文史 资料 委员会 . -南京市 幕府山 地区 保护 开发领导 小组 办公室. -赵 淑敏, -京梦 / -第1版. -广州市 : -吴 兢 -贞观 政要 / -第1版. -合肥市 : -中华 古典 智慧 珍品 -唐 太宗, -范 勇胜. -העיירה שלי : -תל־אביב : -גרנצרסקי־קדרי, בינה. -科学 发展观 与 新一轮 经济 增长 / -第1版. -上海 : -厉 无畏. - 王 振. -熊谷 弘, -英米 陪審 制度 の 運用 と 其の 批判 / -[Tokyo] : -司法 研究 報告書 ; -이 준우, -국, 공유지 신탁 법제 개선 방안 연구 / -서울 특별시 : -연구 보고 ; -김 두진, -공정 거래법 상 경제력 집중 규제 연구 / -서울 특별시 : -연구 보고 ; -최 성근. -OECD 기업 지배 구조 원칙 의 국내법 수용 에 관한 연구 / -서울 특별시 : -연구 보고 ; -김 정순. -행정법 상 재판 외 분쟁 해결 법제 연구 / -서울 특별시 : -연구 보고 ; -김 수진, -공무원 권익 향상 을 위한 행정 구제 법제 연구 / -서울 특별시 : -연구 보고 ; -傅 佩榮, -傅 佩榮 解讀 孟子 : -初版. -台北縣 新店市 : -世界 公民 叢書 ; -Mencius. -Mencius. -平 可夫. -中國 軍事 與 國際 戰略 / -第1版. -香港 : -黑白講 李 敖 : -第1版. -[香港] : -富達 文庫 ; -李 敖, -齊 以正. -吳 小攀. -孟 庆顺. -"一国 两制" 与 香港 回归后 的政治 发展 / -香港 回归后 的政治 发展 -香港 初版. -香港 : -鄭 義, -中共 十大 敗仗 : -中共官方戰史上 被刻意 掩埋 的 篇章 -第1版. -香港 : -中國 共產黨 -中國 國民黨 -吳 潤生. -林 彪 與 文化 大革命 / -第2版. -Carle Place, N.Y. : -《眞相》系列 ; -林 彪, -周 承人. -早期 香港 電影史 (1897-1945) / -香港 : -李 以荘. -魏 成思. -兩岸 密使 50 年 / -香港 : -記憶 歷史 叢書 -程 希, -当代 中囯 留学生 硏究 / -初版. -香港 : -北京 大学 华侨 华人 硏究 中心 丛书 ; -"北京 大学 龚 诗贮 基金 赞助 出版." -鄭 義, -長征 : -第1版. -香港 : -中國 共產黨 -中國 國民黨 -香港・文化・研究 / -香港 : -吳 俊雄. -馬 傑偉. -呂 大樂. -伊 戰 啓示錄 / -初版. -Singapore : -王 賡武. -宮 少朋. -中日 关系 多维 透視 : -古厩 忠夫 教授 还历 纪念 论文集 -香港 初版. -香港 : -古厩 忠夫, -古厩 忠夫 教授 还历 纪念 论文集 编辑 委员会. -清宮 臺灣 巡撫 史料 / -初版. -臺北市 : -國立 故宮 博物院 院藏 清代 臺灣 文獻 叢編 -洪 安全, -馮 明珠. -落地 生根. -落地 生根 : -神戶 華僑 與 神阪 中華 會館 百年史 -香港 初版. -香港 : -北京 大學 華僑 華人 研究 中心 叢書 ; -Translation of: 落地 生根 : 神戶 華僑 と 神阪 中華 会館 の 百年. -中華 会館 (Kobe-shi, Japan) -忽 海燕. -中華 會館 (Kobe-shi, Japan) -王 鼎鈞. -葡萄 熟了 / -1版. -臺北市 : -大地 叢書 ; -戴 錦華, -性別 中國 / -初版. -台北市 : -麥田 人文 -附 參考 文獻. -盧 增. -柬埔寨 企业 纳稅 指南, 2004 / -中文 版. -[Phnom Penh?] : -הלר חדד, הילה. -התכלית של ועדות מייעצות ציבוריות לעניין מסוים־ נוסח אד הוקת בישראל : תוך התמקדות בשלוש הועדות הבאות: ועדת וילנאי (1999), ועדת טל (2000), ועדת בן בסט (2000) / -[Israel : -פרג׳, רג׳א סעיד. -הקשרים בין הדרוזים והיהודים עד הקמת מדינת ישראל (1948) / -ינוח : -חלפין, יגאל. -הטיהורים הסטליניסטיים : -תל אביב : -פטיש -קרליץ, שמריהו יוסף נסים. -חוט שני (הלכות רבית) -ספר חוט שני : -בני ברק : -הוכמן, חיים אריה, -안 도섭. -조선 의 혼불 타던 밤 에 : -초판. -서울시 : -윤 동주, -بلفقيه، عبد الله بن حسين بن عبد الله. -قوت الألباب من مجاني جني الألباب / -تريم، حضرموت : -زكي، رمضان خميس. -مفهوم السنن الربانية : -الطبعة 1. -القاهرة : -هذا هو الإسلام ؛ -عمارة، محمد. -قراءة النص الديني : -الطبعة 1. -القاهرة : -هذا هو الإسلام ؛ -ندوة السيرة النبوية : -الطبعة 1. -[Omdurman] : -منشورات المركز ؛ -إمام، حمادة. -مبارك والإخوان / -الطبعة العربية 1. -المهندسين [Giza] : -新譯 古文 辭類纂 / -初版. -臺北市 : -古籍 今注 新譯 叢書 -姚 鼐, -黃 鈞. -刘 文锁, -尼雅 : -静止 的 家园 和 时间 -第1版. -北京市 : -神秘 中国 -民丰县 (China) -民丰县 (China) -中国 新编 地方志 总目 提要 = -第1版. -北京市 : -《中国 新编 地方志 总目 提要》编纂 委员会. -中国 第二 历史 档案馆. -馆藏 民国 台湾 档案 汇编 / -民国 台湾 档案 汇编 -台湾 档案 汇编 -第1版. -北京市 : -台湾 文献 史料 出版 工程 -陈 云林. -海峡 两岸 出版 交流 中心. -黃 俊傑, -德川 日本 《論語》詮釋 史論 / -初版. -臺北市 : -東亞 文明 研究 叢書 ; -Confucius. -東亞 視域中 的 國籍、移民 與 認同 學術 研討會 -東亞 視域中 的 國籍、移民 與 認同 / -初版. -臺北市 : -東亞 文明 研究 叢書 ; -甘 懷真, -貴志 俊彦, -川島 真, -בסן, צדוק. -יתומות : -ירושלים : -רז, גאי. -בית האמנים. -שלו, אריה. -כישלון והצלחה בהתרעה : -תל אביב : -אריאלי, שאול. -תפסת מרובה לא תפסת : -ירושלים : -תמונת מצב -שביט, יעקב. -אירופה המהוללת והמקוללת : -תל אביב : -ריינהרץ, יהודה. -שי, דב. -15 מכל 100 שרדו : -חמישה עשר מכל מאה שרדו -מהד׳ 2. -[ת״א ז״א תל אביב : -שי, דב. -עדווי, ג׳מאל, -פעילות הקוויקרים האמריקנים בפלישתינה 1948-1869 / -Haifa] : -חסקין, גילי. -שבוי בקסמה : -הוד השרון : -טאוב, גדי. -המתנחילים והמאבק על משמעותה של הציונות / -מתנחלים -תל אביב : -פרוזה (ידיעות אחרונות). -日本軍 「慰安婦」 関係 資料 集成 / -初版. -東京 : -鈴木 裕子, -山下 英愛, - 外村 大,1966- -成田 龍一. -歴史学 の ポジショナリティ : -東京 : -山崎 一穎, -森 鷗外 論攷 / -東京 : -森 鷗外, -木村 博一, -日本 社会科 の 成立 理念 と カリキュラム 構造 / -初版. -東京 : -堀 幸雄, -最新 右翼 辞典 / -右翼 辞典 -東京 : -久保田 淳, -ことば、ことば、ことば / -初版. -東京 : -小林 一茶, -だん袋 : -一茶 自筆 句集 -東京 : -渡辺 卓郎. -岡本 哲志, -銀座 四百年 : -東京 : -講談社 選書 メチエ ; -銀座 (Tokyo, Japan) -千石 英世, -小島 信夫 : -暗示 の 文学、鼓舞する 寓話 -東京 : -小島 信夫, -検証 国家 戦略なき 日本 / -東京 : -読売 新聞社. -吉田 喜重, -吉田 喜重 : -変貌 の 倫理 -東京 : -蓮實 重彦, -李 燕, -陶 行知 の 芸術 教育論 : -初版. -東京 : -陶 行知, -寺崎 昌男, -大学 は 歴史 の 思想 で 変わる : -初版. -東京 : -比田井 克仁, -伝說 と 史実 の はざま : -東京 : -誰 で も 読める 日本 古代史 年表 : -日本 古代史 年表 -東京 : -吉川 弘文館. -保阪 正康, -松本 清張 と 昭和 史 / -初版. -東京 : -平凡社 新書 ; -松本 清張, -松本 清張, -松本 清張, -東京 大学. -戦争 の 表象 : -東京 : -東京 大学. -吉見 俊哉, -人口 減少 時代 の 日本 経済 / -東京 : -人口学 ライブラリー ; -大淵 寬, -森岡 仁, -日本 の 所得 分配 : -初版. -東京 : -小塩 隆士, -田近 栄治. -府川 哲夫, -佐々木 毅, -知識 基盤 社会 と 大学 の 挑戦 : -初版. -東京 : -本多 博之, -戦国 織豊期 の 貨幣 と 石高制 / -東京 : -資料 集成 戦争 と 障害者 / -東京 : -十五年 戦争 極秘 資料集. 補卷 ; -橋本 雅之, -古風土記 の 研究 / -初版. -大阪市 : -研究 叢書 ; -古風土記 -常陸国 風土記. -八代 斌助 の 思想 と 行動 を 考える : -京都市 : -神戶 国際 大学 経済 文化 研究所 叢書 ; -八代 斌助, -日本 聖公会 -桑田 優, -平尾 武之, -山本 祐策, -小川 恭一. -徳川 幕府 の 昇進 制度 : -寬政 十年末 旗本 昇進表 -東京 : -ジャーナリズム と 権力 / -京都市 : -大石 裕, -日本 の 地方 民鉄 と 地域 社会 / -初版. -東京 : -青木 栄一, -少子化 の 経済 分析 / -東京 : -高山 憲之, -斎藤 修, -田間 泰子, -「近代 家族」と ボディ・ポリティクス / -京都市 : -四川省 潼南县 地名录 / -潼南县 地名录 -[潼南县 : -四川省 地名录 丛书 ; -潼南县 (China) -四川省 潼南县 地名 领导 小组. -四川省 武隆县 地名录 = -武隆县 地名录 -[武隆县 : -四川省 地名录 丛书 ; -武隆县 (China) -武隆县 地名 领导 小组. -四川省 新都县 地名录 / -新都县 地名录 -[新都县 : -四川省 地名录 丛书 ; -新都县 (China) -新都县 地名 领导 小组. -مالح، محمد رياض. -الشيخ الأكبر محيي الدين بن العربي سلطان العارفين / -أبو ظبي : -حميري، جمال الدين عبد الله. -النسبة إلى المواضع والبلدان / -الطبعة 1. -أبو ظبي : -مزروعي، فاطمة حمد. -تمثيلات الآخر في أدب قبل الإسلام / -أبو ظبي : -يوميات زايد / -الطبعة 1. -أبو ظبي : -المأمورة : -الطبعة 1. -Abu Dhabi : -العاديات : -الطبعة 1. -Abu Dhabi : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1997 حتى عام 2006 بشأن الأراضي الممنوحة للمواطنين / -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1996 حتى عام 2006 في العلامات التجاربة / -[?Dubai] : -قانون اتحادي رقم 24 لسنة 2006 م في شأن حماية المستهلك. -[?Dubai] : -قانون مكافحة التستر التجاري رقم 17 لسنة 2004 م. -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1999 حتى عام 2006 في المنازعات بين الؤجرين والمستأجرين : -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1990 حتى عام 2005 في الإبعاد / -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1988 حتى عام 2005 م في أحكام بطاقة الإئتمان. -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1991 حتى عام 2005 في بطلان الإعلان / -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1997 حتى عام 2005 في الملكية التجارية والصناعية / -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1991 حتى عام 2006 في التسهيلات المصرفية / -[?Dubai] : -حجي، عبد الرحمن. -دراسة الظاهرة العلمية في المجتمع الأندلسي / -أبو ظبي : -مري، سعيد. -ديوان الغواص / -أبو ظبي : -نجمآبادي، أبو الفضل. -كتاب القضاء : -الطبعة 1. -قم : -مجموعة ىثار آية الله الميرزا أبو الفضل النجم آبادي ؛ -نجمآبادي، أبو الفضل. -الرسائل الفقهية : -الطبعة 1. -قم : -مجموعة آثار آية الله الميرزا أبو الفضل النجمآبادي ؛ -한국 의 민주 정부. -한국 의 민주 정부. -חיים ביהודה. -[Jerusalem] : -松村 潤, -米國 議會 圖書館 所藏 滿洲語 文獻 目錄 / -滿洲語 文獻 目錄 -東京 : -東北 アジア 文獻 硏究 叢刊 ; -פוגל, דוד. -חרא של פרסום / -מהד׳ 1. -[Israel] : -פוגל, דוד. -ישראל. -אזורי עדיפות לאומית : -ירושלים : -دارا شكوه. -منتخبات آثار : -[تهران] : -جلالى نائينى، محمد رضا. -صادق عنقا. -١نته : -١ا) 22. -Verdugo City, Ca : -בר־עם שחל, ליאורה. -הנחיות לסקר ותיעוד אתרים לשימור / -[Israel] : -ארן, זלמן. -דברים על החינוך בדור הדעת / -חינוך בדור הדעת -אבא אבן -ירושלים : -סדרת ״השרים״ / יוסף יונאי -יונאי, יוסף. -הגדה של פסח : -ירושלים : -אלישיב, יוסף שלו׳. -קהלות יעקב. -ישראלזון, משה. -ורנר, שלמה י. -ליל שמורים. -ספר ליל שמורים : -ליל שמורים -ברוקלין, נ.י. : -ברוודה, שלמה. -חד גדיא. -הגדה של פסח : -ירושלים : -קניבסקי, יעקב ישראל. -ברונשטיין, ישראל יוסף בן משה אליעזר. -מוסקאוויטש, נפתלי אשר ישעי׳. -פירות האילן (ארבעה המינים) -ספר פירות האילן : -פירות האילן -אשדוד : -ספר יהושע. -ספר יהושעץ -יהושע -[ירושלים : -ספר יהושע. -ספר שופטים. -וילהלם, אהרן אליהו בן יחזקאל. -ספר שופטים. -אילה שלוחה. -דיקמאן, אברהם ש. -ספר שלשים יום קודם החג : -שלשים יום קודם החג -זכרון משה -מהד׳ 2. מתוקנת. -ליקוואוד, נ. דז. : -אורנשטיין, יעקב משולם. -ישועות יעקב -ספר ישועות יעקב : -נדפס ונסדר מחדש. -אשדוד : -תורה. -באום, אברהם. -לילה כיום יאיר : -ירושלים : -אוצר מפרשי קהלת / -ירושלם : -קהלת. -ואנונו, שמעון. -קהלת. -דיין, נסים. -ספר יעלת חן : -יעלת חן -בני ברק : -תורה. -מרגליות התורה : -ספר מרגליות התורה -ירושלים : -תורה. -ואנונו, שמעון. -רבינוביץ־תאומים, בנימין בן יעקב. -ספר יחלק שלל : -יחלק שלל -ירושלים : -תורה. -ספורנו ורבינו בחיי. -ספר פניני ספורנו ורבינו בחיי : -לונדון : -תורה. -רוזנבוים, יעקב מאיר. -ספורנו, עובדיה בן יעקב, -בחיי בן אשר בן חלבא, -ראבד, רם משה. -הגדה של פסח מהדורת טנן : -פתח תקוה : -הגדה של פסח. -東京 大学. -東京 大学 総合 研究 博物館 所蔵 渡辺 武男 収集 広島・長崎 被爆 関連 資料 目錄 / -渡辺 武男 収集 広島・長崎 被爆 関連 資料 目錄 -広島・長崎 被爆 関連 資料 目錄 -東京 : -東京 大学 総合 研究 博物館 標本 資料 報告, - 渡辺 武男, -東京大学. -田賀井 篤平, -シルク ロード 草原 の 道 に おける アルジャィ 石窟 の 歴史 と 文化・国際 シンポジウム, 2007年 3月 27日 : -静岡市 : -楊 海英, -報告書 日系 アメリカ人 リーダーシップ シンポジウム 「芸術 から ビジネス まで: 多様 な 職業 を 通じた 日系 アメリカ人 の 貢献」/ -日系 アメリカ人 リーダーシップ シンポジウム 「芸術 から ビジネス まで: 多様 な 職業 を 通じた 日系 アメリカ人 の 貢献」 -東京 : -武田 興欣, -国際 交流 基金. -出来町 天王祭 鹿子神車・河水車 / -鹿子神車・河水車 -名古屋市 : -名古屋市 山車 調查 報告書 ; -名古屋市 文化財 調查 報告 ; -名古屋市 教育 委員会. -中国 対外 貿易 統計 / -2005年版. -東京 : -海外 調查 シリーズ ; -日本 貿易 振興 機構. -専門 用語 分野 の 国際 規格 共同 開発 調查 研究 成果 報告書. -東京 : -Japan. -日本 規格 協会. -群杭 基礎 の 大型 振動台 実験 / -[つくば市] : -土木 研究所 資料, -土木 研究所 (Japan). -マテリアル フロー データ ブック : -第 3版. -つくば市 : -森口 祐一. -橋本 征二, -産総研 レア メタル シンポジウム, 平成 18年 10月 2日. -「産総研 レア メタル シンポジウム」講演 予稿集. -名古屋市 : -産業 技術 総合 研究所. -古川 恵太. -沖縄 泡瀬 干潟 を 例 と した 沿岸 湿地 の 総合的 環境 評価 の 試み / -横須賀市 : -国土 技術 政策 総合 研究所 資料 = -徳川 将軍家 と 会津 松平家 : -会津若松市 : -会津藩 (Japan) -福島 県立 博物館. -若松城 天守閣 (Museum) -شيخ الأرض، محمد. -فشة خلق / -ابو ظبي : -ابن خلدون. -مقدمه ابن خلدون / -١ا) 2. -تهران : -انتشارات بنياد ترجمه و نشر كتاب ؛ -نابادى، محمد )روين. -شهرانى، عنايت الله. -ضرب المثلهاى درى افغانستان : -كلرى، البرتا [Calgary, Alberta, Canada]: -كوشان، محمد طه. -يعقوبي، أحمد بن أبي يعقوب. -تاريخ يعقوبى / -تهران : -انتشارات بناه ترجمه و نشر كتاب ؛ -آيتى، ابراهيم. -غيرت كرمانشاهى، عبد الكريم. -كليات آثار سيد عبد الكريم غيرت كرمانشاهى / -[تهران : -غيرت، محمد سعيد. diff --git a/tags/rel-1.4/test/util.py b/tags/rel-1.4/test/util.py deleted file mode 100644 index 7ade343..0000000 --- a/tags/rel-1.4/test/util.py +++ /dev/null @@ -1,4 +0,0 @@ -import sys -sys.path.append( '../pymarc' ); - - diff --git a/tags/rel-1.4/test/writer.py b/tags/rel-1.4/test/writer.py deleted file mode 100644 index 5e5e284..0000000 --- a/tags/rel-1.4/test/writer.py +++ /dev/null @@ -1,31 +0,0 @@ -import util -import unittest -import pymarc -import re -import os - -class MARCWriterTest(unittest.TestCase): - - def test_write(self): - - # write a record off to a file - writer = pymarc.MARCWriter(file('test/writer-test.dat','w')) - record = pymarc.Record() - field = pymarc.Field('245', ['0','0'], ['a', 'foo']) - record.addField(field) - writer.write(record) - writer.close() - - # read it back in - reader = pymarc.MARCReader(file('test/writer-test.dat')) - record = reader.next() - - # remove it - os.remove('test/writer-test.dat') - -def suite(): - suite = unittest.makeSuite(MARCWriterTest, 'test') - return suite - -if __name__ == "__main__": - unittest.main() diff --git a/tags/rel-1.4/test/xml_test.py b/tags/rel-1.4/test/xml_test.py deleted file mode 100644 index bb730db..0000000 --- a/tags/rel-1.4/test/xml_test.py +++ /dev/null @@ -1,40 +0,0 @@ -from unittest import TestCase -from pymarc import map_xml, parse_xml_to_array, Record - -class XmlTest(TestCase): - - def test_map_xml(self): - self.seen = 0 - def count(r): self.seen += 1 - map_xml(count, 'test/batch.xml') - self.assertEqual(2, self.seen) - - def test_multi_map_xml(self): - self.seen = 0 - def count(r): self.seen += 1 - map_xml(count, 'test/batch.xml', 'test/batch.xml') - self.assertEqual(4, self.seen) - - def test_parse_to_array(self): - records = parse_xml_to_array('test/batch.xml') - self.assertEqual(len(records), 2) - - # should've got two records - self.assertEqual(type(records[0]), Record) - self.assertEqual(type(records[1]), Record) - - # first record should have 18 fields - r = records[0] - self.assertEqual(len(r.getFields()), 18) - - # check the content of a control field - self.assertEqual(r['008'].data, - u'910926s1957 nyuuun eng ') - - # check a data field with subfields - f = r['245'] - self.assertEqual(f.indicator1, '0') - self.assertEqual(f.indicator2, '4') - self.assertEqual(f['a'], u'The Great Ray Charles') - self.assertEqual(f['h'], u'[sound recording].') - diff --git a/tags/rel-1.5/Changes b/tags/rel-1.5/Changes deleted file mode 100644 index 72014ea..0000000 --- a/tags/rel-1.5/Changes +++ /dev/null @@ -1,100 +0,0 @@ -v1.5 Wed Jan 2 21:54:56 EST 2008 -- added pymarc.marcxml.record_to_xml for converting a record to marcxml - and corresponding test in test/xml_test.py - -v1.4 Tue Nov 27 13:44:41 EST 2007 -- map_xml can take multiple files - -v1.3 Tue Nov 20 08:48:51 EST 2007 -- added map_xml to pymarc/marcxml.py for a more functional processing - -v1.2 Tue Sep 4 08:22:44 EDT 2007 -- added pymarc/marcxml.py for marcxml reading support -- added test of marcxml reading: test/xml_test.py -- modified Field so that default indicators and subfields are - not set to a default array in the method signature. This causes - subtle bugs since new arrays are not contructed for - repeated calls to the constructor. - -v1.1 Wed Aug 15 08:34:39 EDT 2007 -- updated the homepage for the package - -v1.0 Wed Jul 18 14:55:19 EDT 2007 -- added marc8_to_unicode() support for applications that need to - convert marc8 data to unicode ... many thanks for Aaron Lav - for allowing relevant bits of code to be lifted from PyZ3950; - also thanks to Mark Matienzo for the idea and for testing. -- added some tests for new marc8_to_unicode functionality. Thanks - to the Library of Congress for providing equivalent marc8 and - utf8 marc record batches to use for constructing test data -- The folowing changes are courtesy of Mark Matienzo: - - modified __str__ methods for Field and Record to produce - data in MARCMaker [1] format. THIS MAY BREAK YOUR CODE. This is - not a complete implementation as support for special character - mnemonics [2] has yet to be added - - modified test cases for string conversion and added tests for - control fields - - added formatField() and isSubjectField() methods to Field and - the author(), uniformtitle(), subjects(), addedentries(), - and location() methods to Record, and tests for those methods - - [1] http://www.loc.gov/marc/makrbrkr.html - [2] http://www.loc.gov/marc/mnemonics.html - -v0.9 Tue Apr 10 21:54:02 EDT 2007 -- various simplifications and pythonifications (thanks Dan Chudnov) -- added easy_install support - -v0.85 Fri Feb 3 13:08:35 EST 2006 -- added default leader template for when records are created - from scratch (thanks Kurt Nordstrom) - -v0.81 Mon Jan 30 16:33:36 EST 2006 -- getFields() wasn't returning all the fields when no tag was passed in. - -v0.8 Mon Jan 30 07:05:36 CST 2006 -- added the ability to read raw marc from strings THIS MAY BREAK - YOUR CODE. pymarc no longer supports passing file paths to the - MARCReader constructor. You need to simply change: - - reader = MARCReader('marc.dat') - - to: - - reader = MARCReader(file('marc.dat')) - - Thanks to Daniel Hoth for suggesting this. It just makes sense to - be able to pass in MARC that you got from a Z39.50 network connection - or database, etc. - -v0.7 Mon Jan 23 15:08:55 EST 2006 -- added addSubfield() to Subfield (thanks Kurt Nordstrom) - -v0.6 Tue Nov 29 20:48:31 CST 2005 -- fixed test suite to run under the unittest that ships with python2.3 -- allow non-integer field tags -- fixed MARCWriter and added test (thanks Mikel Larreategi) - -v0.5 Thu Feb 10 10:01:12 CST 2005 -- handle empty subfields - -v0.4 Wed Feb 2 22:29:33 CST 2005 -- fixed directory validation: thanks Aaron Lav -- added iterator for pymarc.Field for iterating through subfields -- added pymarc.Field.value() for getting a field value easily - -v0.3 Wed Jan 5 17:03:37 CST 2005 -- changed mind about accessors (again): - removed getField() must use getFields() - renamed subfield() to getSubfields() and have it return a list -- added doctest support to pymarc/__init__.py -- added a test batch file of python data - -v0.2 Tue Jan 4 21:01:22 CST 2005 -- removed getField() and renamed getFields() to find() - -v0.11 Mon Jan 3 20:42:19 CST 2005 -- fixed test suite execution - -v0.1 Wed Dec 29 19:54:23 CST 2004 -- initial release diff --git a/tags/rel-1.5/MANIFEST.in b/tags/rel-1.5/MANIFEST.in deleted file mode 100644 index 591cc6d..0000000 --- a/tags/rel-1.5/MANIFEST.in +++ /dev/null @@ -1,3 +0,0 @@ -global-include *.py *.dat -include README MANIFEST.in - diff --git a/tags/rel-1.5/README b/tags/rel-1.5/README deleted file mode 100644 index a917d56..0000000 --- a/tags/rel-1.5/README +++ /dev/null @@ -1,30 +0,0 @@ -DESCRIPTION ------------ - -pymarc is a python library for working with MARC21 bibliographic data -loosely based on the MARC/Perl suite of modules (http://marcpm.sf.net). -More about pymarc can be found at: http://www.textualize.com/pymarc - -INSTALLATION ------------- - -Run the pymarc test suite to make sure things are in order with the -distribution: - - python test.py - -And then install: - - python setup.py install - -For typical usage of this library look at the documentation in -pymarc/__init__.py or at the unittests found in the test directory. - -TODO ----- - -- marcxml writing support -- cleanup with respect to PEP 8 and PEP 257 - -LICENSE: BSD -AUTHOR: Ed Summers diff --git a/tags/rel-1.5/ez_setup.py b/tags/rel-1.5/ez_setup.py deleted file mode 100644 index 38c09c6..0000000 --- a/tags/rel-1.5/ez_setup.py +++ /dev/null @@ -1,228 +0,0 @@ -#!python -"""Bootstrap setuptools installation - -If you want to use setuptools in your package's setup.py, just include this -file in the same directory with it, and add this to the top of your setup.py:: - - from ez_setup import use_setuptools - use_setuptools() - -If you want to require a specific version of setuptools, set a download -mirror, or use an alternate download directory, you can do so by supplying -the appropriate options to ``use_setuptools()``. - -This file can also be run as a script to install or upgrade setuptools. -""" -import sys -DEFAULT_VERSION = "0.6c5" -DEFAULT_URL = "http://cheeseshop.python.org/packages/%s/s/setuptools/" % sys.version[:3] - -md5_data = { - 'setuptools-0.6b1-py2.3.egg': '8822caf901250d848b996b7f25c6e6ca', - 'setuptools-0.6b1-py2.4.egg': 'b79a8a403e4502fbb85ee3f1941735cb', - 'setuptools-0.6b2-py2.3.egg': '5657759d8a6d8fc44070a9d07272d99b', - 'setuptools-0.6b2-py2.4.egg': '4996a8d169d2be661fa32a6e52e4f82a', - 'setuptools-0.6b3-py2.3.egg': 'bb31c0fc7399a63579975cad9f5a0618', - 'setuptools-0.6b3-py2.4.egg': '38a8c6b3d6ecd22247f179f7da669fac', - 'setuptools-0.6b4-py2.3.egg': '62045a24ed4e1ebc77fe039aa4e6f7e5', - 'setuptools-0.6b4-py2.4.egg': '4cb2a185d228dacffb2d17f103b3b1c4', - 'setuptools-0.6c1-py2.3.egg': 'b3f2b5539d65cb7f74ad79127f1a908c', - 'setuptools-0.6c1-py2.4.egg': 'b45adeda0667d2d2ffe14009364f2a4b', - 'setuptools-0.6c2-py2.3.egg': 'f0064bf6aa2b7d0f3ba0b43f20817c27', - 'setuptools-0.6c2-py2.4.egg': '616192eec35f47e8ea16cd6a122b7277', - 'setuptools-0.6c3-py2.3.egg': 'f181fa125dfe85a259c9cd6f1d7b78fa', - 'setuptools-0.6c3-py2.4.egg': 'e0ed74682c998bfb73bf803a50e7b71e', - 'setuptools-0.6c3-py2.5.egg': 'abef16fdd61955514841c7c6bd98965e', - 'setuptools-0.6c4-py2.3.egg': 'b0b9131acab32022bfac7f44c5d7971f', - 'setuptools-0.6c4-py2.4.egg': '2a1f9656d4fbf3c97bf946c0a124e6e2', - 'setuptools-0.6c4-py2.5.egg': '8f5a052e32cdb9c72bcf4b5526f28afc', - 'setuptools-0.6c5-py2.3.egg': 'ee9fd80965da04f2f3e6b3576e9d8167', - 'setuptools-0.6c5-py2.4.egg': 'afe2adf1c01701ee841761f5bcd8aa64', - 'setuptools-0.6c5-py2.5.egg': 'a8d3f61494ccaa8714dfed37bccd3d5d', -} - -import sys, os - -def _validate_md5(egg_name, data): - if egg_name in md5_data: - from md5 import md5 - digest = md5(data).hexdigest() - if digest != md5_data[egg_name]: - print >>sys.stderr, ( - "md5 validation of %s failed! (Possible download problem?)" - % egg_name - ) - sys.exit(2) - return data - - -def use_setuptools( - version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, - download_delay=15 -): - """Automatically find/download setuptools and make it available on sys.path - - `version` should be a valid setuptools version number that is available - as an egg for download under the `download_base` URL (which should end with - a '/'). `to_dir` is the directory where setuptools will be downloaded, if - it is not already available. If `download_delay` is specified, it should - be the number of seconds that will be paused before initiating a download, - should one be required. If an older version of setuptools is installed, - this routine will print a message to ``sys.stderr`` and raise SystemExit in - an attempt to abort the calling script. - """ - try: - import setuptools - if setuptools.__version__ == '0.0.1': - print >>sys.stderr, ( - "You have an obsolete version of setuptools installed. Please\n" - "remove it from your system entirely before rerunning this script." - ) - sys.exit(2) - except ImportError: - egg = download_setuptools(version, download_base, to_dir, download_delay) - sys.path.insert(0, egg) - import setuptools; setuptools.bootstrap_install_from = egg - - import pkg_resources - try: - pkg_resources.require("setuptools>="+version) - - except pkg_resources.VersionConflict, e: - # XXX could we install in a subprocess here? - print >>sys.stderr, ( - "The required version of setuptools (>=%s) is not available, and\n" - "can't be installed while this script is running. Please install\n" - " a more recent version first.\n\n(Currently using %r)" - ) % (version, e.args[0]) - sys.exit(2) - -def download_setuptools( - version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, - delay = 15 -): - """Download setuptools from a specified location and return its filename - - `version` should be a valid setuptools version number that is available - as an egg for download under the `download_base` URL (which should end - with a '/'). `to_dir` is the directory where the egg will be downloaded. - `delay` is the number of seconds to pause before an actual download attempt. - """ - import urllib2, shutil - egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3]) - url = download_base + egg_name - saveto = os.path.join(to_dir, egg_name) - src = dst = None - if not os.path.exists(saveto): # Avoid repeated downloads - try: - from distutils import log - if delay: - log.warn(""" ---------------------------------------------------------------------------- -This script requires setuptools version %s to run (even to display -help). I will attempt to download it for you (from -%s), but -you may need to enable firewall access for this script first. -I will start the download in %d seconds. - -(Note: if this machine does not have network access, please obtain the file - - %s - -and place it in this directory before rerunning this script.) ----------------------------------------------------------------------------""", - version, download_base, delay, url - ); from time import sleep; sleep(delay) - log.warn("Downloading %s", url) - src = urllib2.urlopen(url) - # Read/write all in one block, so we don't create a corrupt file - # if the download is interrupted. - data = _validate_md5(egg_name, src.read()) - dst = open(saveto,"wb"); dst.write(data) - finally: - if src: src.close() - if dst: dst.close() - return os.path.realpath(saveto) - -def main(argv, version=DEFAULT_VERSION): - """Install or upgrade setuptools and EasyInstall""" - - try: - import setuptools - except ImportError: - egg = None - try: - egg = download_setuptools(version, delay=0) - sys.path.insert(0,egg) - from setuptools.command.easy_install import main - return main(list(argv)+[egg]) # we're done here - finally: - if egg and os.path.exists(egg): - os.unlink(egg) - else: - if setuptools.__version__ == '0.0.1': - # tell the user to uninstall obsolete version - use_setuptools(version) - - req = "setuptools>="+version - import pkg_resources - try: - pkg_resources.require(req) - except pkg_resources.VersionConflict: - try: - from setuptools.command.easy_install import main - except ImportError: - from easy_install import main - main(list(argv)+[download_setuptools(delay=0)]) - sys.exit(0) # try to force an exit - else: - if argv: - from setuptools.command.easy_install import main - main(argv) - else: - print "Setuptools version",version,"or greater has been installed." - print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)' - - - -def update_md5(filenames): - """Update our built-in md5 registry""" - - import re - from md5 import md5 - - for name in filenames: - base = os.path.basename(name) - f = open(name,'rb') - md5_data[base] = md5(f.read()).hexdigest() - f.close() - - data = [" %r: %r,\n" % it for it in md5_data.items()] - data.sort() - repl = "".join(data) - - import inspect - srcfile = inspect.getsourcefile(sys.modules[__name__]) - f = open(srcfile, 'rb'); src = f.read(); f.close() - - match = re.search("\nmd5_data = {\n([^}]+)}", src) - if not match: - print >>sys.stderr, "Internal error!" - sys.exit(2) - - src = src[:match.start(1)] + repl + src[match.end(1):] - f = open(srcfile,'w') - f.write(src) - f.close() - - -if __name__=='__main__': - if len(sys.argv)>2 and sys.argv[1]=='--md5update': - update_md5(sys.argv[2:]) - else: - main(sys.argv[1:]) - - - - - diff --git a/tags/rel-1.5/pymarc/__init__.py b/tags/rel-1.5/pymarc/__init__.py deleted file mode 100644 index e2839d7..0000000 --- a/tags/rel-1.5/pymarc/__init__.py +++ /dev/null @@ -1,73 +0,0 @@ -# __init__.py - -r''' - -The pymarc module provides an API for reading, writing and modifying -MARC records. MARC (MAchine Readable Cataloging) is a metadata format for -bibliographic data. More about MARC can be found at the Library of Congress: -http://lcweb.loc.gov/marc - -Below are some common examples of how you might want to use pymarc. If you -run across an example that you think should be here please contribute it -by writing to the author. - -1. Reading a batch of records and printing out the 245 subfield a. If you - are curious this example uses the batch file available in the distribution. - - >>> from pymarc import MARCReader - >>> reader = MARCReader( 'test/marc.dat' ) - >>> for record in reader: - ... print record['245']['a'] - The pragmatic programmer : - Programming Python / - Learning Python / - Python cookbook / - Python programming for the absolute beginner / - Web programming : - Python programming on Win32 / - Python programming : - Python Web programming / - Core python programming / - Python and Tkinter programming / - Game programming with Python, Lua, and Ruby / - Python programming patterns / - Python programming with the Java class libraries : - Learn to program using Python : - Programming with Python / - BSD Sockets programming from a multi-language perspective / - Design patterns : - Introduction to algorithms / - ANSI Common Lisp / - -2. Creating a record and writing it out to a file. - - >>> from pymarc import Record, Field - >>> record = Record() - >>> record.add_field( \ - ... Field( \ - ... tag = '245', - ... indicators = ['0','1'], - ... subfields = [ \ - ... 'a', 'The pragmatic programmer : ', - ... 'b', 'from journeyman to master /', - ... 'c', 'Andrew Hunt, David Thomas.' ] ) ) - >>> out = file( 'file.dat', 'w' ) - >>> out.write( record.as_marc21() ) - -''' - -__version__ = '1.0' - -from record import * -from field import * -from exceptions import * -from reader import * -from writer import * -from constants import * -from marc8 import marc8_to_unicode, MARC8_to_Unicode -from marcxml import * - -if __name__ == "__main__": - import doctest - doctest.testmod() - diff --git a/tags/rel-1.5/pymarc/constants.py b/tags/rel-1.5/pymarc/constants.py deleted file mode 100644 index bd148c2..0000000 --- a/tags/rel-1.5/pymarc/constants.py +++ /dev/null @@ -1,7 +0,0 @@ -LEADER_LEN = 24 -DIRECTORY_ENTRY_LEN = 12 -SUBFIELD_INDICATOR = chr( 0x1F ) -END_OF_FIELD = chr( 0x1E ) -END_OF_RECORD = chr( 0x1D ) - - diff --git a/tags/rel-1.5/pymarc/exceptions.py b/tags/rel-1.5/pymarc/exceptions.py deleted file mode 100644 index 4be03df..0000000 --- a/tags/rel-1.5/pymarc/exceptions.py +++ /dev/null @@ -1,30 +0,0 @@ -class pymarcException( Exception ): - pass - -class RecordLengthInvalid( pymarcException): - def __str__( self ): - return( "Invalid record length in first 5 bytes of record" ) - -class RecordLeaderInvalid( pymarcException ): - def __str__ ( self ): - return "Unable to extract record leader" - -class RecordDirectoryInvalid( pymarcException ): - def __str__( self ): - return "Invalid directory" - -class NoFieldsFound( pymarcException ): - def __str__ ( self ): - return "Unable to locate fields in record data" - -class BaseAddressInvalid( pymarcException ): - def __str__ ( self ): - return "Base address exceeds size of record" - -class WriteNeedsRecord( pymarcException ): - def __str__( self ): - return "Write requires a pymarc.Record object as an argument" - -class NoActiveFile( pymarcException ): - def __str__( self ): - return "There is no active file to write to in call to write" diff --git a/tags/rel-1.5/pymarc/field.py b/tags/rel-1.5/pymarc/field.py deleted file mode 100644 index 9778b76..0000000 --- a/tags/rel-1.5/pymarc/field.py +++ /dev/null @@ -1,167 +0,0 @@ -from constants import * -from exceptions import * - -class Field( object ): - - def __init__( self, tag, indicators=None, subfields=None, data='' ): - """ - Field() pass in the field tag, indicators and subfields for the tag. - - field = Field( \ - tag = '245', - indicators = ['0','1'], - subfields = [ \ - 'a', 'The pragmatic programmer : ', - 'b', 'from journeyman to master /', - 'c', 'Andrew Hunt, David Thomas.' ] - - If you want to create a control field you don't pas in the indicators - and use a data parameter rather than a subfields parameter: - - field = Field( tag='001', data='fol05731351' ) - - """ - if indicators == None: - indicators = [] - if subfields == None: - subfields = [] - - tag = "%03s" % tag - if ( tag < '010' ): - self.tag = tag - self.data = data - else: - self.tag = tag - self.indicators = indicators - self.indicator1 = indicators[0] - self.indicator2 = indicators[1] - self.subfields = subfields - - def __iter__(self): - self.__pos = 0 - return self - - def __str__( self ): - """ - A Field object in a string context will return the tag, indicators - and subfield as a string. This follows MARCMaker format; see [1] - and [2] for further reference. Special character mnemonic strings - have yet to be implemented (see [3]), so be forewarned. Note also - for complete MARCMaker compatibility, you will need to change your - newlines to DOS format ('\r\n'). - - [1] http://www.loc.gov/marc/makrbrkr.html#mechanics - [2] http://search.cpan.org/~eijabb/MARC-File-MARCMaker/ - [3] http://www.loc.gov/marc/mnemonics.html - """ - if ( self.isControlField() ): - text = "=%s %s" % ( self.tag, self.data.replace(' ','\\') ) - else: - text = "=%s " % ( self.tag ) - for indicator in self.indicators: - if indicator in (' ','\\'): - text += "\\" - else: - text += "%s" % indicator - for subfield in self: - text += ("$%s%s" % subfield) - return text - - def __getitem__( self, subfield ): - """ - Retrieve the first subfield with a given subfield code in a field: - - field['a'] - - Handy for quick lookups. - """ - subfields = self.getSubfields( subfield ) - if len(subfields) > 0: return subfields[0] - return None - - def next( self ): - while self.__pos < len(self.subfields): - subfield = ( self.subfields[ self.__pos ], \ - self.subfields[ self.__pos+1 ] ) - self.__pos += 2 - return subfield - raise StopIteration - - def value( self ): - """ - Returns the field as a string without tag, indicators, and - subfield indicators. - """ - if self.isControlField(): - return self.data - string = "" - for subfield in self: - string += subfield[1] - return string - - def getSubfields( self, *codes ): - """ - getSubfields() accepts one or more subfield codes and will return a list - of subfield values. The order of the subfield values in the list - will be the order that they appear in the field. - - print field.getSubfields( 'a' ) - - print field.getSubfields( 'a', 'b', 'z' ) - """ - values = [] - for subfield in self: - if subfield[0] in codes: - values.append( subfield[1] ) - return values - - def addSubfield( self, code, value ): - """ - Adds a subfield code/value pair to the field. - - field.addSubfield('u', 'http://www.loc.gov') - """ - self.subfields.append(code) - self.subfields.append(value) - - def isControlField( self ): - """ - returns true or false if the field is considered a control field. - Control fields lack indicators and subfields. - """ - if self.tag < '010': - return True - return False - - def asMARC21( self ): - """ - used during conversion of a field to raw marc - """ - if self.isControlField(): - return self.data + END_OF_FIELD - marc = str(self.indicator1) + str(self.indicator2) - for subfield in self: - marc += SUBFIELD_INDICATOR + subfield[0] + subfield[1] - return marc + END_OF_FIELD - - def formatField( self ): - """ - Returns the field as a string without tag, indicators, and subfield indicators. Like pymarc.Field.value(), but prettier (adds spaces, formats subject headings). - """ - if self.isControlField(): return self.data - fielddata = '' - for subfield in self: - if not self.isSubjectField(): - fielddata += ' %s' % subfield[1] - else: - if subfield[0] not in ('v','x','y','z'): - fielddata += ' %s' % subfield[1] - else: fielddata += ' -- %s' % subfield[1] - return fielddata.strip() - - def isSubjectField( self ): - """ - returns True or False if the field is considered a subject field - used by formatField - """ - if self.tag.startswith('6'): return True - return False diff --git a/tags/rel-1.5/pymarc/marc8.py b/tags/rel-1.5/pymarc/marc8.py deleted file mode 100644 index cb1c894..0000000 --- a/tags/rel-1.5/pymarc/marc8.py +++ /dev/null @@ -1,101 +0,0 @@ -# see http://www.loc.gov/marc/specifications/speccharmarc8.html - -import unicodedata -import marc8_mapping - -def marc8_to_unicode(marc8): - converter = MARC8_to_Unicode() - return converter.translate(marc8) - -class MARC8_to_Unicode: - """Converts MARC-8 to Unicode. Note that currently, unicode strings - aren't normalized, and some codecs (e.g. iso8859-1) will fail on - such strings. When I can require python 2.3, this will go away. - - Warning: MARC-8 EACC (East Asian characters) makes some - distinctions which aren't captured in Unicode. The LC tables give - the option of mapping such characters either to a Unicode private - use area, or a substitute character which (usually) gives the - sense. I've picked the second, so this means that the MARC data - should be treated as primary and the Unicode data used for display - purposes only. (If you know of either of fonts designed for use - with LC's private-use Unicode assignments, or of attempts to - standardize Unicode characters to allow round-trips from EACC, - or if you need the private-use Unicode character translations, - please inform me, asl2@pobox.com.""" - - basic_latin = 0x42 - ansel = 0x45 - def __init__ (self, G0 = basic_latin, G1 = ansel): - self.g0 = G0 - self.g1 = G1 - - def is_multibyte (self, charset): - return charset == 0x31 - - g0_set = set(['(', ',', '$']) - g1_set = set([')', '-', '$']) - - def translate (self, s): - uni_list = [] - combinings = [] - pos = 0 - while pos < len (s): -## http://www.loc.gov/marc/specifications/speccharmarc8.html - if s[pos] == '\x1b': - next = s[pos+1] - if (next in self.g0_set): - if s[pos+2] == ',' and next == '$': - pos += 1 - self.g0 = ord(s[pos+2]) - pos = pos + 3 - continue - elif next in self.g1_set: - if s[pos+2] == '-' and next == '$': - pos += 1 - self.g1 = ord(s[pos+2]) - pos = pos + 3 - continue - - mb_flag = self.is_multibyte(self.g0) - - if mb_flag: - d = (ord (s[pos]) * 65536 + - ord (s[pos+1]) * 256 + - ord (s[pos+2])) - pos += 3 - else: - d = ord (s[pos]) - pos += 1 - - if (d < 0x20 or - (d > 0x80 and d < 0xa0)): - uni = unichr (d) - continue - - try: - if d > 0x80 and not mb_flag: - (uni, cflag) = marc8_mapping.codesets [self.g1] [d] - else: - (uni, cflag) = marc8_mapping.codesets [self.g0] [d] - except KeyError, e: - print "couldn't find", self.g0, self.g1, d, str(e) - uni = ord(' ') - cflag = False - - if cflag: - combinings.append (unichr (uni)) - else: - uni_list.append (unichr (uni)) - if len (combinings) > 0: - uni_list += combinings - combinings = [] - - # what to do if combining chars left over? - uni_str = u"".join (uni_list) - - # unicodedata.normalize not available until Python 2.3 - if hasattr (unicodedata, 'normalize'): - uni_str = unicodedata.normalize ('NFC', uni_str) - - return uni_str diff --git a/tags/rel-1.5/pymarc/marc8_mapping.py b/tags/rel-1.5/pymarc/marc8_mapping.py deleted file mode 100644 index e69de29..0000000 diff --git a/tags/rel-1.5/pymarc/marcxml.py b/tags/rel-1.5/pymarc/marcxml.py deleted file mode 100644 index 157d978..0000000 --- a/tags/rel-1.5/pymarc/marcxml.py +++ /dev/null @@ -1,136 +0,0 @@ -from xml.sax import make_parser -from xml.sax.handler import ContentHandler, feature_namespaces, \ - feature_namespace_prefixes -from pymarc import Record, Field, MARC8_to_Unicode -import elementtree.ElementTree as ET - -class XmlHandler(ContentHandler): - """ - You can subclass XmlHandler and add your own process_record - method that'll be passed a pymarc.Record as it becomes - available. This could be useful if you want to stream the - records elsewhere (like to a rdbms) without having to store - them all in memory. - """ - - def __init__(self): - self.records = [] - self._record = None - self._field = None - self._subfield_code = None - self._text = [] - - def startElementNS(self, name, qname, attrs): - el = name[1] - self._text = [] - - if el == 'record': - self._record = Record() - elif el == 'controlfield': - tag = attrs.getValue((None, u'tag')) - self._field = Field(tag) - elif el == 'datafield': - tag = attrs.getValue((None, u'tag')) - ind1 = attrs.getValue((None, u'ind1')) - ind2 = attrs.getValue((None, u'ind2')) - self._field = Field(tag, [ind1, ind2]) - elif el == 'subfield': - self._subfield_code = attrs[(None, 'code')] - - def endElementNS(self, name, qname): - el = name[1] - text = u''.join(self._text) - - if el == 'record': - self.process_record(self._record) - self._record = None - elif el == 'leader': - self._record.leader = text - elif el == 'controlfield': - self._field.data = text - self._record.addField(self._field) - self._field = None - elif el == 'datafield': - self._record.addField(self._field) - self._field = None - elif el == 'subfield': - self._field.subfields.append(self._subfield_code) - self._field.subfields.append(text) - self._subfield_code = None - - self._text = [] - - def characters(self, chars): - self._text.append(chars) - - def process_record(self, record): - self.records.append(record) - -def parse_xml(file, handler): - """ - parse a file with a given subclass of xml.sax.handler.ContentHandler - """ - parser = make_parser() - parser.setContentHandler(handler) - parser.setFeature(feature_namespaces, 1) - parser.parse(file) - -def map_xml(f, *files): - """ - map a function onto the file, so that for each record that is - parsed the function f will get called with the extracted record - - def do_it(r): - print r - - map_xml(do_it, 'marc.xml') - """ - parser = make_parser() - handler = XmlHandler() - handler.process_record = f - for file in files: - parse_xml(file, handler) - -def parse_xml_to_array(file): - """ - parse an xml file and return the records as an array - """ - handler = XmlHandler() - parse_xml(file, handler) - return handler.records - -def record_to_xml(record): - """ - converts a record object to a chunk of xml - """ - - # helper for converting non-unicode data to unicode - # TODO: maybe should set g0 and g1 appropriately using 066 $a and $b? - marc8 = MARC8_to_Unicode() - def translate(x): - if type(x) == unicode: return x - else: return marc8.translate(x) - - root = ET.Element('record') - leader = ET.SubElement(root, 'leader') - leader.text = record.leader - for field in record: - if field.isControlField(): - f = ET.SubElement(root, 'controlfield') - f.set('tag', field.tag) - f.text = translate(field.data) - else: - f = ET.SubElement(root, 'datafield') - f.set('tag', field.tag) - f.set('ind1', field.indicators[0]) - f.set('ind2', field.indicators[1]) - for subfield in field: - sf = ET.SubElement(f, 'subfield') - sf.set('code', subfield[0]) - sf.text = translate(subfield[1]) - - return ET.tostring(root) - - - - diff --git a/tags/rel-1.5/pymarc/reader.py b/tags/rel-1.5/pymarc/reader.py deleted file mode 100644 index 8258868..0000000 --- a/tags/rel-1.5/pymarc/reader.py +++ /dev/null @@ -1,56 +0,0 @@ -from pymarc import Record, Field -from constants import END_OF_RECORD -from exceptions import * -from types import * -from cStringIO import StringIO - -class Reader( object ): - """ - A base class for all iterating readers in the pymarc package. - """ - def __iter__( self ): - return self - -class MARCReader( Reader ): - """ - An iterator class for reading a file of MARC21 records. - - Simple usage: - - from pymarc import MARCReader - - ## pass in a file object - reader = MARCReader(file('file.dat')) - for record in reader: - ... - - ## pass in marc in transmission format - reader = MARCReader(rawmarc) - for record in reader: - ... - - """ - - def __init__(self, f): - """ - The constructor which you can pass either raw marc or a file object. - """ - if (type(f) == FileType): self.fh = f - else: self.fh = StringIO(f) - - def next( self ): - """ - To support iteration. - """ - first5 = self.fh.read( 5 ) - if not first5: - raise StopIteration - if len( first5 ) < 5: - raise RecordLengthInvalid - - length = int( first5 ) - chunk = self.fh.read( length - 5 ) - chunk = first5 + chunk - r = Record( chunk ) - return r - diff --git a/tags/rel-1.5/pymarc/record.py b/tags/rel-1.5/pymarc/record.py deleted file mode 100644 index 92062bb..0000000 --- a/tags/rel-1.5/pymarc/record.py +++ /dev/null @@ -1,289 +0,0 @@ -from exceptions import * -from constants import * -from field import * -from types import * -import string -import re - - -class Record( object ): - """ - Record - - A class for representing a MARC record. Each Record object is made up of - multiple Field objects. You'll probably want to look at the docs for Field - to see how to fully use a Record object. - - Basic usage: - - field = Field( \ - tag = '245', - indicators = ['0','1'], - subfields = [ \ - 'a', 'The pragmatic programmer : ', - 'b', 'from journeyman to master /', - 'c', 'Andrew Hunt, David Thomas.' ] - - record.addField( field ) - - Or creating a record from a chunk of MARC in transmission format: - - record = Record( data=chunk ) - - Or getting a record as serialized MARC21. - - raw = record.asMARC21() - - You'll normally want to use a MARCReader object to iterate through - MARC records in a file. - """ - - def __init__( self, data='' ): - self.leader = (' '*10) + '22' + (' '*8) + '4500' - self.fields = list() - self.pos = 0 - if len(data) > 0: - ok = self.decodeMARC( data ) - - def __str__( self ): - """ - In a string context a Record object will return a prettified version - of the record in MARCMaker format. See the docstring for Field.__str__ - for more information. - """ - # join is significantly faster than concatenation - text = "=LDR %s\n" % self.leader - text += string.join( map( str, self.fields ), "\n" ) - text += '\n' - return text - - def __getitem__( self, tag ): - """ - Allows a shorthand lookup by tag: - - record["245"] - - """ - fields = self.getFields( tag ) - if len(fields) > 0: return fields[0] - return None - - def __iter__( self ): - self.__pos = 0 - return self - - def next(self): - if self.__pos >= len( self.fields ): - raise StopIteration - self.__pos += 1 - return self.fields[ self.__pos-1 ] - - def addField( self, *fields ): - """ - addField() will add pymarc.Field objects to a Record object. - Optionally you can pass in multiple fields. - """ - self.fields.extend(fields) - - def getFields( self, *args ): - """ - When passed a tag ( '245' ) getFields() will return a list of all the - fields in a record with a given tag. - - title = record.getFields( '245' ) - - If no fields with the specified - tag are found then an empty list is returned. If you are interested - in more than one tag you can pass in a list: - - subjects = record.getFields( '600', '610', '650' ) - - If no tag is passed in to fields() a list of all the fields will be - returned. - """ - if (len(args) == 0): - return self.fields - - return [f for f in self.fields if f.tag in args] - - def decodeMARC( self, marc ): - """ - decodeMARC() accepts a MARC record in transmission format as a - a string argument, and will populate the object based on the data - found. The Record constructor actually uses decodeMARC() behind - the scenes when you pass in a chunk of MARC data to it. - - """ - - # extract record leader - self.leader = marc[ 0 : LEADER_LEN ] - if len( self.leader ) != LEADER_LEN: raise RecordLeaderInvalid - - # extract the byte offset where the record data starts - baseAddress = int( marc[ 12 : 17 ] ) - if baseAddress <= 0: raise BaseAddressNotFound - if baseAddress >= len( marc ): raise BaseAddressInvalid - - # extract directory, baseAddress-1 is used since the - # director ends with an END_OF_FIELD byte - directory = marc[ LEADER_LEN : baseAddress-1 ] - - # determine the number of fields in record - if len(directory) % DIRECTORY_ENTRY_LEN <> 0: - raise RecordDirectoryInvalid - numFields = len( directory ) / DIRECTORY_ENTRY_LEN - - # add fields to our record using directory offsets - fieldNum = 0 - while ( fieldNum < numFields ): - entryStart = fieldNum * DIRECTORY_ENTRY_LEN - entryEnd = entryStart + DIRECTORY_ENTRY_LEN - entry = directory[ entryStart : entryEnd ] - entryTag = entry[ 0 : 3 ] - entryLength = int( entry[ 3 : 7 ] ) - entryOffset = int( entry[ 7 : 12 ] ) - entryData = marc[ baseAddress + entryOffset : - baseAddress + entryOffset + entryLength - 1 ] - - if entryTag < '010': - field = Field( tag=entryTag, data=entryData ) - else: - subfields = list() - subs = entryData.split( SUBFIELD_INDICATOR ) - i1 = subs[0][0] - i2 = subs[0][1] - for subfield in subs[1:]: - if len(subfield) == 0: continue - code = subfield[0] - data = subfield[1:] - subfields.append( code ) - subfields.append( data ) - field = Field( - tag = entryTag, - indicators = [ i1, i2 ], - subfields = subfields ) - - self.addField( field ) - fieldNum += 1 - - if fieldNum == 0: raise NoFieldsFound - - def asMARC21( self ): - """ - returns the record serialized as MARC21 - """ - fields = '' - directory = '' - offset = 0 - - # build the directory - # each element of the directory includes the tag, the byte length of - # the field and the offset from the base address where the field data - # can be found - for field in self.fields: - fieldData = field.asMARC21() - fields += fieldData - directory += "%03d%04d%05d" % (int(field.tag),len(fieldData),offset) - offset += len( fieldData ) - - # directory ends with an end of field - directory += END_OF_FIELD - - # field data ends with an end of record - fields += END_OF_RECORD - - # the base address where the directory ends and the field data begins - baseAddress = LEADER_LEN + len(directory) - - # figure out the length of the record - recordLength = baseAddress + len(fields) - - # update the leader with the current record length and base address - # the lengths are fixed width and zero padded - self.leader = "%05d%s%05d%s" % \ - ( recordLength, self.leader[5:12], baseAddress, self.leader[17:] ) - - # return the encoded record - return self.leader + directory + fields - - def title( self ): - """ - Returns the title of the record (245 $a an $b). - """ - title = None - try: - title = self['245']['a'] - title += self['245']['b'] - except TypeError, e: - pass - return title - - def isbn( self ): - """ - Returns an ISBN if appropriate. If not present None will - be returned. - """ - isbn = None - try: - # if anyone ever cares alot about performance - # this compilation could be moved out and compiled once - isbnPattern = re.compile( '^([0-9A-Za-z]+)' ) - isbn = isbnPattern.match( self["020"]["a"] ).group(1) - except Exception, e: - pass - return isbn - - def author( self ): - if self['100']: - return self['100'].formatField() - elif self['110']: - return self['110'].formatField() - elif self['111']: - return self['111'].formatField() - return None - - def uniformtitle( self ): - if self['130']: - return self['130'].formatField() - elif self['240']: - return self['240'].formatField() - return None - - def subjects( self ): - """ - Note: Fields 690-699 are considered "local" added entry fields but - occur with some frequency in OCLC and RLIN records. - """ - subjlist = self.getFields ( - '600', '610', '611', '630', '648', '650', '651', '653', '654', - '655', '656', '657', '658', '662', '690', '691', '696', '697', - '698', '699' - ) - return subjlist - - def addedentries( self ): - """ - Note: Fields 790-799 are considered "local" added entry fields but - occur with some frequency in OCLC and RLIN records. - """ - aelist = self.getFields ( - '700', '710', '711', '720', '730', '740', '752', '753', '754', - '790', '791', '792', '793', '796', '797', '798', '799' - ) - return aelist - - def location( self ): - loc = self.getFields('852') - return loc - - def notes( self ): - # todo - pass - - def publisher( self ): - # todo - pass - - def pubyear( self ): - # todo - pass diff --git a/tags/rel-1.5/pymarc/writer.py b/tags/rel-1.5/pymarc/writer.py deleted file mode 100644 index 23c32ff..0000000 --- a/tags/rel-1.5/pymarc/writer.py +++ /dev/null @@ -1,49 +0,0 @@ -from pymarc import Record, Field, WriteNeedsRecord, NoActiveFile -from types import * -from cStringIO import StringIO - -class Writer( object ): - - def write( self ): - pass - -class MARCWriter( Writer ): - """ - A class for writing MARC21 records in transmission format. - - Simple usage: - - from pymarc import MARCWriter - - ## pass in a file - writer = MARCWriter(file('file.dat','w')) - writer.write(record) - - ## use StringIO if you want to write to a string - string = StringIO() - writer = MARCWriter(string) - writer.write(record) - print string - """ - - def __init__(self, f): - """ - You need to pass in a file like object. - """ - self.fh = f - - def write(self, record): - """ - Writes a record. - """ - if type(record) != Record: - raise WriteNeedsRecord - self.fh.write(record.asMARC21()) - - def close( self ): - """ - Closes the file. - """ - self.fh.close() - self.fh = None - diff --git a/tags/rel-1.5/setup.py b/tags/rel-1.5/setup.py deleted file mode 100644 index 65eee3e..0000000 --- a/tags/rel-1.5/setup.py +++ /dev/null @@ -1,39 +0,0 @@ -# bootstrap easy_install -import ez_setup -ez_setup.use_setuptools() - -from setuptools import setup -from sys import version_info - -classifiers = """\ -Intended Audience :: Education -Intended Audience :: Developers -Intended Audience :: Information Technology -License :: OSI Approved :: BSD License -Programming Language :: Python -Topic :: Text Processing :: General -""" - -# workaround for older pythons that don't -# understand classifiers - -if version_info < (2, 3): - _setup = setup - def setup(**kwargs): - if kwargs.has_key("classifiers"): - del kwargs["classifiers"] - _setup(**kwargs) - -setup( - name = 'pymarc', - version = '1.5', - url = 'http://cheeseshop.python.org/pypi/pymarc', - author = 'Ed Summers', - author_email = 'ehs@pobox.com', - license = 'http://www.opensource.org/licenses/bsd-license.php', - packages = [ 'pymarc' ], - description = "read, write and modify MARC bibliographic data", - classifiers = filter( None, classifiers.split("\n") ), - test_suite = 'test' -) - diff --git a/tags/rel-1.5/test.py b/tags/rel-1.5/test.py deleted file mode 100644 index 8ea1517..0000000 --- a/tags/rel-1.5/test.py +++ /dev/null @@ -1,19 +0,0 @@ -import unittest -import test.record -import test.field -import test.reader -import test.encode -import test.writer - -def suite(): - suite = unittest.TestSuite() - suite.addTest( test.record.suite() ) - suite.addTest( test.field.suite() ) - suite.addTest( test.reader.suite() ) - suite.addTest( test.encode.suite() ) - suite.addTest( test.writer.suite() ) - return suite - -runner = unittest.TextTestRunner() -runner.run( suite() ) - diff --git a/tags/rel-1.5/test/__init__.py b/tags/rel-1.5/test/__init__.py deleted file mode 100644 index 4c41d24..0000000 --- a/tags/rel-1.5/test/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -import record -import field -import reader -import marc8 diff --git a/tags/rel-1.5/test/bad.dat b/tags/rel-1.5/test/bad.dat deleted file mode 100644 index 4800dc9..0000000 --- a/tags/rel-1.5/test/bad.dat +++ /dev/null @@ -1,191 +0,0 @@ - - Date: 03/15/2007 - - When searching the Florida State University Library catalog, - you sent the following records: - - -FMT BK -LDR 00000nam 2200409Ia 4500 -006 m d -007 cr cnu|||unuuu -008 041015s2004 caua sb s000|0 eng d -020 |a 1417545372 (electronic bk.) -035 |a (OCoLC)56733780 -0359 |a AMR9920 |b FS -TKR |a (Source)B0013464- 321 -TKR |a (FTaSU)NETLIBY20050112 -OWN |a FS -040 |a N$T |c N$T -05014 |a PS1303 |b .S25 2004eb -08204 |a 818/.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24510 |a Mark Twain's helpful hints for good living |h [electronic resource] : |b a handbook for the damned human race / |c edited by Lin Salamo, Victor Fischer, and Michael B. Frank of the Mark Twain Project. -260 |a Berkeley : |b University of California Press, |c c2004. -300 |a xiv, 207 p. : |b ill. |c 21 cm. -4901 |a Jumping frogs ; |v 2 -504 |a Includes bibliographical references (p. 203-206). -533 |a Electronic reproduction. |b Boulder, Colo. : |c NetLibrary, |d 2004. |n Available via World Wide Web. |n Access may be limited to NetLibrary affiliated libraries. -650 0 |a Conduct of life |v Quotations, maxims, etc. -650 0 |a Conduct of life |v Literary collections. -60010 |a Twain, Mark, |d 1835-1910 |v Quotations. -655 7 |a Electronic books. |2 local -7001 |a Salamo, Lin. -7001 |a Fischer, Victor, |d 1942- -7001 |a Frank, Michael B. -7102 |a Bancroft Library. |b Mark Twain Project. -7102 |a NetLibrary, Inc. -7761 |c Original |z 0520242459 |w (DLC) 2003024224 |w (OCoLC)53398020 -8001 |a Twain, Mark, |d 1835-1910. |t Jumping frogs ; |v 2. -85640 |3 Bibliographic record display |u http://www.netLibrary.com/urlapi.asp?action=summary&v=1&bookid=119359 |z An electronic book accessible through the World Wide Web; click for information -CAT |a NCRD |b 20 |c 20041222 -NCO |a I -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST8 |0 HOL |1 FSU60-002387996 |n 8 |a FTaSU |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -LOC8 |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -SYS 002249954 - -FMT BK -LDR 00000pam 2200301 a 4500 -008 040820s2004 nyu b 000|0 eng -010 |a 2004057341 -020 |a 0142437751 -035 |a (OCoLC)56413662 -0359 |a AMS5114 |b FS -TKR |a (Source)ONIFS141- 49 -OWN |a FS -040 |a DLC |c DLC |d YDX |d FDA -049 |a FDAA ksm -05000 |a PS1302 |b .Q56 2004 -08200 |a 818/.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24514 |a The portable Mark Twain / |c edited with an introduction by Tom Quirk. -260 |a New York : |b Penguin Books, |c 2004. -300 |a liv, 583 p. ; |c 20 cm. -440 0 |a Penguin classics -504 |a Includes bibliographical references (p. [xli]-xlv). -60010 |a Twain, Mark, |d 1835-1910 |v Correspondence. -650 0 |a Humorous stories, American. -650 0 |a Authors, American |y 19th century |v Correspondence. -7001 |a Quirk, Tom, |d 1946- -CAT |a NCRD |b 20 |c 20050218 -CAT |a NUPD |b 20 |c 20050324 -NCO |a blank -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST0 |0 Z30 |1 002255004000010 |b FSULC |c GEN |o BOOK |d 01 |f N |r FSU60-002393331 |n 0 |h PS1302 |i .Q56 2004 |3 Book Sort |4 STROZIER LIBRARY |6 Regular Loan -LOC0 |b FSULC |c GEN |o BOOK |h PS1302 |i .Q56 2004 |3 Book Sort |4 STROZIER LIBRARY |6 Regular Loan -SYS 002255004 - -FMT BK -LDR 00000nam 2200361Ia 4500 -006 m d -007 cr cnu|||unuuu -008 031127s2003 cau s 000|i eng d -020 |a 0520900995 (electronic bk.) -035 |a (OCoLC)53798433 -0359 |a ALU9407 |b FS -TKR |a (Source)B0011135- 96 -TKR |a (FTaSU)NETLIBY20040302 -OWN |a FS -040 |a N$T |c N$T -05014 |a PS1331 |b .A4 2003eb -08214 |a 818.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24010 |a Correspondence. |k Selections -24510 |a Mark Twain's letters 1876-1880. |n Volume 2, |p 1877 |h [electronic resource] / |c edited by the Mark Twain Project. -250 |a Electronic ed. -260 |a Berkeley, Calif. : |b Published for the University of California Press by the Mark Twain Project of the Bancroft Library, |c 2003. -538 |a Mode of access: World Wide Web. -506 |a Made available through NetLibrary; access may be limited to NetLibrary affiliated libraries. -500 |a Title from ebook title screen. -60010 |a Twain, Mark, |d 1835-1910 |v Correspondence. -650 0 |a Authors, American |y 19th century |v Correspondence. -650 0 |a Humorists, American |y 19th century |v Correspondence. -655 7 |a Electronic books. |2 local -7102 |a Bancroft Library. |b Mark Twain Project. -7102 |a NetLibrary, Inc. -8564 |3 Bibliographic record display |u http://www.netLibrary.com/urlapi.asp?action=summary&v=1&bookid=100194 |z An electronic book accessible through the World Wide Web; click for information -CAT |a NCRD |b 20 |c 20040224 -NCO |a I -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST8 |0 HOL |1 FSU60-002178151 |n 8 |a FTaSU |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -LOC8 |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -SYS 002042593 - -FMT BK -LDR 00000nam 2200373Ia 4500 -006 m d -007 cr cnu|||unuuu -008 031127s2003 cau s 000|i eng d -020 |a 0520900987 (electronic bk.) -035 |a (OCoLC)53798432 -0359 |a ALU9406 |b FS -TKR |a (Source)B0011135- 95 -TKR |a (FTaSU)NETLIBY20040302 -OWN |a FS -040 |a N$T |c N$T -05014 |a PS1331 |b .A4 2003eb -08214 |a 818.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24010 |a Correspondence. |k Selections -24510 |a Mark Twain's letters 1876-1880. |n Volume 1, |p 1876 |h [electronic resource] / |c edited by the Mark Twain Project. -250 |a Electronic ed. -260 |a Berkeley, Calif. : |b Published for the University of California Press by the Mark Twain Project of the Bancroft Library, |c 2003. -538 |a Mode of access: World Wide Web. -506 |a Made available through NetLibrary; access may be limited to NetLibrary affiliated libraries. -500 |a Title from ebook title screen. -60010 |a Twain, Mark, |d 1835-1910 |v Correspondence. -650 0 |a Authors, American |y 19th century |v Correspondence. -650 0 |a Humorists, American |y 19th century |v Correspondence. -655 7 |a Electronic books. |2 local -7102 |a Bancroft Library. |b Mark Twain Project. -7102 |a NetLibrary, Inc. -7102 |a NetLibrary, Inc. -8564 |3 Bibliographic record display |u http://www.netLibrary.com/urlapi.asp?action=summary&v=1&bookid=100193 |z An electronic book accessible through the World Wide Web; click for information -CAT |a NCRD |b 20 |c 20040224 -NCO |a I -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST8 |0 HOL |1 FSU60-002178150 |n 8 |a FTaSU |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -LOC8 |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -SYS 002042592 - -FMT BK -LDR 00000nam 2200361Ia 4500 -006 m d -007 cr cnu|||unuuu -008 031202s2003 cau s 000|i eng d -020 |a 0520901010 (electronic bk.) -035 |a (OCoLC)53817958 -0359 |a ALU9412 |b FS -TKR |a (Source)B0011135- 101 -TKR |a (FTaSU)NETLIBY20040302 -OWN |a FS -040 |a N$T |c N$T -05014 |a PS1331 |b .A4 2003eb -08214 |a 818.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24010 |a Correspondence. |k Selections -24510 |a Mark Twain's letters 1876-1880. |n Volume 4, |p 1879 |h [electronic resource] / |c edited by the Mark Twain Project. -250 |a Electronic ed. -260 |a Berkeley, Calif. : |b Published for the University of California Press by the Mark Twain Project of the Bancroft Library, |c 2003. -538 |a Mode of access: World Wide Web. -506 |a Made available through NetLibrary; access may be limited to NetLibrary affiliated libraries. -500 |a Title from ebook title screen. -60010 |a Twain, Mark, |d 1835-1910 |v Correspondence. -650 0 |a Authors, American |y 19th century |v Correspondence. -650 0 |a Humorists, American |y 19th century |v Correspondence. -655 7 |a Electronic books. |2 local -7102 |a Bancroft Library. |b Mark Twain Project. -7102 |a NetLibrary, Inc. -8564 |3 Bibliographic record display |u http://www.netLibrary.com/urlapi.asp?action=summary&v=1&bookid=100196 |z An electronic book accessible through the World Wide Web; click for information -CAT |a NCRD |b 20 |c 20040224 -NCO |a I -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST8 |0 HOL |1 FSU60-002178156 |n 8 |a FTaSU |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -LOC8 |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -SYS 002042598 - - - - Florida State University - Library Staff diff --git a/tags/rel-1.5/test/batch.xml b/tags/rel-1.5/test/batch.xml deleted file mode 100644 index b09773a..0000000 --- a/tags/rel-1.5/test/batch.xml +++ /dev/null @@ -1,157 +0,0 @@ - - - - - 00925njm 22002777a 4500 - 5637241 - DLC - 19920826084036.0 - sdubumennmplu - 910926s1957 nyuuun eng - - 91758335 - - - 1259 - Atlantic - - - DLC - DLC - - - Atlantic 1259 - - - The Great Ray Charles - [sound recording]. - - - New York, N.Y. : - Atlantic, - [1957?] - - - 1 sound disc : - analog, 33 1/3 rpm ; - 12 in. - - - Ray Charles, piano & celeste. - - - The Ray -- My melancholy baby -- Black coffee -- There's no you -- Doodlin' -- Sweet sixteen bars -- I surrender dear -- Undecided. - - - Brief record. - - - Jazz - 1951-1960. - - - Piano with jazz ensemble. - - - Charles, Ray, - 1930- - prf - - - - 01832cmma 2200349 a 4500 - 12149120 - 20001005175443.0 - cr ||| - 000407m19949999dcu g m eng d - - 0 - ibc - copycat - 1 - ncip - 20 - y-gencompf - - - undetermined - web preservation project (wpp) - - - vb07 (stars done) 08-19-00 to HLCD lk00; AA3s lk29 received for subject Aug 25, 2000; to DEWEY 08-25-00; aa11 08-28-00 - - - 00530046 - - - (OCoLC)ocm44279786 - - - IEU - IEU - N@F - DLC - - - lccopycat - - - n-us-dc - n-us--- - - - F204.W5 - - - 975.3 - 13 - - - The White House - [computer file]. - - - Computer data. - - - Washington, D.C. : - White House Web Team, - 1994- - - - Mode of access: Internet. - - - Title from home page as viewed on Aug. 19, 2000. - - - Features the White House. Highlights the Executive Office of the President, which includes senior policy advisors and offices responsible for the President's correspondence and communications, the Office of the Vice President, and the Office of the First Lady. Posts contact information via mailing address, telephone and fax numbers, and e-mail. Contains the Interactive Citizens' Handbook with information on health, travel and tourism, education and training, and housing. Provides a tour and the history of the White House. Links to White House for Kids. - - - White House (Washington, D.C.) - - - United States. - Executive Office of the President. - - - United States. - Office of the Vice President. - - - United States. - Office of the First Lady. - - - White House Web Team. - - - http://www.whitehouse.gov - - - http://lcweb.loc.gov/staff/wpp/whitehouse.html - Web site archive - - - diff --git a/tags/rel-1.5/test/encode.py b/tags/rel-1.5/test/encode.py deleted file mode 100644 index 27e0c76..0000000 --- a/tags/rel-1.5/test/encode.py +++ /dev/null @@ -1,25 +0,0 @@ -import util -from pymarc import MARCReader, Record, Field -import unittest -import os - -class Encode( unittest.TestCase ): - - def test_encode_decode( self ): - # get raw data from file - original = file( 'test/one.dat' ).read() - # create a record object for the file - reader = MARCReader(file('test/one.dat')) - record = reader.next() - # make sure original data is the same as - # the record encoded as MARC - raw = record.asMARC21() - self.assertEqual( original, raw ) - -def suite(): - suite = unittest.makeSuite( Encode, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - diff --git a/tags/rel-1.5/test/field.py b/tags/rel-1.5/test/field.py deleted file mode 100644 index e82aaee..0000000 --- a/tags/rel-1.5/test/field.py +++ /dev/null @@ -1,103 +0,0 @@ -import util -import unittest -from pymarc.record import Record, Field - -class FieldTest( unittest.TestCase ): - - def setUp( self ): - self.field = Field( - tag = '245', - indicators = [ 0, 1 ], - subfields = [ - 'a', 'Huckleberry Finn: ', - 'b', 'An American Odyssey' - ] - ) - - self.controlfield = Field( - tag = '008', - data = '831227m19799999nyu ||| | ger ' - ) - - self.subjectfield = Field( - tag = '650', - indicators = [' ', '0'], - subfields = [ - 'a', 'Python (Computer program language)', - 'v', 'Poetry.' - ] - ) - - def test_string( self ): - self.assertEquals( str(self.field), - '=245 01$aHuckleberry Finn: $bAn American Odyssey') - - def test_controlfield_string( self ): - self.assertEquals( str(self.controlfield), - r'=008 831227m19799999nyu\\\\\\\\\\\|||\|\ger\\') - - def test_indicators( self ): - assert self.field.indicator1 is 0 - self.assertEqual( self.field.indicator2, 1 ) - - def test_subfields_created( self ): - subfields = self.field.subfields - self.assertEqual( len( subfields ), 4 ) - - def test_subfield_short( self ): - self.assertEqual( self.field['a'], 'Huckleberry Finn: ' ) - self.assertEqual( self.field['z'], None ) - - def test_subfields( self ): - self.assertEqual( self.field.getSubfields( 'a' ), - ['Huckleberry Finn: '] ) - self.assertEqual( self.subjectfield.getSubfields( 'a' ), - ['Python (Computer program language)']) - - def test_subfields_multi( self ): - self.assertEqual( self.field.getSubfields( 'a','b' ), - ['Huckleberry Finn: ', 'An American Odyssey' ] ) - self.assertEqual( self.subjectfield.getSubfields( 'a','v' ), - ['Python (Computer program language)', 'Poetry.' ] ) - - def test_encode( self ): - self.field.asMARC21() - - def test_iterator( self ): - string = "" - for subfield in self.field: - string += subfield[0] - string += subfield[1] - self.assertEquals( string, "aHuckleberry Finn: bAn American Odyssey" ) - - def test_value( self ): - self.assertEquals( self.field.value(), - 'Huckleberry Finn: An American Odyssey' ) - self.assertEquals( self.controlfield.value(), "831227m19799999nyu ||| | ger " ) - - def test_non_integer_tag( self ): - # make sure this doesn't throw an exception - f = Field( tag="3 0", indicators=[0,1], subfields=['a', 'foo'] ) - - def test_add_subfield( self ): - f = Field( tag="245", indicators=[0,1], subfields=['a', 'foo'] ) - f.addSubfield('a','bar') - self.assertEquals( f.__str__(), '=245 01$afoo$abar') - - def test_is_subject_field( self ): - self.assertEqual( self.subjectfield.isSubjectField(), True ) - self.assertEqual( self.field.isSubjectField(), False ) - - def test_format_field( self ): - self.assertEqual( self.subjectfield.formatField(), - 'Python (Computer program language) -- Poetry.' ) - self.assertEqual( self.field.formatField(), 'Huckleberry Finn: An American Odyssey' ) - -def suite(): - suite = unittest.makeSuite( FieldTest, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - - diff --git a/tags/rel-1.5/test/marc.dat b/tags/rel-1.5/test/marc.dat deleted file mode 100644 index 9c52c7d..0000000 --- a/tags/rel-1.5/test/marc.dat +++ /dev/null @@ -1 +0,0 @@ -01060cam 22002894a 45000010009000000050017000090080041000260350021000679060045000889250044001339550160001779550053003370100017003900200015004070400018004220420008004400500023004480820014004711000025004852450088005102600044005983000027006425040041006696500026007107000026007369850008007621177850420040816084925.0990802s2000 mau b 001 0 eng  a(DLC) 99043581 a0bvipcorignewd1eocipf19gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc05 to ja00 08-02-99; jf05 to subj. 08/02/99; jf11 to sl 08-03-99; jf25 08-05-99 to ddc; bk rec'd, to CIP ver. ps07 01-07-00; CIP ver jf05 to sl 04/05/00 aADDED COPIES: another copy to ASCD ps15 01-12-00 a 99043581  a020161622X aDLCcDLCdDLC apcc00aQA76.6b.H857 200000a005.12211 aHunt, Andrew,d1964-14aThe pragmatic programmer :bfrom journeyman to master /cAndrew Hunt, David Thomas. aReading, Mass :bAddison-Wesley,c2000. axxiv, 321 p. ;c24 cm. aIncludes bibliographical references. 0aComputer programming.1 aThomas, David,d1956- eGAP00979cam 2200241 a 45000010009000000050017000090080041000269060045000679250042001129550206001540100017003600200015003770400018003920500026004100820017004361000016004532450037004692500012005062600051005183000078005695040051006476500039006981251588220020923085341.0010827s2001 cc a b 001 0 eng  a7bcbccorigcopd2encipf20gy-gencatlg0 aacquireb2 shelf copyxpolicy default apb07 2001-08-27 to ASCDajf00 2001-08-31ajf00 2001-09-05;cjf03 2001-10-16 to Subj.djf01 2001-10-25 to slejf12 2001-11-23; jf12 to Dewey 11-23-01aaa20 2001-12-07; copy 2 added jf16 to BCCD 09-23-02 a 2001276084 a0596000855 aDLCcDLCdDLC00aQA76.73.P98bL88 200100a005.13/32211 aLutz, Mark.10aProgramming Python /cMark Lutz. a2nd ed. aBeijing :aSebastopol, CA :bO'Reilly,cc2001. axxxvii, 1255 p. :bill. ;c24 cm. +e1 computer optical disc (4 3/4 in.). aIncludes bibliographical references and index. 0aPython (Computer program language)00887cam 2200253 a 45000010009000000050017000090080041000269060045000679250044001129550151001560100017003070200015003240400018003390500027003570820017003841000016004012450051004172500012004682600040004803000035005205040020005556500039005757000019006141361051220040714135238.0040601s2004 caua 001 0 eng  a7bcbccorigcopd2encipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apv17 2004-06-01 Preprocessor to ASCDajf00 2004-06-03;cjf03 2004-06-24 to Subj.djf09 2004-06-28 to slejf12 2004-07-01 to Deweyaaa25 2004-07-14 a 2004273129 a0596002815 aDLCcDLCdDLC00aQA76.73.P98bL877 200400a005.13/32221 aLutz, Mark.10aLearning Python /cMark Lutz and David Ascher. a2nd ed. aSebastopol, CA :bO'Reilly,cc2004. axxvi, 591 p. :bill. ;c24 cm. aIncludes index. 0aPython (Computer program language)1 aAscher, David.01038cam 2200289 a 45000010009000000050017000090080041000269060045000679250042001129550167001540100017003210150015003380200015003530350023003680400023003910420014004140500026004280820017004542450065004712600039005363000027005755000048006025000020006506500039006707000020007097000019007291306994220030606071827.0030127s2002 cau 001 0 eng  a7bcbcccopycatd2encipf20gy-gencatlg0 aacquireb2 shelf copyxpolicy default aps04 2003-01-27 to ASCDajf00 2003-01-30cjf05 2003-01-30 to subj.djf09 2003-01-30 to slejf12 2003-02-03 to Deweyaaa20 2003-03-10ajg07 2003-06-06 copy 2 added a 2003268354 aGBA2-Y6761 a0596001673 a(OCoLC)ocm49044543 aUKMcUKMdCUSdDLC alccopycat00aQA76.73.P98bP95 200200a005.13/322100aPython cookbook /cedited by Alex Martelli and David Ascher. aSebastopol, CA :bO'Reilly,c2002. axxix, 574 p. ;c24 cm. a"Recipes from the Python community"--Cover. aIncludes index. 0aPython (Computer program language)1 aMartelli, Alex.1 aAscher, David.00759nam 22002295a 45000010009000000050017000090080041000260350022000679060045000899250044001349550020001780100017001980200015002150400013002300420008002431000021002512450068002722600084003402630009004243000012004339630084004451312796220030318153335.0030318s2003 inu 000 0 eng  a(DLC) 2003104024 a0bibccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2003-03-18 a 2003104024 a1592000738 aDLCcDLC apcc1 aDawson, Michael.10aPython programming for the absolute beginner /cMichael Dawson. aIndianapolis, IN :bPremier Press Inc., a division of Course Technology,c2003. a0306 ap.ccm. aMargaret Bauer ; phone (812) 273-0561 ; fax null email margaret_bauer@yahoo.com01304cam 22002894a 45000010009000000050017000090080041000269060045000679250044001129550280001560100017004360200015004530400018004680420008004860500024004940820017005181000049005352450150005842460030007342600053007643000036008175040064008536500026009176500023009437000021009667000027009871256551420020718085037.0011016s2002 njua b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2001-10-16 to ASCD;cjf03 2001-10-17 to Subj.djf01 2001-10-25 to slejf25 2001-10-25 to Deweyaaa20 2001-10-26aps16 2002-01-11 bk rec'd, to CIP ver.ajf00 2002-01-16fjf04 2002-01-18 to S.L.gjf12 2002-01-18 to bccdajf00 2002-03-26; copy 2 added jf16 to BCCD 07-18-02 a 2001055410 a0130410659 aDLCcDLCdDLC apcc00aQA76.625b.T48 200200a005.2/762211 aThiruvathukal, George K.q(George Kuriakose)10aWeb programming :btechniques for integrating Python, Linux, Apache, and MySQL /cGeorge K. Thiruvathukal, John P. Shafaee, Thomas W. Christoper.14aWeb programming in Python aUpper Saddle River, NJ :bPrentice Hall,cc2002. axviii, 745 p. :bill. ;c24 cm. aIncludes bibliographical references (p. 723-725) and index. 0aInternet programming. 0aWeb sitesxDesign.1 aShafaee, John P.1 aChristopher, Thomas W.01023cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550168001560100017003240200035003410400018003760420008003940500026004020820016004281000029004442450067004732500012005402600051005523000035006035000020006386500039006586300021006977000027007181187737320010105091546.0991228s2000 cc a 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc01 12-28-99; jf03 01-04-00 ; jf11 to sl 1-4-00; jf12 to Dewey 01-06-00; aa05 01-10-00; CIP ver. pv08 to BCCD 05-01-00; copy 2 added jf16 to BCCD 01-05-01 a 99085714  a1565926218 (pbk. : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P98bH36 200000a005.2652211 aHammond, Markq(Mark J.)10aPython programming on Win32 /cMark Hammond and Andy Robinson. a1st ed. aBeijing ;aSebastopol, CA :bO'Reilly,cc2000. axvii, 652 p. :bill. ;c24 cm. aIncludes index. 0aPython (Computer program language)00aMicrosoft Win32.1 aRobinson, Andy,d1967-00867cam 22002538a 45000010009000000050017000090080041000269060045000679250044001129550127001560100017002830200015003000400013003150420008003280500026003360820017003621000019003792450080003982600047004782630009005253000011005346500039005459630029005841343237720031222144424.0031211s2003 oru 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc27 2003-12-11 RUSH to ASCDcjf07 2003-12-17 to subjectdjf09 2003-12-17 to slejp05 2003-12-18 to Deweyaaa20 2003-12-22 a 2003064366 a1887902996 aDLCcDLC apcc00aQA76.73.P98bZ45 200300a005.13/32221 aZelle, John M.10aPython programming :ban introduction to computer science /cJohn M. Zelle. aWilsonville, OR :bFranklin, Beedlec2003. a0312 ap. cm. 0aPython (Computer program language) aTom Sumner, 503-682-766801008cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550171001560100017003270200015003440400018003590420008003770500026003850820018004111000026004292450065004552600046005203000034005665000020006006500039006206500026006596500023006857000022007081222727720030509151148.0001109s2002 inua 001 0 eng  a7bcbccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 11-09-00apv11 2002-04-12 2 copies to ASCDajf00 2002-04-18;cjf03 2002-08-20 to Subj.djf09 2002-08-21 to slejf25 2002-09-10 2 copies to Deweyaaa05 2002-10-04 a 00110884  a0735710902 aDLCcDLCdDLC apcc00aQA76.73.P98bH65 200200a005.2/7622211 aHolden, Steve,d1950-10aPython Web programming /cSteve Holden [with David Beazley]. aIndianapolis, Ind. :bNew Riders,cc2002. axxi, 691 p. :bill. ;c23 cm. aIncludes index. 0aPython (Computer program language) 0aInternet programming. 0aWeb sitesxDesign.1 aBeazley, David M.01049cam 22002534a 45000010009000000050017000090080041000269060045000679250044001129550148001560100017003040200015003210400018003360420008003540500026003620820017003881000018004052450047004232600052004703000066005225040051005885380117006396500039007561216916820010522141328.0000911s2000 nju b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc16 09-11-00; jf02 09-12-00 ; jf11 to sl 9-12-00; jf12 to Dewey 09-14-00; aa05 09-14-00; CIP Ver. jf02 05-11-01; jf12 to BCCD 05-22-01 a 00047856  a0130260363 aDLCcDLCdDLC apcc00aQA76.73.P98bC48 200100a005.13/32211 aChun, Wesley.10aCore python programming /cWesley J. Chun. aUpper Saddle River, NJ :bPrentice Hall,c2001. axxix, 771 p. ;c24 cm. +e1 computer optical disc (4 3/4 in.) aIncludes bibliographical references and index. aSystem requirements for accompanying computer disc: Windows 9x/Me/NT/2000; a Web brouser; Macintosh; UNIX/Linux. 0aPython (Computer program language)00948cam 22002654a 45000010009000000050017000090080041000269060045000679250044001129550133001560100017002890200015003060400018003210420008003390500026003470820017003731000021003902450055004112600038004663000036005045040051005406500039005916500036006306300016006661213218820010817152505.0000804s2000 ctua b 001 0 eng  a7bcbccorignewd2encipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pb05 08-04-00;jfoo 08-08-00;cjf03 2001-07-18 to Subj.djf02 2001-07-19 to slejf25 2001-07-31 to Deweyaaa20 2001-08-17 a 00697831  a1884777813 aDLCcDLCdDLC apcc00aQA76.73.P98bG73 200000a005.13/32211 aGrayson, John E.10aPython and Tkinter programming /cJohn E. Grayson. aGreenwich, CT :bManning,cc2000. axxiii, 658 p. :bill. ;c24 cm. aIncludes bibliographical references and index. 0aPython (Computer program language) 0aTcl (Computer program language)00aTk toolkit.00767nam 22002295a 45000010009000000050017000090080041000260350022000679060045000899250044001349550020001780100017001980200015002150400013002300420008002432450081002512600079003322630009004113000012004204400021004329630084004531337832520031020153106.0031020s2003 inu 000 0 eng  a(DLC) 2003114351 a0bibccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc10 2003-10-20 a 2003114351 a1592000770 aDLCcDLC apcc00aGame programming with Python, Lua, and Ruby /c[edited by] Estelle Manticas. aIndianapolis, IN :bPremier Press, a Division of Course Technology,c2003. a0311 ap.ccm. aGame development aMargaret Bauer ; phone (812) 273-0561 ; fax null email margaret_bauer@yahoo.com01121cam 22002414a 45000010009000000050017000090080041000269060045000679250044001129550362001560100017005180200015005350400018005500420008005680500026005760820017006021000027006192450058006462600052007043000033007565040051007896500039008401256552920030227150222.0011016s2002 njua b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2001-10-16 to ASCD;cjf05 2001-10-17 to subj.djf04 2001-10-17 to S.L.ejf25 2001-10-25 to Deweyaaa20 2001-10-26aps11 2002-01-15 bk rec'd, to CIP ver.fjp07 2002-02-13ajp00 2002-03-08gjp85 2002-03-08 to BCCD; copy 2 added jf16 to BCCD 07-18-02ajf00 2003-01-29ajf07 2003-02-27 somehow copy 1 got back into the CIP ver. stream (handed to acting TL) a 2001055411 a0130409561 aDLCcDLCdDLC apcc00aQA76.73.P98bC47 200200a005.13/32211 aChristopher, Thomas W.10aPython programming patterns /cThomas W. Christopher. aUpper Saddle River, NJ :bPrentice Hall,c2002. axix 538 p. :bill. ;c24 cm. aIncludes bibliographical references and index. 0aPython (Computer program language)01062cam 22002778a 45000010009000000050017000090080041000269060045000679250044001129550120001560100017002760200028002930400013003210420008003340500026003420820018003681000024003862450134004102600041005442630009005853000011005946500039006056500037006446500039006819630064007201275256420020426115101.0020424s2002 mau 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc21 2002-04-24 to ASCDcjf05 2002-04-25 to subj.djf09 2002-04-25 to slejf25 2002-04-26 to Deweyaaa20 2002-04-26 a 2002066565 a0201616165 (alk. paper) aDLCcDLC apcc00aQA76.73.P98bH54 200200a005.2/7622211 aHightower, Richard.10aPython programming with the Java class libraries :ba tutorial for building Web and Enterprise applications /cRichard Hightower. aBoston, MA :bAddison-Wesley,c2002. a0207 ap. cm. 0aPython (Computer program language) 0aJava (Computer program language) 0aApplication softwarexDevelopment. aMarilyn Rash, 617-848-6509; email: timothy.nicholls@awl.com01012cam 22002294a 45000010009000000050017000090080041000269060045000679250044001129550192001560100017003480200028003650400018003930420008004110500026004190820017004451000017004622450151004792600042006303000071006726500039007431216723920010608101527.0000908s2001 mau b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc21 09-08-00;jf05 (desc) 09/08/00 ; jf11 to sl 9-11-00; jf12 to Dewey 09-12-00;aa03 9-12-00;CIP ver jf05 to sl 01/11/01; jf12 to BCCD 02-01-01; copy 2 added jf16 to BCCD 04-24-01 a 00046921  a0201709384 (alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P48bG38 200100a005.13/32211 aGauld, Alan.10aLearn to program using Python :ba tutorial for hobbyists, self-starters, and all who want to learn the art of computer programming /cAlan Gauld. aReading, MA :bAddison-Wesley,c2001. axii, 270 p. ;c24 cm.e+ 1 computer laser optical disc (4 3/4 in.) 0aPython (Computer program language)00935cam 22002534a 450000100070000000500170000700800410002403500210006590600450008692500440013195501480017501000170032302000220034004000180036204200080038005000260038808200170041410000160043124500610044726000390050830000750054765000390062270000200066120525620000830103214.0990629s2000 caua 001 0 eng  9(DLC) 99065006 a7bcbccorignewd2eopcnf19gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apn08/e-pcn 06-29-99; to ASCD pb02 06-10-00; jf00 06-13-00; jf03 08-17-00 ; jf11 to sl 8-22-00; jf25 2 copies to Dewey 08-24-00; aa19 08-30-2000 a 99065006  a0761523340 (pbk.) aDLCcDLCdDLC apcc00aQA76.73.P98bA48 199900a005.13/32211 aAltom, Tim.10aProgramming with Python /cTim Altom with Mitch Chapman. aRocklin, CA :bPrima Tech,cc1999. axxxiv, 372 p. :bill. ;c24 cm. +e1 computer optical disc (4 3/4 in.) 0aPython (Computer program language)1 aChapman, Mitch.01214cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550202001560100017003580200047003750400018004220420008004400500024004480820017004721000019004892450079005082600051005873000058006386500026006966500048007226500040007706500049008108560077008591328439520040226131230.0030722s2004 maua 001 0 eng  a7bcbccorignewd1eecipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ajf05 2003-07-22cjf05 2003-07-22 to subj.djf09 2003-07-22 to slejf12 2003-07-23 to Deweyaaa20 2003-07-29ajf00 2004-01-29fjf07 2004-02-02ejf12 2004-02-03 to BCCDajf16 2004-02-26 copy2 to BCCD a 2003016400 a1584502681 (Pbk. with CD-ROM : alk. paper) aDLCcDLCdDLC apcc00aQA76.625b.J66 200400a005.2/762221 aJones, M. Tim.10aBSD Sockets programming from a multi-language perspective /cM. Tim Jones. aHingham, Mass. :bCharles River Media,cc2004. axix, 444 p. :bill. ;c24 cm. +e1 CD-ROM (4 3/4 in.) 0aInternet programming. 0aComputer networksxDesign and construction. 0aInternetworking (Telecommunication) 0aProgramming languages (Electronic computers)413Table of contentsuhttp://www.loc.gov/catdir/toc/ecip047/2003016400.html01113cam 2200277 a 4500001000800000005001700008008004100025035002100066906004500087955011600132010001700248020003300265040001800298050002300316082001600339245009800355260004600453300003300499440004900532504006400581650005100645650003600696650002300732700001800755991006200773159816719981112152315.2940902s1995 maua b 001 0 eng  9(DLC) 94034264 a7bcbccorignewd1eocipf19gy-gencatlg apc18 to ja00 09-02-94; jf06 to subj 09-06-94; jf11 to sl 09-06-94; jf12 09-06-94 to ddc; CIP ver. jc03 11-23-94 a 94034264  a0201633612 (acid-free paper) aDLCcDLCdDLC00aQA76.64b.D47 199500a005.1/222000aDesign patterns :belements of reusable object-oriented software /cErich Gamma ... [et al.]. aReading, Mass. :bAddison-Wesley,cc1995. axv, 395 p. :bill. ;c25 cm. 0aAddison-Wesley professional computing series aIncludes bibliographical references (p. 375-381) and index. 0aObject-oriented programming (Computer science) 0aComputer softwarexReusability. 0aSoftware patterns.1 aGamma, Erich. bc-GenCollhQA76.64i.D47 1995p00011185514tCopy 1wBOOKS01233cam 2200289 a 45000010009000000050017000090080041000269060045000679250044001129550226001560100017003820200034003990400013004330500024004460820014004702450065004842460015005492500012005642600043005763000021006195000111006405040068007516500026008196500025008457000022008707000051008921237004420020812080859.0010405s2001 mau b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc20 to ja00 04-05-01; jp07 04-11-01 sent to sl;jp85 to Dewey 04-19-01; aa20 04-20-01aps13 2001-08-16 bk rec'd, to CIP ver.fjf07 2001-08-20ajf00 2001-08-20gjf12 2001-08-23 to bccdajf01 2001-09-13 copy 2 added to BCCD a 2001031277 a0262032937 (hc. : alk. paper) aDLCcDLC00aQA76.6b.I5858 200100a005.122100aIntroduction to algorithms /cThomas H. Cormen ... [et al.].30aAlgorithms a2nd ed. aCambridge, Mass. :bMIT Press,cc2001. axxi, 1180 p. cm. aRev. ed. of: Introduction to algorithms / Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest. c1990. aIncludes bibliographical references (p. [1127]-1130) and index. 0aComputer programming. 0aComputer algorithms.1 aCormen, Thomas H.1 aCormen, Thomas H.tIntroduction to algorithms.01009pam 2200265 a 4500001000800000005001700008008004100025035002100066906004500087955011600132010001700248020002200265040001800287050002600305082001700331100001800348245003700366260005300403300003500456440005200491500002700543504006400570650004400634991006500678303540919960425075058.2951006s1996 njua b 001 0 eng  9(DLC) 95045017 a7bcbccorignewd1eocipf19gy-gencatlg apc17 RUSH to ja00 10-06-95;jf05 to subj. 10/06/95; jf04 to S.L. 10-06-95; jf14 10-10-95; CIP ver. jk14 04-22-96 a 95045017  a0133708756 (pbk.) aDLCcDLCdDLC00aQA76.73.C28bG69 199600a005.13/32201 aGraham, Paul.10aANSI Common Lisp /cPaul Graham. aEnglewood Cliffs, N.J. :bPrentice Hall,cc1996. axiii, 432 p. :bill. ;c23 cm. 0aPrentice Hall series in artificial intelligence a"An Alan R. Apt book." aIncludes bibliographical references (p. 401-414) and index. 0aCOMMON LISP (Computer program language) bc-GenCollhQA76.73.C28iG69 1996p00034751468tCopy 1wBOOKS \ No newline at end of file diff --git a/tags/rel-1.5/test/marc8.py b/tags/rel-1.5/test/marc8.py deleted file mode 100644 index ed09748..0000000 --- a/tags/rel-1.5/test/marc8.py +++ /dev/null @@ -1,20 +0,0 @@ -from pymarc import marc8_to_unicode -from unittest import TestCase - -class MARC8Test(TestCase): - - def test_marc8_to_unicode(self): - marc8_file = file('test/test_marc8.txt') - utf8_file = file('test/test_utf8.txt') - count = 0 - - while True: - marc8 = marc8_file.readline().strip("\n") - utf8 = utf8_file.readline().strip("\n") - if marc8 == '' or utf8 == '': - break - count += 1 - self.assertEquals(marc8_to_unicode(marc8).encode('utf8'), utf8) - - self.assertEquals(count, 1514) - diff --git a/tags/rel-1.5/test/one.dat b/tags/rel-1.5/test/one.dat deleted file mode 100644 index a43cf54..0000000 --- a/tags/rel-1.5/test/one.dat +++ /dev/null @@ -1 +0,0 @@ -00755cam 22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500fol05731351 IMchF20000613133448.0000107s2000 nyua 001 0 eng  a 00020737  a0471383147 (paper/cd-rom : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P22bM33 200000a005.13/32211 aMartinsson, Tobias,d1976-10aActivePerl with ASP and ADO /cTobias Martinsson. aNew York :bJohn Wiley & Sons,c2000. axxi, 289 p. :bill. ;c23 cm. +e1 computer laser disc (4 3/4 in.) a"Wiley Computer Publishing." 0aPerl (Computer program language)00aActive server pages.00aActiveX. \ No newline at end of file diff --git a/tags/rel-1.5/test/reader.py b/tags/rel-1.5/test/reader.py deleted file mode 100644 index 52bf586..0000000 --- a/tags/rel-1.5/test/reader.py +++ /dev/null @@ -1,45 +0,0 @@ -import util -import unittest -import pymarc -import re - -class MARCReaderFileTest( unittest.TestCase ): - """ - Tests for the pymarc.MARCReader class which provides iterator - based access to a MARC file. - """ - - def setUp( self ): - self.reader = pymarc.MARCReader(file('test/test.dat')) - - def test_iterator( self ): - count = 0 - for record in self.reader: - count += 1 - self.assertEquals(count, 10, 'found expected amt of MARC21 records') - - def test_string( self ): - ## basic test of stringification - startsWithLeader = re.compile( "^=LDR" ) - hasNumericTag = re.compile( "\n=\d\d\d " ) - for record in self.reader: - text = str(record) - self.failUnless( startsWithLeader.search(text), 'got leader') - self.failUnless(hasNumericTag.search(text), 'got a tag') - -class MARCReaderStringTest(MARCReaderFileTest): - - def setUp(self): - raw = file('test/test.dat').read() - self.reader = pymarc.reader.MARCReader(raw) - - # inherit same tests from MARCReaderTestFile - -def suite(): - fileSuite = unittest.makeSuite(MARCReaderFileTest, 'test') - stringSuite = unittest.makeSuite(MARCReaderStringTest, 'test') - suite = unittest.TestSuite((fileSuite, stringSuite)) - return suite - -if __name__ == "__main__": - unittest.main() diff --git a/tags/rel-1.5/test/record.py b/tags/rel-1.5/test/record.py deleted file mode 100644 index 331e1a1..0000000 --- a/tags/rel-1.5/test/record.py +++ /dev/null @@ -1,178 +0,0 @@ -import util -import unittest - -from pymarc import Record, Field -from pymarc.exceptions import * - -class RecordTest( unittest.TestCase ): - - def test_add_field( self ): - record = Record() - field = Field( - tag = '245', - indicators = [ '1', '0' ], - data = [ 'a', 'Python', 'c', 'Guido' ] ) - record.addField( field ) - self.failUnless( field in record.fields, msg='found field' ) - - def test_quick_access( self ): - record = Record() - title = Field( - tag = '245', - indicators = [ '1', '0' ], - data = [ 'a', 'Python', 'c', 'Guido' ] ) - record.addField( title ) - self.assertEqual( record['245'], title, 'short access' ) - self.assertEqual( record['999'], None, 'short access with no field' ) - - def test_field_not_found( self ): - record = Record() - self.assertEquals( len( record.fields ), 0 ) - - def test_find( self ): - record = Record() - subject1 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Programming Language' ] ) - record.addField( subject1 ) - subject2 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Object Oriented' ] ) - record.addField( subject2 ) - found = record.getFields( '650' ) - self.assertEqual( found[0], subject1, 'getFields() item 1' ) - self.assertEqual( found[0], subject1, 'getFields() item 2' ) - found = record.getFields() - self.assertEqual(len(found), 2, 'getFields() with no tag') - - def test_multi_find( self ): - record = Record() - subject1 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Programming Language' ] ) - record.addField( subject1 ) - subject2 = Field( - tag = '651', - indicators = [ '', '0' ], - data = [ 'a', 'Object Oriented' ] ) - record.addField( subject2 ) - found = record.getFields( '650', '651' ) - self.assertEquals( len(found), 2 ) - - def test_bad_leader( self ): - record = Record() - self.failUnlessRaises( RecordLeaderInvalid, - record.decodeMARC, 'foo' ) - - def test_bad_base_address( self ): - record = Record() - self.failUnlessRaises( BaseAddressInvalid, - record.decodeMARC, '00695cam 2200241Ia 45x00' ) - - def test_title( self ): - record = Record() - self.assertEquals( record.title(), None ) - record.addField( Field( '245', [0,1], - subfields=[ 'a', "Foo :", 'b', 'bar' ] ) ) - self.assertEquals( record.title(), 'Foo :bar' ) - - record = Record() - record.addField( Field( '245', [0,1], - subfields=[ 'a', "Farghin" ] ) ) - self.assertEquals( record.title(), "Farghin" ) - - def test_isbn( self ): - record = Record() - self.assertEquals( record.isbn(), None ) - record.addField( Field( '020', [0,1], subfields=['a', '123456789' ] ) ) - self.assertEquals( record.isbn(), '123456789' ) - - def test_author( self ): - record = Record() - self.assertEquals( record.author(), None) - record.addField( Field( '100', [1,0], subfields=['a', 'Bletch, Foobie,', 'd', '1979-1981.'] ) ) - self.assertEquals( record.author(), 'Bletch, Foobie, 1979-1981.') - - record = Record() - record.addField( Field( '130', [0,' '], subfields=['a', 'Bible.', 'l', 'Python.'] ) ) - self.assertEquals( record.author(), None) - - def test_uniformtitle( self ): - record = Record() - self.assertEquals( record.uniformtitle(), None ) - record.addField( Field( '130', [0,' '], - subfields=[ 'a', "Tosefta.", 'l', "English.", 'f', "1977." ] ) ) - self.assertEquals( record.uniformtitle(), "Tosefta. English. 1977." ) - - record = Record() - record.addField( Field( '240', [1,4], - subfields=[ 'a', "The Pickwick papers.", 'l', "French." ] ) ) - self.assertEquals( record.uniformtitle(), "The Pickwick papers. French." ) - - def test_subjects( self ): - record = Record() - r1 = '=630 0\\$aTosefta.$lEnglish.$f1977.' - r2 = '=600 10$aLe Peu, Pepe.' - shlist = [r1, r2] - self.assertEquals( record.subjects(), [] ) - record.addField( Field( '630', [0,' '], - subfields=[ 'a', "Tosefta.", 'l', "English.", 'f', "1977." ] ) ) - record.addField( Field( '730', [0,' '], - subfields=[ 'a', "Tosefta.", 'l', "English.", 'f', "1977." ] ) ) - record.addField( Field( '600', [1,0], - subfields=[ 'a', "Le Peu, Pepe." ] ) ) - self.assertEquals( len( record.subjects() ), 2 ) - self.assertEquals( record.subjects()[0].__str__(), r1 ) - self.assertEquals( record.subjects()[1].__str__(), r2 ) - rshlist = [rsh.__str__() for rsh in record.subjects()] - self.assertEquals( shlist, rshlist ) - - def test_added_entries( self ): - record = Record() - ae1 = '=730 0\\$aTosefta.$lEnglish.$f1977.' - ae2 = '=700 10$aLe Peu, Pepe.' - aelist = [ae1, ae2] - self.assertEquals( record.addedentries(), [] ) - record.addField( Field( '730', [0,' '], - subfields=[ 'a', "Tosefta.", 'l', "English.", 'f', "1977." ] ) ) - record.addField( Field( '700', [1,0], - subfields=[ 'a', "Le Peu, Pepe." ] ) ) - record.addField( Field( '245', [0,0], - subfields=[ 'a', "Le Peu's Tosefa." ] ) ) - self.assertEquals( len( record.addedentries() ), 2 ) - self.assertEquals( record.addedentries()[0].__str__(), ae1 ) - self.assertEquals( record.addedentries()[1].__str__(), ae2 ) - raelist = [rae.__str__() for rae in record.addedentries()] - self.assertEquals( aelist, raelist ) - - def test_location( self ): - record = Record() - loc1 = '=852 \\\\$aAmerican Institute of Physics.$bNiels Bohr Library and Archives.$eCollege Park, MD' - loc2 = '=852 01$aCtY$bMain$hLB201$i.M63' - loclist = [loc1, loc2] - self.assertEquals( record.location(), [] ) - record.addField( Field('040', [' ',' '], - subfields=[ 'a', 'DLC', 'c', 'DLC' ] ) ) - record.addField( Field('852', [' ',' '], - subfields=[ 'a', 'American Institute of Physics.', - 'b', 'Niels Bohr Library and Archives.', - 'e', 'College Park, MD' ] ) ) - record.addField( Field('852', [0,1], - subfields=['a', 'CtY', 'b', 'Main', 'h', 'LB201', 'i', '.M63'] ) ) - self.assertEquals( len( record.location() ), 2 ) - self.assertEquals( record.location()[0].__str__(), loc1 ) - self.assertEquals( record.location()[1].__str__(), loc2 ) - rloclist = [rloc.__str__() for rloc in record.location()] - self.assertEquals( loclist, rloclist ) - -def suite(): - suite = unittest.makeSuite( RecordTest, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - - diff --git a/tags/rel-1.5/test/test.dat b/tags/rel-1.5/test/test.dat deleted file mode 100644 index 68d6dad..0000000 --- a/tags/rel-1.5/test/test.dat +++ /dev/null @@ -1 +0,0 @@ -00755cam 22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500fol05731351 IMchF20000613133448.0000107s2000 nyua 001 0 eng  a 00020737  a0471383147 (paper/cd-rom : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P22bM33 200000a005.13/32211 aMartinsson, Tobias,d1976-10aActivePerl with ASP and ADO /cTobias Martinsson. aNew York :bJohn Wiley & Sons,c2000. axxi, 289 p. :bill. ;c23 cm. +e1 computer laser disc (4 3/4 in.) a"Wiley Computer Publishing." 0aPerl (Computer program language)00aActive server pages.00aActiveX.00647pam 2200241 a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001500161100002600176245006700202260003800269263000900307300001100316650003700327650002500364700001600389fol05754809 IMchF20000601115601.0000203s2000 mau 001 0 eng  a 00022023  a1565926994 aDLCcDLCdDLC apcc00aQA76.73.P22bD47 200000a005.742211 aDescartes, Alligator.10aProgramming the Perl DBI /cAlligator Descartes and Tim Bunce. aCmabridge, MA :bO'Reilly,c2000. a1111 ap. cm. 0aPerl (Computer program language) 0aDatabase management.1 aBunce, Tim.00605cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077040001800094042000800112050002700120082001700147100002100164245005500185260004500240300002600285504005100311650003700362fol05843555 IMchF20000525142739.0000318s1999 cau b 001 0 eng  a 00501349  aDLCcDLCdDLC apcc00aQA76.73.P22bB763 199900a005.13/32211 aBrown, Martin C.10aPerl :bprogrammer's reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axix, 380 p. ;c22 cm. aIncludes bibliographical references and index. 0aPerl (Computer program language)00579cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002700135082001700162100002100179245005500200260004500255300003600300650003700336fol05843579 IMchF20000525142716.0000318s1999 caua 001 0 eng  a 00502116  a0072120002 aDLCcDLCdDLC apcc00aQA76.73.P22bB762 199900a005.13/32211 aBrown, Martin C.10aPerl :bthe complete reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axxxv, 1179 p. :bill. ;c24 cm. 0aPerl (Computer program language)00801nam 22002778a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001800156100002000174245008800194250003200282260004100314263000900355300001100364650003700375650003600412650002600448700002500474700002400499fol05848297 IMchF20000524125727.0000518s2000 mau 001 0 eng  a 00041664  a1565924193 aDLCcDLC apcc00aQA76.73.P22bG84 200000a005.2/7622211 aGuelich, Scott.10aCGI programming with Perl /cScott Guelich, Shishir Gundavaram & Gunther Birznieks. a2nd ed., expanded & updated aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language) 0aCGI (Computer network protocol) 0aInternet programming.1 aGundavaram, Shishir.1 aBirznieks, Gunther.00665nam 22002298a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002700130082001700157111005200174245008600226250001200312260004100324263000900365300001100374650005000385fol05865950 IMchF20000615103017.0000612s2000 mau 100 0 eng  a 00055759  a0596000138 aDLCcDLC apcc00aQA76.73.P22bP475 200000a005.13/32212 aPerl Conference 4.0d(2000 :cMonterey, Calif.)10aProceedings of the Perl Conference 4.0 :bJuly 17-20, 2000, Monterey, California. a1st ed. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)vCongresses.00579nam 22002178a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100002800173245006200201260004100263263000900304300001100313650003700324fol05865956 IMchF20000615102948.0000612s2000 mau 000 0 eng  a 00055770  a1565926099 aDLCcDLC apcc00aQA76.73.P22bB43 200000a005.13/32211 aBlank-Edelman, David N.10aPerl for system administration /cDavid N. Blank-Edelman. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)00661nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100001700173245006700190250001200257260004100269263000900310300001100319650003700330700002300367700001700390fol05865967 IMchF20000615102611.0000614s2000 mau 000 0 eng  a 00055799  a0596000278 aDLCcDLC apcc00aQA76.73.P22bW35 200000a005.13/32211 aWall, Larry.10aProgramming Perl /cLarry Wall, Tom Christiansen & Jon Orwant. a3rd ed. aCambridge, Mass. :bO'Reilly,c2000. a0007 ap. cm. 0aPerl (Computer program language)1 aChristiansen, Tom.1 aOrwant, Jon.00603cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001700161100003200178245006000210260005700270300003300327650003700360fol05872355 IMchF20000706095105.0000315s1999 njua 001 0 eng  a 00500678  a013020868X aDLCcDLCdDLC apcc00aQA76.73.P22bL69 199900a005.13/32211 aLowe, Vincentq(Vincent D.)10aPerl programmer's interactive workbook /cVincent Lowe. aUpper Saddle River, NJ :bPrentice Hall PTP,cc1999. axx, 633 p. :bill. ;c23 cm. 0aPerl (Computer program language)00696nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020002800094040001300122042000800135050002600143082001700169100002600186245004400212260005100256263000900307300001100316500002000327650003700347650001700384650004100401fol05882032 IMchF20000707091904.0000630s2000 cau 001 0 eng  a 00058174  a0764547291 (alk. paper) aDLCcDLC apcc00aQA76.73.P22bF64 200000a005.13/32212 aFoster-Johnson, Eric.10aCross-platform Perl /cEric F. Johnson. aFoster City, CA :bIDG Books Worldwide,c2000. a0009 ap. cm. aIncludes index. 0aPerl (Computer program language) 0aWeb servers. 0aCross-platform software development. \ No newline at end of file diff --git a/tags/rel-1.5/test/test_marc8.txt b/tags/rel-1.5/test/test_marc8.txt deleted file mode 100644 index d656f3f..0000000 --- a/tags/rel-1.5/test/test_marc8.txt +++ /dev/null @@ -1,1514 +0,0 @@ -(3YhOI,(B (3eMeO(B. -(3cja(B (3SbWJ(B (3GdedcjI(B (3aj(B (3eUQ?(B : -(3GdWHYI(B 1. -(3GdbGgQI(B : -$1!S+!#!'`X!_s(B. -$1!Os!0!!#!!A3'44(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!!!!m(B $1i$N(B $1!X$-SD(B $1!`;!0$!\g(B / -$1!D&!0a(B : -$1!X$-SD(B $1!`;!0$!\g(B, -$1!:g!D&(B $1!1:!0m(B, -$1!X$-SD(B $1!`;!0$!\g(B, -$1i%$i%.i%ji%9(B $1!BX!:`!5=(B : -$1!D&!0a(B : -$1!Tk!Xl(B $1!Tk!BX!:`(B $1!Y4!!L$(B $1!=>(B, -$1!Bk!0d(B $1i$Di$Ri$K(B $1i$+i$Xi$ii$:(B : -$1!WN!JH(B. -$1!D&!0a(B : -$1!X$-SD(B $1!`;!0$!\g(B, -$1!0-!L,(B $1i$N(B $1!X\(B : -$1!D&!0a(B : -$1!05!L$(B $1!:[!0!(B, -$1!X$-SD(B $1!`;!0$!\g(B, -$1!GzK\[(B $1!0!!9'(B, -$1!X$-SD(B $1!`;!0$!\g(B, -$1!TX!U}i!&i%7i%'i%$i%/i%9i%Ti%"i!&i%(i%ji%*i%Ci%H(B / -$1!Os(B 1$1!JH(B. -$1!D&!0a(B : -$1!D-!;S(B $1!TX!U}(B, -$1!]y'O@(B $1-1w!1W(B, -$1!D-!;S(B $1!TX!U}(B, -$1!15!0;!^U(B $1!_0!5=(B, -$1!X$-SD(B $1!`;!0$!\g(B $1!Y$(B : -$1!D&!0a(B : -$1!KG!0s(B $1!X\!0d!Y$(B $1!5+!CU(B ; -$1!X$-SD(B $1!`;!0$!\g(B, -(3THjdj,(B (3YHO(B (3GdQMef(B. -(3GdcdeI(B (3GdYQHjI(B : -[Saudi Arabia] : -(3cJGH(B (3GdTQb(B (3GdGhSW(B -(3ecGfI(B (3GdEHGVjI(B (3aj(B (3GdMVGQI(B (3GdESdGejI(B / -(3GdWHYI(B 1. -[(3GdbGgQI(B] : -$1!X$-SD(B $1!`;!0$!\g(B, -$1!:m!Ci(B $1!X$-SD(B $1!`;!0$!\g(B $1!3"!_A(B. -$1!WN!JH(B. -$1!D&!0a(B : -$1!X$-SD(B $1!`;!0$!\g(B $1!3"!_A(B. -$1!<7!V3(B $1!R;!0s!:M(B, -$1!;%i$7i$$(B $1'Rt(B : -$1!D&!0a(B : -$1!X$-SD(B $1!`;!0$!\g(B, -$1!X$-SD(B $1!`;!0$!\g(B, -$1!(B $1!RA!Tk(B $1'5+'CU(B ; -(3aQRGO,(B (3YHO(B (3GdMSjf(B. -(3GdefgL(B (3aj(B (3JGQjN(B (3GdCOH(B (3GdYQHj(B : -Tehran : -$1!8x(B $1!D3!Bu(B. -$1!G[!`[(B $1!C\!1W(B / -Kuala Lumpur : -$1!08!WX(B $1!3K!JH(B $1!Pn!3W(B ; -$1!:M!Cg(B, -$1!C{!<5(B $1!Bs'X<(B / -[Singapore] : -$1!:M!Cg(B, -(3LGFRI(B (3SdWGf(B (3GdYhjS(B (3GdKbGajI(B : -(3GdTGQbI(B : -(3efThQGJ(B (3GJMGO(B (3cJGH(B (3hGOHGA(B (3GdGeGQGJ(B -(3eDSSI(B (3SdWGf(B (3Hf(B (3Ydj(B (3GdYhjS(B (3GdKbGajI(B. -(3GJMGO(B (3cJGH(B (3hCOHGA(B (3GdEeGQGJ(B. -$1!By'4U!#!!F\!#!!7u!#!!1?!JU!#!'^i!Pn!#!!5#!#!!3*!#!!35'2f!#!'X}!@z!#!!4x!KH(B : -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -$1!5t(B $1!1a!04(B $1';@'[4(B $1!5w(B $1!0q(B $1!M"(B $1!@&'Rw(B $1'?n!5"(B / -[$1'^L!C%(B] : -$1!5t(B $1!1a!04(B, -$1!04!3((B $1!5@!D$(B $1!MI!9f(B. -$1!4c';2!(B $1!O2'43!;P(B. -$1'=*!X$(B $1'8t!Bo(B $1!T&!G4'4U(B $1!4c';2!.!Hu(B $1'T2(B $1!Na'CZ(B $1'YK!_z(B -$1!Os(B1$1!JH(B. -$1!4I!0a!!#!!7t!CU!`y(B $1!V+!#!!BK!It!#!!\S!CU!#!KN7!ON!#!!Y$!UN!#!!MB!]t!#!!P{!=<(B / -$1!BK!It!#!!\S!CU!#!KN7!ON!#!!Y$!UN!#!!MB!]t!#!!P{!=<(B -$1!7o'2>!#!!7t!CU!`y(B $1!V+!#!!BK!It!#!!\S!CU!#!KN7!ON!#!!Y$!UN!#!!MB!]t!#!!P{!=<(B -$1!Os(B1$1!JH(B. -$1!4I!0a!!#!!7t!CU!`y(B -$1!\l(B $1!F]!O$(B, -$1'`v#Nl(B : -$1!\l(B $1!F]!O$(B $1!`1'EN(B $1'XN'Y$!_A(B -$1!WN!JH(B. -[Singapore] : -1950$1oL(oL}!#!o]OoPpoJ6!#!oVi!#!o\eoIo!#!oR_o]J!#!oU~!#!oVj!#!oT"oOh!#!oW=oQX!#!oVi!#!oQaoIg!#!(B/ -$1oS!oV>!#!o[ZoQ=oT#!#!(B: -$1o\eoIo!#!o].oL}oR_!#!oVi!#!oW'!#!oVloT$(B ; -$1o].oL}oR_!#!oUaoInoS?!#!oJ6o]K!#!oUaoIn(B -$1o\e!#!o]soS[(B. -$1o\eoIo!#!oW=oT%!#!oPJo]?!#!oUaoInoVG(B. -$1!BK!It!#!!?V!G:!#!!C[!0n!#!!XR!Dc(B / -$1!C[!0n!#!!XR!Dc(B -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -"$1!Ci!CU!#!!B=!]t!#!!BK!It!#!!?V!G:!R0!#!!\S!8!!#!!3K!7u!#!!M"!#!i!T!1J!R_!#!!5w!#!!04!?u!#!!M^!;3!#!!XR!CU!#!!7e!C-!#!!C[!0n!#!!0T!4W!Dci!U!#!(B($1!PA!O(B $1!Df!:M(B, -$1!0!'_N(B $1!T5!Tx!`"(B / -[s.l.] : -$1!4l'U<(B $1!1?'4`(B $1!BX'5+(B. -$1!3i!E[!V0(B $1!D-!(B $1!X(B $1';7!1?(B $1'X8'3|(B $1':`'6>(B $1!1?!6-!_A(B -$1!WN!JH(B. -[Singapore] : -$1!Bg(B $1!DG!a)(B. - $1!;I(B $1!0e(B. -$1'R{(B $1K_p!C%(B $1!7z(B $1!6@!G!(B : -$1!;I(B $1!0e(B $1!N%!P.(B $1!;E'Xi(B -$1!WN!JH(B. -Singapore : -$1!=x'CU(B ; -$1!L}(B $1!U1(B. -$1!L}(B $1!U1(B $1!BM!BX'\O(B / -$1!WN!JH(B. -Singapore : -$1!Be!4&!8+(B $1!Be'U<(B $1!1?'2>(B $1'5+'CU(B -$1!Be!4&!8+(B $1!Be'U<(B $1!1?'2>(B $1!1?!6-!_A(B ; -$1'E*(B $1!>0(B, -$1!db(B $1!Be'U<(B $1!BX'8d(B $1'Y$(B $1!5#(B $1!4l'U<(B $1!BX':`(B / -$1!WN!JH(B. -Singapore : -$1!Be!4&!8+(B $1!Be'U<(B $1!1?'2>(B $1!1?!6-!_A(B ; -$1!5t(B $1!GE!<&(B. -$1'9$E7h(B $1!0d!Ky(B / -$1!WN!JH(B. -Singapore : -$1!5t(B $1!GE!<&(B $1!1?!6-(B ; -$1'_#(B $1!0;!_`(B, -$1!Nk!<5(B $1!9%!7y(B $1!6F'E](B $1'If!^v(B : -$1!04K7o(B $1!6F'E-(B $1'Kg!8W(B $1!5w(B $1!BX!4H(B $1!M"'YK'\Q(B -$1!WN!JH(B. -[Singapore] : -$1!T9!87'Qd(B $1!BX!JU'Xm(B / -[$1!T9!87'Qd(B. -$1!T9!87'Qd(B (China). -$1!T9!87'Qd(B (China). -$1!T9!87'Qd(B (China). -$1!04!7o(B $1!5.!0s(B $1!=3!P:(B $1!F*!5=(B $1!7t!Xi(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!(B : -$1!04!9*(B $1!FM!Bo(B $1!9%':`(B $1!04K7o(B $1!;F'BT(B $1!FM!Bo(B $1KN7!ON(B $1!04!=x(B $1'5+'CU(B -$1!\o-HE'3k!Bo(B $1!T&!G4!Bp(B (China) -$1'Kg(B $1!GB!(B $1!Bg!X7(B $1'Xl!`1(B $1!N7!ON(B / -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -$1!A)!P{(B $1!0=(B $1!D((B : -$1'_T!4c(B $1'Yl'Y~(B $1':`!^z(B $1!=3!DC(B 50$1!5t!'CZ(B. -$1!;&!43(B $1!U4!DU(B : -$1'7F!0s(B $1!N#'Y<(B $13BD!S,(B $1!M"(B $1'YK!_z(B -$1!Os(B1$1!JH(B. -$1!F''HW(B : -$1!3'!3((B $1-Fm!O|(B $1KN7!ON(B : -$1!Os(B1$1!JH(B. -$1'^L!Fw(B : -$1!3'!3((B $1!P'!KH(B $1'Y$'5+(B -$1'`N(B $1!1I'U<(B, -$1'\V'7U(B $1!Be!0-'Pp(B : -$1'=*!<5!E(B $1!Pn'Q1(B $1!M"(B $1!KH'Y$(B $1'T2(B $1';1'Zh(B -$1!Os(B1$1!JH(B. -$1'=*!<5(B : -$1'=*!<5(B (China) -$1!?p(B $1!\+(B -$1'V$(B $1!;{!G=(B. -$1!0"(B $1!=3'23(B. -$1'`.(B $1!@m'\D(B. -$1!;e!X$(B $1!5.!Nh!8@(B : -$1!M{!Oe(B $1!7z(B $1!0d(B $1!Nk(B $1!0=(B $1'^U(B -$1!Os(B1$1!JH(B. -$1'I1'_.!(B $1!CU!Pn(B -$1!K3(B $1K7o'QN(B, -$1!Cs(B $1!4&'E7(B. -$1'[4!K}(B $1!Ky!JU(B $1!@,EWF(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!!BX(B $1!N7!ON(B $1!Y$!BX(B; -$1!UZ!F#!1W(B, -$1'V5'(B $1o[loWloT#(B : -$1oT%(B $1o].oWn(B. -$1!F'(B $1!Bw!;x(B. -$1!Gn!2~(B $1!bb!;e(B $1!M"(B $1!S8'=e(B : -$1!@0';B(B $1!=w!<5(B -$1!Os(B2$1!JH(B. -$1'=*!<5(B : -$1'a_'KG(B $1!0=!Bk(B = -$1!=w!<5(B $1!7y'4U(B(China) -$1!=w!<5(B $1!7y'4U(B(China) -$1!4c(B $1'bV'[4(B. -$1!FF'[=(B $1!BA!G4(B $1'Wl!!.!>m(B $1'T2(B $1';1'Zh(B / -$1!Os(B1$1!JH(B. -$1'I&!4c(B : -$1!FH(B $1'I!'D&(B, -$1!0R(B $1'_T(sm(B. -$1'ZO(B $1'Xm!>#(B. -$1!FM!Bo(B $1!BX':`(B $1'Y$!O>(B / -$1!Os(B1$1!JH(B. -$1'I1'_.!!DN!Tx(B : -$1!87!!Y?(B $1!R!(B / -$1!Os(B1$1!JH(B. -$1!^L!C%(B : -$1!4"(B $1!BX!Gb(B, -Confucius. -$1!<:!0/(B $1!C!(B. -$1!4"(B $1!BX!Gb(B, -$1!UW(B $1!G@'\4(B, -$1!Rr!Ih(B $1!7y!!W&(B $1!G6!G%(B $1!M"(B $1!=Q!?b(B, $1'\4!WD(B $1'T2(B $1!@z'Wl(B $1KN7!ON(B / -$1!Os(B1$1!JH(B. -$1!0&!GW!#!FH(B. -$1!123BD(B $1!Ci'X0(B $1!>.!>m(B $1'Y$-J;(B $1!M"(B $1'KG!0s!>4(B $1!R]!;3(B / -$1!Os(B1$1!JH(B. -$1!0&!GW(B : -$1!04K7o(B $1!M"(B $1'KG!0s!>4(B $1'T2(B $1!0d!BX(B $1':`EWF(B $1'5+'CU(B -$1!7y!KH(B $1!1W!>E(B $1'T2(B $1'X)'3|(B $1!B(B, -$1'b^';C(B $1!TP!HG!LG(B, 2004 = -$1!Os(B1$1!JH(B. -$1!4I!0a!.!Hu(B $1!5='Y$(B / -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -"$1)JD!X$(B $1'(B $1'Z"!4)(B $1!3K!JH(B"--P. facing t.p. -$1!:j!0s(B $1!2F!X<(B $1!Z"!B\(B $1!5+!3U(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!4(B $1!<7!O5(B $1'T2(B $1!P'!KH(B = -$1!Os(B1$1!JH(B. -$1!4I!0a!(B / -$1!Os(B1$1!JH(B. -$1'^S!;(B $1!BX!4H(B $1KN7!ON(B $1'5+'CU(B -$1!04K7o(B $1'Yl!;'(B $1!Be'Yx(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!w!FM(B. -$1!a\!59'bV(B $1'4{!5=(B $1'T2(B $1!BX!4H(B $1':`EWF(B $1KN7'X='CZ(B -$1!a\!59'bV!5=(B $1!Be(B $1KN7!ON(B / -$1!a\!59'bV(B $1'4{!5=(B $1'T2(B $1!BX!4H(B $1':`EWF(B $1KN7'X='CZ(B $1'Y$!BX!_A(B -$1!Os(B1$1!JH(B. -$1!=2!5@!.!>m(B $1'T2(B $1'Wl!!_z(B / -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -$1!04!4c(B $1'Yl'Q<(B $1!9%':`(B $1'Yl!BA':`(B $1!4d!8r'bj(B $1';D'F(B, -$1!]>!C!!`y(B $1!5+!O>(B $1!WN!Q[(B / -$1!4I!0a(B $1!Os(B1$1!JH(B. -$1!4I!0a(B : -$1!_#(B $1!;#!>F(B $1!_A(B -$1'D&!4I(B $1!R\!<7'E-(B $1!8(B $1!1?!6-(B $1!Pa'\O(B -$1!Fw(B $1'^='U<(B. -$1!C[(B $1'U<(B. -$1!9%!7q(B $1!'CZ(B . -$1!4c!0a!(B, -$1!Tk!PV(B $1!_"!;6(B $1'Wl!(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1oJ;(B $1oMSoX+(B, -$1oIUoW=(B $1oI!oNnoQ,(B $1oRl(B $1oIDoW?oO/(B $1oX0oWt(B $1oJ(oW?(B $1oUaoIn(B / -$1oS!oV>(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1oYQ(B $1oS/oJ.(B. -OECD $1oJ6oUN(B $1oX)oPz(B $1oInoWI(B $1oVGoYe(B $1oVi(B $1oIooK_oQ,(B $1oS[oV9(B $1oUV(B $1oIZo\e(B $1oUaoIn(B / -$1oS!oV>(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1oJ;(B $1oW=oS](B. -$1o\voW=oQ,(B $1oRl(B $1oW'o[o(B $1oV-(B $1oQZoW/(B $1o\noI?(B $1oQ,oW?(B $1oUaoIn(B / -$1oS!oV>(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1oJ;(B $1oS[oX+(B, -$1oIUoPGoVG(B $1oI{oVk(B $1o\xoRl(B $1oVd(B $1oVSo\e(B $1o\voW=(B $1oInoW?(B $1oQ,oW?(B $1oUaoIn(B / -$1oS!oV>(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1!2?(B $1!1T!E7(B, -$1!2?(B $1!1T!E7(B $1!X4!YJ(B $1!:W!:M(B : -$1!WN!JH(B. -$1(;}!4I!Qd(B $1!Be!k(B $1!A&!88(B $1!M"(B $1!P.!`2(B -$1!Os(B1$1!JH(B. -$1!a)!H$(B : -$1!04!7o(B $1!3(!Kz!bo(B -$1!04!7o(B $1!7o!FM!bo(B -$1!5\(B $1!Hm!Ky(B. -$1!D$(B $1!VF(B $1!T2(B $1!BX!4H(B $1!9%!_z!5y(B / -$1!Os(B2$1!JH(B. -Carle Place, N.Y. : -$1i!T!MO!MHi!U!Pn!3W(B ; -$1!D$(B $1!VF(B, -$1!5t(B $1!@*!0d(B. -$1!Bu!Cd(B $1!a)!H$(B $1!_U!=Y!5=(B (1897-1945) / -$1!a)!H$(B : -$1!Cs(B $1!0w-U-(B. -$1!aq(B $1!?b!>.(B. -$1!3#!;l(B $1!;!!1J(B 50 $1!(B $1'Z=!4)(B $1!3K!JH(B." -$1!\s(B $1!RB(B, -$1!^L'=v(B : -$1!Os(B1$1!JH(B. -$1!a)!H$(B : -$1!04!7o(B $1!3(!Kz!bo(B -$1!04!7o(B $1!7o!FM!bo(B -$1!a)!H$i!&!BX!4Hi!&KN7!ON(B / -$1!a)!H$(B : -$1!5\(B $1!1e!_B(B. -$1!a,(B $1!2A!23(B. -$1!5d(B $1!9%!EN(B. -$1!0}(B $1!?n(B $1!BO!N_!]t(B / -$1!WN!JH(B. -Singapore : -$1!K3(B $1#6j!F'(B. -$1!:|(B $1!;F!C^(B. -$1!04!Bs(B $1'^i!Pn(B $1!8}'QN(B $1!\*!X+(B : -$1!5.:(L(B $1!>#!9'(B $13BD!A,(B $1'\W'CI(B $1'Pp!>'(B $1'Y$!BX!_A(B -$1!a)!H$(B $1!WN!JH(B. -$1!a)!H$(B : -$1!5.:(L(B $1!>#!9'(B, -$1!5.:(L(B $1!>#!9'(B $13BD!A,(B $1'\W'CI(B $1'Pp!>'(B $1'Y$!BX!_A(B $1'Q['[M(B $1!9f'6>'CZ(B. -$1KGa!:|(B $1!T+!IC(B $1![i!Aq(B $1!5=!B\(B / -$1!WN!JH!+4(B -$1!T+!4I!%(B $1!GW!J((B. -$1!04!U<(B $1!CZ!`y(B (Kobe-shi, Japan) -$1!K3(B $1!bt!]L(B. -$1!UV!UH(B $1!Iz'Ms(B / -1$1!JH(B. -$1!T+!4I!4!3[(B $1!04!7o(B / -$1!WN!JH(B. -$1(;}!4I!oS,(B. -$1oWIoS$(B $1oVi(B $1o]8oQ\(B $1oZpoM*(B $1oPu(B $1oUV(B : -$1oYHo[o(B. -$1oS!oV>oT#(B : -$1oV\(B $1oMGoWl(B, -(3Hdabjg,(B (3YHO(B (3Gddg(B (3Hf(B (3MSjf(B (3Hf(B (3YHO(B (3Gddg(B. -(3bhJ(B (3GdCdHGH(B (3ef(B (3eLGfj(B (3Lfj(B (3GdCdHGH(B / -(3JQje,(B (3MVQehJ(B : -(3Rcj,(B (3QeVGf(B (3NejS(B. -(3eaghe(B (3GdSff(B (3GdQHGfjI(B : -(3GdWHYI(B 1. -(3GdbGgQI(B : -(3gPG(B (3gh(B (3GdESdGe(B (3;(B -(3YeGQI,(B (3eMeO(B. -(3bQGAI(B (3GdfU(B (3GdOjfj(B : -(3GdWHYI(B 1. -(3GdbGgQI(B : -(3gPG(B (3gh(B (3GdESdGe(B (3;(B -(3fOhI(B (3GdSjQI(B (3GdfHhjI(B : -(3GdWHYI(B 1. -[Omdurman] : -(3efThQGJ(B (3GdeQcR(B (3;(B -(3EeGe,(B (3MeGOI(B. -(3eHGQc(B (3hGdENhGf(B / -(3GdWHYI(B (3GdYQHjI(B 1. -(3GdegfOSjf(B [Giza] : -$1!Be!YF(B $1!5.!BX(B $1![`!`S!Q|(B / -$1!WN!JH(B. -$1!T+!4I!'7q(B $1!5w(B $1'C-'^U(B -$1!Os(B1$1!JH(B. -$1!4I!0a!!X%(B = -$1!Os(B1$1!JH(B. -$1!4I!0a!!X%i!U'Q[!Q|(B $1!9f'6>'CZ(B. -$1!04K7o(B $1!Os!0Q(B $1'CI!5=(B $1'E_!DB'`y(B. -$1'`y!V+(B $1!FMK7o(B $1(;}'IC(B $1'E_!DB(B $1'4Q'Q[(B / -$1!FMK7o(B $1(;}'IC(B $1'E_!DB(B $1'4Q'Q[(B -$1(;}'IC(B $1'E_!DB(B $1'4Q'Q[(B -$1!Os(B1$1!JH(B. -$1!4I!0a!w(B, - $1!8{!Cr(B $1!9%(B,1966- -$1!?b!L$(B $1!c+!0!(B. -$1KF*!5=':`(B $1i$N(B $1i%]i%8i%7i%gi%Ji%ji%Fi%#(B : -$1!D&!0a(B : -$1!;e!'(B $1i$H(B $1i%+i%ji%-i%ei%ii%`(B $1!E9!\)(B / -$1!WN!JH(B. -$1!D&!0a(B : -$1!v3(B $1-1w!_B(B, -$1!35!Be(B $1!52!RW(B $1'[`!3,(B / -$1!52!RW(B $1'[`!3,(B -$1!D&!0a(B : -$1!0;!1a!L$(B $1!GZ(B, -$1i$3i$Hi$P!+5i$3i$Hi$P!+5i$3i$Hi$P(B / -$1!WN!JH(B. -$1!D&!0a(B : -$1!;E!D$(B $1!0!!T{(B, -$1i$@i$s!WZ(B : -$1!0!!T{(B $1!T&!Oy(B $1!59!_A(B -$1!D&!0a(B : -$1!GzK\[(B $1!4a!\g(B. -$1!;n!Ci(B $1!6<'Xm(B, -$1!]Z!!N_(B $1i$N(B $1!BX':`!+5!bu!T=i$9i$k(B $1!;*!Xf(B -$1!D&!0a(B : -$1!;E!;y(B $1!1W!9'(B, -$1KEa9Y?(B $1K7o'2>(B $1-?n!L5i$Ji$-(B $1!Bs!Ci(B / -$1!D&!0a(B : -$1KYJ9Z/(B $1!Be!Rq!Na(B. -$1!5@!L$(B $1!6a!]:(B, -$1!5@!L$(B $1!6a!]:(B : -$1KYK!Yf(B $1i$N(B $1!2-!KH(B -$1!D&!0a(B : -$1!Ul!;1(B $1!]:E=S(B, -$1!Cs(B $1!J((B, -$1!_'(B $1!WD!N#(B $1i$N(B $1KV1!WF(B $13BD!S,!Y$(B : -$1!WN!JH(B. -$1!D&!0a(B : -$1!_'(B $1!WD!N#(B, -$1!;;!.!>m(B $1i$G(B $1KYKi$oi$k(B : -$1!WN!JH(B. -$1!D&!0a(B : -$1!FF!L$!0S(B $1'3k!0f(B, -$192F!Xi(B $1i$H(B $1!5=K;1(B $1i$N(B $1i$Oi$6i$^(B : -$1!D&!0a(B : -$1!Y"(B $1i$G(B $1i$b(B $1KYJi$ai$k(B $1!Bs!Ci(B $1!5.!0s!5=(B $1!!BX!`y(B. -$1!1a!^q(B $1!F#!(B $1!Na'CZ(B $1i$H(B $1!9%':`(B $1i$N(B $1!@d-?n(B : -$1!WN!JH(B. -$1!D&!0a(B : -$1!Ci!8}(B $1!4d!0=(B, -$1-?nK7o(B $1!Qq3YX!Cd(B $1i$N(B $1!Yo!<^(B $1i$H(B $1!N(!a\'Wl(B / -$1!D&!0a(B : -$1!Z"!B\(B $1!_A!?b(B $1-?n-J;(B $1i$H(B $1!_6!:~!R_(B / -$1!D&!0a(B : -$1!4W!0T!.!>m(B $1i$H(B $1!WD!44(B $1i$r(B $1!R]i$(i$k(B : -$1!0a!\n!>!0!(B. -$13=u!<4(B $1!<]!!0=(B, -$1'b~!V3(B $1!2'(B, -$1!L$!^U(B $1!G"!:M(B, -$1!+%![k!0s(B $1'2>!Bo!+&i$H(B $1i%\i%Gi%#i!&i%]i%ji%Fi%#i%/i%9(B / -$1!0a!\n!(B. -$1!3K'1L"]M(B $1!9(!K3!Nr(B $1!bS!:M!Nk![2i!&!G(!F\![2(B / -$1!bS!:M!Nk![2i!&!G(!F\![2(B -$1!5E!5.!;X!'CZ(B. -$1!04K7o(B $1K;C!8{(B $1!Y~!C"(B $1!Q1!X8(B / -2005$1!!_A(B. -$1!5E!5.!;X!`!9&(B. -$1!FtKQv(B $1!G6-I:(B $1'0L"Mc(B $1i$r(B $1!1N(B $1i$H(B $1i$7i$?(B $1!G7!;l(B $1'HD!7y(B $1i$N(B $1KQm'^]!M"(B $1!Kg!8W(B $1!XN32](B $1i$N(B $1!X[i$_(B / -$1KEV!`(B $1i$H(B $1'CZ!G>(B $1!D-!(B : -$1'CZ!G>!Tg!D-!!V0(B (Japan) -$1!Nv!;y(B $1KQd!Oe(B $1!4d!JU!`y(B. -$1!Tg!D-!87(B $1!9(!:f!^[(B (Museum) -(3TjN(B (3GdCQV,(B (3eMeO(B. -(3aTI(B (3Ndb(B / -(3GHh(B (3XHj(B : -(3GHf(B (3NdOhf(B. -(3ebOeg(B (3GHf(B (3NdOhf(B / -(31G(B) 2. -(3JgQGf(B : -(3GfJTGQGJ(B (3HfjGO(B (3JQLeg(B (3h(B (3fTQ(B (3cJGH(B (3;(B -(3fGHGOi,(B (3eMeO(B )(3Qhjf(B. -(3TgQGfi,(B (3YfGjJ(B (3Gddg(B. -(3VQH(B (3GdeKdgGi(B (3OQi(B (3GaZGfSJGf(B : -(3cdQi,(B (3GdHQJG(B [Calgary, Alberta, Canada]: -(3chTGf,(B (3eMeO(B (3Wg(B. -(3jYbhHj,(B (3CMeO(B (3Hf(B (3CHj(B (3jYbhH(B. -(3JGQjN(B (3jYbhHi(B / -(3JgQGf(B : -(3GfJTGQGJ(B (3HfGg(B (3JQLeg(B (3h(B (3fTQ(B (3cJGH(B (3;(B -(3BjJi,(B (3GHQGgje(B. -(3ZjQJ(B (3cQeGfTGgi,(B (3YHO(B (3GdcQje(B. -(3cdjGJ(B (3BKGQ(B (3SjO(B (3YHO(B (3GdcQje(B (3ZjQJ(B (3cQeGfTGgi(B / -[(3JgQGf(B : -(3ZjQJ,(B (3eMeO(B (3SYjO(B. diff --git a/tags/rel-1.5/test/test_utf8.txt b/tags/rel-1.5/test/test_utf8.txt deleted file mode 100644 index 83f58f2..0000000 --- a/tags/rel-1.5/test/test_utf8.txt +++ /dev/null @@ -1,1514 +0,0 @@ -عودة، محمد. -كيف سقطت الملكية في مصر؟ : -الطبعة 1. -القاهرة : -肖 显靜. -第一 推动 / -第1版. -北京市 : -与 2049年 的 中国 对话 -吴 国林, -芋生 裕信, -西脇 順三郎 の 研究 : -東京 : -新典社 選書 ; -西脇 順三郎, - 交通 运输 管理志 / -第1版. -天津市 : -天津市 西青区 系列 分志 ; -天津市 地方志 丛书 -Transportation -西青区 (Tianjing, China). -鎌倉 近世 史料 / -[鎌倉市] : -鎌倉市 (Japan) -澤 壽郎, -片桐 一男, -鎌倉市 中央 図書舘. -نعيم، عبدالعزيز العلى. -نظام الضرائب فى الإسلام ومدى تطبيقه فى المملكة العربية السعودية : -[Cairo : -回想 の 西脇 順三郎 / -東京 : -西脇 順三郎, -安東 伸介, -西脇 順三郎, -イギリス 文學史 : -東京 : -英語 英文學 講座 -١ا) 4. -تهران : -صفا، ذبيح الله. -金田 弘, -旅人 つひに かへらず : -初版. -東京 : -西脇 順三郎, -世界 の 詩 : -東京 : -串田 孫一, -西脇 順三郎, -渡辺 一夫, -西脇 順三郎, -芭蕉・シェイクスピア・エリオット / -第 1版. -東京 : -松尾 芭蕉, -鍵谷 幸信, -松尾 芭蕉, -佐久間 隆史, -西脇 順三郎 論 : -東京 : -現代 詩人論 叢書 ; -西脇 順三郎, -شبيلي، عبد الرحمن. -الكلمة العربية : -[Saudi Arabia] : -كتاب الشرق الاوسط -مكانة الإباضية في الحضارة الإسلامية / -الطبعة 1. -[القاهرة] : -西脇 順三郎, -定本 西脇 順三郎 全集. -初版. -東京 : -西脇 順三郎 全集. -工藤 美代子, -寂しい 声 : -東京 : -西脇 順三郎, -西脇 順三郎, -幻影 の 人 西脇 順三郎 を 語る / -西脇 順三郎 を 語る -第 1版. -東京 : -西脇 順三郎, -西脇 順三郎 を 偲ぶ 会. -双鸭山 林业局 志 / -第1版. -[双鸭山? : -黑龙江省 (China). -伊 蝉. -非常 误会/ -Singapore : -狮城 作家 群英 丛书 ; -فرزاد، عبد الحسين. -المنهج في تاريخ الأدب العربي : -Tehran : -夏 枯早. -涼風 有信 / -Kuala Lumpur : -丹袖 出版 系列 ; -子木, -杭州 日记 / -[Singapore] : -子木, -جائزة سلطان العويس الثقافية : -الشارقة : -منشورات اتحاد كتاب وادباء الامارات -مؤسسة سلطان بن علي العويس الثقافية. -اتحاد كتاب وأدباء الإمارات. -旱区 水 土 作物 关系 及 其 最优 调控 原理 : -第1版. -北京 : -周 保中 将军 和 他 的 抗联 战友 / -[长春] : -周 保中, -中共 吉林 省委. -南宁市 稅务誌 / -稅务誌 -第1版. -[南宁市 : -南宁 (China) -广西 壮族 自治区 南宁市 国家 稅务局. -广西 壮族 自治区 南宁市 地方 稅务局. -中国 副食品 市场 需求 与 "菜篮子 工程" 布局 / -第1版. -北京 : -رياض، محمد. -رحله في زمان النوبة : -[القاهرة] : -عبد الرسول، كوثر. -جياني، الحسين بن محمد. -تسمية شيوخ أبي داود السجستاني / -الطبعة 1. -بيروت : -أبو داود سليمان بن الأشعث السجستاني. -فجي، جاسم بن محمد بن حمود. -ابن الدباغ، يوسف بن عبد العزيز. -جابري، رياض. -سعد الله الجابري وحوار مع التاريخ : -الطبعة 1. -حمص : -جابري، سعد الله. -إبراهيم، أيمن. -الإسلام والسلطان والملك : -الطبعة 1. -دمشق : -سليطين، وفيق. -الزمن الأبدي : -الطبعة 1. -اللاذقية : -وقائع حلقة النقاش الأولى حول تطوير أساليب تعليم اللغة العربية لغير الناطقين بها : -الطبعة العربية 1. -عمان : -مصطلحات ميكانيك السيارات. -الطبعة 1. -[Amman] : -خصاونة، عوني محمد. -التطبيقات الفلكية في الشريعة الإسلامية / -تطبيقات علم الفلك في الشريعة الإسلامية -بدر، عبد الرحيم. -موسوعة أسماء النجوم عند العرب في الفلك القديم والحديث / -عمان : -تكريتي، شاكر علي. -مذكراتي وذكرياتي-- هذه / -الطبعة 1. -بغداد : -تكريتي، شاكر علي. -يحيى، حسب الله. -فنارات في القصة والرواية / -الطبعة 1. -بغداد : -عاني، يوسف. -المسرح، الوجود، الحلم / -الطبعة 1. -بغداد : -راوي، نوري. -متحف الحقيقة، متحف الخيال : -الطبعة 1. -بغداد : -حديثي، بهجت عبد الغفور. -الروح الايماني في الشعر العربي : -الطبعة 1. -بغداد : -نفحات الهند واليمن بأسانيد الشيخ أبي الحسن : -الطبعة 1. -الرياض : -قاضي، النعمان. -شعر الفتوح الإسلامية في صدر الإسلام / -الطبعة 1. -جدة : -من أدب الجهاد -حسن، حسن مصطفى. -الحيوان في الشعر العربي / -الطبعة 1. -الرياض : -زهراني، علي بن صالح السلوك. -بلاد غامد وزهران / -الطبعة 3.، وقد أضيفت اليها فصول جديدة وزيادات مهمة. -جدة : -معجم الجغرافي للبلاد العربية السعودية -عبدلي، عبد الله منسي. -المسجد الحرام في قلب الملك عبد العزيز / -مكة : -رومي، عدنان سالم. -علماء الكويت وأعلامها خلال ثلاثة قرون / -الطبعة 1. -الكويت : -سلسلة تاريخ ما أهمله التاريخ ؛ -أغبري، أكرم عبد الملك. -أهمية البحر الأحمر في علاقة الجمهورية اليمنية بدول مجلس التعاون الخليجي / -الطبعة 1. -صنعاء : -كتاب الثوابت ؛ -بلو، محمد. -إنفاق الميسور في تاريخ بلاد التكرور / -الرباط : -منشورات معهد الدراسات الإفريقية. سلسلة نصوص ووثائق ؛ -شاذلي، بهيجة. -ذاكر، عبد النبي. -الواقعي والمتخيل في الرحلة الأوروبية إلي المغرب / -أكادير : -ذنون، عبد الحكيم. -تاريخ الشام القديم / -الطبعة 1. -دمشق : -العلاقات المصرية-اليابانية / -الجيزة : -مدني، إسماعيل محمد. -بيئة البحرين البحرية / -البحرين : -سلسلة كتب حول الحياة الفطرية ؛ -실크 로드 와 韓國 文化 의 探究 / -대전 광역시 : -人文 硏究 學術 叢書 ; -史 在東, -红盾 耕耘录 : -第1版. -[厦门] : -龙海市 (China) -بدر، عزة. -أم الدنيا : -كتاب الجمهورية -خلايلي، خليل. -تاريخ جسكالا : -الطبعة 1. -دمشق ؛ -راوى، صلاح. -فلسفة الوعى الشعبى : -الطبعة 1. -القاهرة : -刘 宏. -百年 梦寻 : -20世纪 中国 经济 思潮 与 社会 变革 -第1版. -北京市 : -世纪 回眸. -沈 山. -石 淑华, -趋势 与 策略 / -Kuala Lumpur : -林 水〓. -陈 友信. -西脇 順三郎, -西脇 順三郎・パイオニア の 仕事 / -パイオニア の 仕事 -第 1版. -東京 : -コレクション・日本 シュ-ルレアリスム ; -和田 桂子, -申 國美. -1900-2001 國家 圖書館 藏 敦煌 遺書 研究 論著 目錄 索引 / -敦煌 遺書 研究 論著 目錄 索引 -國家 圖書館 藏 敦煌 遺書 研究 論著 目錄 索引 -第1版. -北京市 : -敦煌縣 (China) -中國 國家 圖書館 -郭 永秀, -余韵 : -郭 永秀 音乐 评论集 -初版. -[Singapore] : -1950년대 후반기 의 한국 사회 와 이 승만 정부 의 붕괴 / -서울 특별시 : -한국 현대사 의 재 인식 ; -현대사 연구소 기획 연구 -한 흥수. -한국 정신 문화 연구원. -敦煌 懸泉 月令 詔條 / -月令 詔條 -第1版. -北京 : -"本書 收錄 敦煌 懸泉置 遺址 出土 的 《使者 和 中所 督察 詔書 四時 月令 五十條》 (簡稱 「月令 詔條」)". -懸泉置 Sites (China) -中國 文物 硏究所. -甘肅省 文物 考古 硏究所. -刘 星, -文化界 人士 / -Singapore : -新加坡 文艺 协会 丛书 ; -金 梅子, -一双 舊草鞋 / -[s.l.] : -印华 作协 文丛. -前橋藩 松平家 記錄 / -[Tokyo] : -前橋 市立 図書館. -長崎県 水 調查書 : -[長崎市] : -長崎県 (Japan). -許 保由, -不枉此生 : -許 保由 回憶錄 -Sibu, Sarawak : -許 保由, -吴 木炎. -前路 亮红灯 / -第1版. -K. L., Malaysia : -大将 观点 ; -薛 嘉元, -猫城 猫语 / -第1版. -K.L. [i.e. Kuala Lumpur], Malaysia : -大将 fuse ; -晨露, -鱼說 / -初版. -Miri, Sarawak : -美里 笔会 丛书 ; -梁 菊庵, -飄逝 的 年華 : -菊庵 文集 -[Jakarta : -青春 是 一首歌 : -驻校 作家 写作 计划 学员 作品集 -初版. -[Singapore] : -方 桂香. - 尤 今. -听 青春 在 哭泣 : -尤 今 短篇 小说 -初版. -Singapore : -心书 ; -白 荷. -白 荷 散文选 / -初版. -Singapore : -新加坡 新华 作家 丛书 -新加坡 新华 作家 作品集 ; -杨 怡, -从 新华 文坛 论 及 印华 文学 / -初版. -Singapore : -新加坡 新华 作家 作品集 ; -周 洛崙. -梦廻 人生 / -初版. -Singapore : -周 洛崙 作品 ; -陈 久霖, -神州 大地 商机 无限 : -中国 商业 环境 和 文化 的变迁 -初版. -[Singapore] : -舒城县 文物志 / -[舒城县. -舒城县 (China). -舒城县 (China). -舒城县 (China). -中國 古代 建築 歷史 圖說 / -第1版. -北京市 : -侯 幼彬. -李 婉貞. -孔 繁志. -敖鲁古雅 鄂温克人 的 文化 变迁 = -第1版. -天津 : -中央 民族 大学 中国 少数 民族 研究 中心 丛书 -鄂温克族 自治旗 (China) -环 洞庭湖 经济圈 建设 硏究 / -第1版. -长沙市 : -湖南省 (China) -朱 翔. -谢 留文. -客家 方言 语音 硏究 / -第1版. -北京 : -探索 之 果 : -云南 财贸 学院 建校 50周年 论文选 -第1版. -北京 : -云南 财贸 学院 学术 委员会. -宿務 華人 的 經濟--社會史 (附 從 糖業 看 菲律濱 華人) / -糖業 看 菲律濱 華人 -初版. -菲律濱 : -Go, Bon Juan. -珠江 三角洲 公共 管理 模式 硏究 / -第1版. -北京 : -教育部 人文 社会 科学 重点 硏究 基地 中山大学 行政 管理 硏究 中心 学术 文库 -"地方 政府 与 区域 公共 管理 研究" 系列 -陈 瑞莲. -蔡 立辉. -黎 军, -甘 靑 宁 民族 地区 现代 远程 敎育 / -第1版. -北京市 : -مجدلاني، أحمد. -دراسة تحليلية حول أثر النظام الانتخابي على تركيبة المجلس التشريعي القادم / -رام الله : -سلسلة تقارير دورية -شاكري، حسين. -ذكرياتي / -الطبعة 1. -قم : -ميردامادي، عبد المجيد. -زيارة الرسول المصطفى وآله : -الطبعة 2. -تهران : -موسوعة الرسول المصطفى ؛ -حلاق، حسان. -مناهج تحقيق التراث والمخطوطات العربية / -الطبعة 1. -بيروت : -حسين، قصي. -في الحضارة العربية : -الطبعة 1. -طرابلس، لبنان : -عباس، محمد. -ثوار ... عظماء / -بوزريعة، الجزائر : -تطاوي، عبد الله. -اللغة والمتغير الثقافي : -الطبعة 1. -القاهرة : -غوادره، فيصل حسين. -التمرد في شعر العصر العباسي الأول / -الطبعة 1. -عمان : -黑 岩, -各舉 門神 的 風采 / -Sibu, Sarawak : -漳泉 之聲 叢書 ; -陆 力军. -市场 义乌 : -第1版. -杭州 : -义乌市 (China) -义乌市 (China) -白 小虎. -王 祖強. -靖 国平. -教育 的 智慧 性格 : -当代 知识 教育 的 变革 -第1版. -武汉 : -公共 决策 研究 : -第1版. -长沙 : -公共 管理 论丛 -颜 佳华, -迈向 新世纪 : -广州市城市 规划 信息 系统 的 理论 与 实践 -第1版. -广州 : -广州 (China) -戴 逢 -姜 崇洲. -丁 建伟. -韩 振远. -山西 古祠堂 : -矗立 在 人 神 之 间 -第1版. -沈阳市 : -中国 文化 遗珍 丛书. 山西 -潘 知常, -王 国维 : -第1版. -北京 : -跨文化 沟通 个案 研究 丛书 -文津 書系 -王 国维, -李 加荣. -军用 生物 技术 / -第1版. -北京市 : -庄 力霞. -邱 德修. -商周 用鼎 制度 之 理論 基礎 / -限定版. -臺北市 : -商周 金文 硏究 論文; -蒲正信, -药师经注释 / -第1版. -成都市 : -佛典丛书. -زاهي، فريد. -العين والمرآة : -[Rabat] : -دواليبي، محمد معروف. -مذكرات الدكتور معروف الدواليبي / - الطبعة 1. -الرياض : -أبو الخير، محمود عبد الله. -شعر رثاء النفس : -عمان : -黎平 剿匪 斗争 / -第1版. -[黎平 : -中共 黎平 县委. -鬼谷子 学术 研讨会 -第一届 鬼谷子 学术 研讨会 论文集 / -鬼谷子 学术 研讨会 论文集 -第1届 鬼谷子 学术 研讨会 论文集 -北京 第1版. -北京 : -鬼谷子, -鬼谷子 学术 研究会. -فقير، بدر بن عادل. -تغير الأنماط السكنية في مدينة الدرعية : -الرياض : -إصدارات دارة الملك عبد العزيز ؛ -سمحي، علي حمود. -داخل آزال خارج صنعاء : -صنعاء : -شمري، محمد علي. -شعراء الخليج : -الطبعة 1. -عمان : -الشعر النبطي : -الطبعة 1. -عمان : -حنداين، محمد. -المخزن وسوس، 1672-1822 : -الطبعة 1. -الرباط : -عبيدات، داود عمر سلامة. -الموحدون في الأندلس : -إربد، الأردن : -مدني، إسماعيل محمد. -رحلتي مع البيئة / -الطبعة 1. -[?Manama] : -حميد الدين، عبد الله بن محمد. -الهوية في بنية النظام الدولي / -الطبعة 1. -عمان : -سيد، محمد عبد الرحمن. -تجرية دولة قطر في مجال ذوي الاحتياجات الخاصة / -[الدوحة] : -فاضل لنكراني، محمد. -كتاب الطهارة : -الطبعة 1. -[Tehran] : -نجمآبادي، أبو الفضل. -حاشية المكاسب : -الطبعة 1. -قم : -مجموعة آثار آية الله الميرزا أبو الفضل النجمآبادي ؛ -انصاري، مرتضى بن محمد أمين، -مؤسسة آية الله العظمى البروجردي. -东北亚 区域 经济 社会 合作 与 发展 国际 学术 研讨会 -东北亚 自由 贸易区 : -2004年 东北亚 区域 经济 社会 合作 与 发展 国际 学术 研讨会 论文选 -第1版. -沈阳 : -李 向平. -李 勇辉, -城镇 居民 住宅 消费 保障 制度 / -第1版. -北京市 : -陈 相灵. -《武经 七书》 与 当代 战争 战略 / -第1版. -北京 : -武经 七书. -社会 保障 社会 福祉 大事典 = -初版. -東京 : -労働 旬報社. -한국 팝 의 고고학 1970 : -제1판. -경기도 파주시 : -신 현준. -武 旭峰. -深入 黃山 的 背后 : -找寻 徽州 -第2版. -广州 : -发现 之旅 = -徽州 地区(China) -徽州 地区(China) -南 丽军. -比较 政治 制度 / -第1版. -哈尔滨 : -向 俊杰. -孔 兆政. -贾 少华. -民办 大学 的 战略 / -第1版. -杭州 : -浙江省 教育 科学 规划 2005 年 重点 研究 课题 -刘 晓琴. -中国 近代 留英 教育史 / -第1版. -天津市 : -近代 中国 研究 丛书 -Rev. ed. of author's doctoral thesis under title: 中国 近代 留英 教育 研究. -刘 晓琴. -党 崇民, -论 邓小平 战役 指导 特色 = -第1版. -北京 : -中国 军事学 博士 文库 -邓 小平, -建立 农村 劳动力 平等 就业 制度 / -第1版. -北京市 : -陈 晓华. -张 红宇. -胡 小林. -毛 泽东 的 学习 思想 与 实践 / -第1版. -济南 : -毛 泽东, -于 云才. -赵 志忠. -民族 文学 论稿 / -第1版. -沈阳市 : -至尊 宗喀巴 大师传 / -第3版, 修订本. -西宁 : -郭 和卿. -威慑 人类 / -第1版. -北京 : -沈 晓阳. -傅 国涌, -主角 与 配角 : -近代 中国 大转型 的 台前 幕后 -第1版. -武汉市 : -白 友涛. -盘根草 : -城市 现代化 背景下 的 回族 社区 -第1版. -银川市 : -邬 大光. -危机 与 转机 : -第1版. -[厦门] : -厦门 大学 WTO 硏究 中心 系列 丛书 ; -林 莉. -刘 学杰. -新疆 旧事 = -第1版. -乌魯木齐市 : -居上 图书 -新疆 维吾尔自治区 (China) -吴 静安, -春秋 左氏傳 舊注 疏證 續 / -第1版. -長春 : -劉 文淇, -Confucius. -左丘 明. -劉 文淇, -董 洪运, -聚焦 地平线下 : -漫谈 新时期 人民 防空 -北京 第1版. -北京市 : -皇甫 宜川. -中国 战争 电影史 / -第1版. -北京 : -百年 中国 电影 研究 书系 -高等 教育 发展 与 财政 政策 国际 研讨会 -高等 教育 发展 的 财政 政策 : -OECD 与 中国 -第1版. -北京 : -"根据 中国 教育部 和 经济 合作 与 发展 组织(OECD) 的 协商, 2004年月11--14日, 双方 在 北京 共同 召开了 '高等 教育 发展 与 财政 政策 国际 研讨会'" -- Foreword. -范 文曜. -闫 国华. -中国 当代 文学史 / -第1版. -海口 : -21世纪 高等 敎育 系列 敎材. 汉语言 文学类 -田 中阳. -赵 树勤. -王 中江. -进化 主义 在 中国 = -第1版. -北京 : -20世纪 西方 哲学 东渐史 -董 贵昕. -金融 泡沫 的 形成, 运行 与 控制 研究 / -第1版. -上海市 : -黄皮书 系列 -周 到. -周 到 藝術 考古 文集 / -第1版. -郑州市 : -河南 博物院 学术 文库 -河南 博物院. -唐 忠毛. -佛教 本觉 思想 论争 的 现代性 考察 / -第1版. -上海 : -中国 的 现代性 与 人文 学术 丛书 -地理 信息 与 规划 支持 系统 / -第1版. -北京 : -李 楯, -面对 艾滋病, 2004 = -第1版. -北京市 : -李 丹. -中国 上市 公司 发展 规模 研究 = -第1版. -武汉 : -管理 新干线 -卢 洪涛, -中国 现代 文学 思潮 史论 / -第1版. -北京 : -"陕西 师范 大学 优秀 著作 出版 基金 资助 出版"--P. facing t.p. -宋代 傳記 資料 叢刊 / -第1版. -北京市 : -宋元明清 傳記 資料 叢刊 系列 - Vol. 49 called "索引" with added title page: 四十七種 宋代 傳記 綜合 引得 / 洪 業 ... [et al.] 編纂. -洪 業. -北京 圖書館 出版社. -四十七種 宋代 傳記 綜合 引得. -作战 指挥学 / -北京 第1版. -北京 : -丁 邦宇. -装备 保障性 工程 与 管理 = -第1版. -北京市 : -徐 宗昌, -黄 益嘉. -杨 宏伟. -刘 佐泉. -太平 天国 与 客家 / -第1版. -开封市 : -客家 文化 研究 丛书 -中国 财富 新贵 / -第1版. -北京市 : -范 爱民. -高句丽 厉史 与 文化 学术 研讨会 -高句丽史 新 研究 / -高句丽 厉史 与 文化 学术 研讨会 论文集 -第1版. -延吉市 : -高句丽 (Kingdom) -李 国强. -李 宗勋. -中国 小额 信贷 发展 研究 = -第1版. -北京 : -曹 子娟. -陶 江. -陶姓 史话 = -第1版. -南昌市 : -中华 姓氏 文化 丛书 系列. 中华 姓氏 史话 丛书 -陈 光焱. -中国 财政 思想 与 制度 改革 / -第1版. -北京 : -中南 财经 大学 财政学 博士点 导师 文集 -郑 永振. -渤海 墓葬 研究 / -第1版. -长春市 : -严 长录. -陳 寅恪, -金明館 叢稿 初編 / -北京 第1版. -北京 : -陳 寅恪 集 -东北 老工业 基地 振兴 与 管理 现代化 / -第1版. -北京 : -中国 企业 管理 研究会. -中国 社会 科学院. -寒 布. -故宮 = -第1版. -北京 : -北京 的 世界 文化 遗产 = -故宮 博务院 (China) -北京 (China) -北京 (China) -閆 修篆. -易經 的 圖 與 卦 / -臺北市 : -易經. -浪尖 逐梦 : -余 柱业 口述 历史 档案 -初版. -Petaling Jaya, Selangor, Malaysia : -风云 丛书 ; -陈 剑, -郴州市 2000年 人口 普查 资料 / -郴州市 人口 普查 资料 -2000年 人口 普查 资料 -[郴州市 : -向 曽榆. -郴州市 第五次 人口 普查 领导 小组. -רוזנמן, מרדכי. -שמחת מרדכי. -ספר שמחת מרדכי / -ניו יורק : -חלק ב׳ : בראשית, שמות, ענינים שונים ־־ -徐 宗幹, -斯未 信齋 文編 -斯未 信齋 文編 ; -斯未 信齋 文編 ; 斯未 信齋 雜錄 -初版. -南投市 : -臺灣 歷史 文獻 叢刊 -徐 宗幹, -臺戰 實紀. -臺戰 演義 / -初版. -南投市 : -臺灣 歷史 文獻 叢刊 -劉永福, -臺灣 銀行. -冯 文炳. -废名 作品 精选 / -第1版. -武汉市 : -现代 文学 名家 作品 精选 -沙 铁华. -月 华. -大園 市藏. -臺灣 事蹟 綜覽 / -台北市 : -幕府山 胜迹 寻踪 / -南京市 : -下关文史 ; -政协 南京市下关区文史 资料 委员会 . -南京市 幕府山 地区 保护 开发领导 小组 办公室. -赵 淑敏, -京梦 / -第1版. -广州市 : -吴 兢 -贞观 政要 / -第1版. -合肥市 : -中华 古典 智慧 珍品 -唐 太宗, -范 勇胜. -העיירה שלי : -תל־אביב : -גרנצרסקי־קדרי, בינה. -科学 发展观 与 新一轮 经济 增长 / -第1版. -上海 : -厉 无畏. - 王 振. -熊谷 弘, -英米 陪審 制度 の 運用 と 其の 批判 / -[Tokyo] : -司法 研究 報告書 ; -이 준우, -국, 공유지 신탁 법제 개선 방안 연구 / -서울 특별시 : -연구 보고 ; -김 두진, -공정 거래법 상 경제력 집중 규제 연구 / -서울 특별시 : -연구 보고 ; -최 성근. -OECD 기업 지배 구조 원칙 의 국내법 수용 에 관한 연구 / -서울 특별시 : -연구 보고 ; -김 정순. -행정법 상 재판 외 분쟁 해결 법제 연구 / -서울 특별시 : -연구 보고 ; -김 수진, -공무원 권익 향상 을 위한 행정 구제 법제 연구 / -서울 특별시 : -연구 보고 ; -傅 佩榮, -傅 佩榮 解讀 孟子 : -初版. -台北縣 新店市 : -世界 公民 叢書 ; -Mencius. -Mencius. -平 可夫. -中國 軍事 與 國際 戰略 / -第1版. -香港 : -黑白講 李 敖 : -第1版. -[香港] : -富達 文庫 ; -李 敖, -齊 以正. -吳 小攀. -孟 庆顺. -"一国 两制" 与 香港 回归后 的政治 发展 / -香港 回归后 的政治 发展 -香港 初版. -香港 : -鄭 義, -中共 十大 敗仗 : -中共官方戰史上 被刻意 掩埋 的 篇章 -第1版. -香港 : -中國 共產黨 -中國 國民黨 -吳 潤生. -林 彪 與 文化 大革命 / -第2版. -Carle Place, N.Y. : -《眞相》系列 ; -林 彪, -周 承人. -早期 香港 電影史 (1897-1945) / -香港 : -李 以荘. -魏 成思. -兩岸 密使 50 年 / -香港 : -記憶 歷史 叢書 -程 希, -当代 中囯 留学生 硏究 / -初版. -香港 : -北京 大学 华侨 华人 硏究 中心 丛书 ; -"北京 大学 龚 诗贮 基金 赞助 出版." -鄭 義, -長征 : -第1版. -香港 : -中國 共產黨 -中國 國民黨 -香港・文化・研究 / -香港 : -吳 俊雄. -馬 傑偉. -呂 大樂. -伊 戰 啓示錄 / -初版. -Singapore : -王 賡武. -宮 少朋. -中日 关系 多维 透視 : -古厩 忠夫 教授 还历 纪念 论文集 -香港 初版. -香港 : -古厩 忠夫, -古厩 忠夫 教授 还历 纪念 论文集 编辑 委员会. -清宮 臺灣 巡撫 史料 / -初版. -臺北市 : -國立 故宮 博物院 院藏 清代 臺灣 文獻 叢編 -洪 安全, -馮 明珠. -落地 生根. -落地 生根 : -神戶 華僑 與 神阪 中華 會館 百年史 -香港 初版. -香港 : -北京 大學 華僑 華人 研究 中心 叢書 ; -Translation of: 落地 生根 : 神戶 華僑 と 神阪 中華 会館 の 百年. -中華 会館 (Kobe-shi, Japan) -忽 海燕. -中華 會館 (Kobe-shi, Japan) -王 鼎鈞. -葡萄 熟了 / -1版. -臺北市 : -大地 叢書 ; -戴 錦華, -性別 中國 / -初版. -台北市 : -麥田 人文 -附 參考 文獻. -盧 增. -柬埔寨 企业 纳稅 指南, 2004 / -中文 版. -[Phnom Penh?] : -הלר חדד, הילה. -התכלית של ועדות מייעצות ציבוריות לעניין מסוים־ נוסח אד הוקת בישראל : תוך התמקדות בשלוש הועדות הבאות: ועדת וילנאי (1999), ועדת טל (2000), ועדת בן בסט (2000) / -[Israel : -פרג׳, רג׳א סעיד. -הקשרים בין הדרוזים והיהודים עד הקמת מדינת ישראל (1948) / -ינוח : -חלפין, יגאל. -הטיהורים הסטליניסטיים : -תל אביב : -פטיש -קרליץ, שמריהו יוסף נסים. -חוט שני (הלכות רבית) -ספר חוט שני : -בני ברק : -הוכמן, חיים אריה, -안 도섭. -조선 의 혼불 타던 밤 에 : -초판. -서울시 : -윤 동주, -بلفقيه، عبد الله بن حسين بن عبد الله. -قوت الألباب من مجاني جني الألباب / -تريم، حضرموت : -زكي، رمضان خميس. -مفهوم السنن الربانية : -الطبعة 1. -القاهرة : -هذا هو الإسلام ؛ -عمارة، محمد. -قراءة النص الديني : -الطبعة 1. -القاهرة : -هذا هو الإسلام ؛ -ندوة السيرة النبوية : -الطبعة 1. -[Omdurman] : -منشورات المركز ؛ -إمام، حمادة. -مبارك والإخوان / -الطبعة العربية 1. -المهندسين [Giza] : -新譯 古文 辭類纂 / -初版. -臺北市 : -古籍 今注 新譯 叢書 -姚 鼐, -黃 鈞. -刘 文锁, -尼雅 : -静止 的 家园 和 时间 -第1版. -北京市 : -神秘 中国 -民丰县 (China) -民丰县 (China) -中国 新编 地方志 总目 提要 = -第1版. -北京市 : -《中国 新编 地方志 总目 提要》编纂 委员会. -中国 第二 历史 档案馆. -馆藏 民国 台湾 档案 汇编 / -民国 台湾 档案 汇编 -台湾 档案 汇编 -第1版. -北京市 : -台湾 文献 史料 出版 工程 -陈 云林. -海峡 两岸 出版 交流 中心. -黃 俊傑, -德川 日本 《論語》詮釋 史論 / -初版. -臺北市 : -東亞 文明 研究 叢書 ; -Confucius. -東亞 視域中 的 國籍、移民 與 認同 學術 研討會 -東亞 視域中 的 國籍、移民 與 認同 / -初版. -臺北市 : -東亞 文明 研究 叢書 ; -甘 懷真, -貴志 俊彦, -川島 真, -בסן, צדוק. -יתומות : -ירושלים : -רז, גאי. -בית האמנים. -שלו, אריה. -כישלון והצלחה בהתרעה : -תל אביב : -אריאלי, שאול. -תפסת מרובה לא תפסת : -ירושלים : -תמונת מצב -שביט, יעקב. -אירופה המהוללת והמקוללת : -תל אביב : -ריינהרץ, יהודה. -שי, דב. -15 מכל 100 שרדו : -חמישה עשר מכל מאה שרדו -מהד׳ 2. -[ת״א ז״א תל אביב : -שי, דב. -עדווי, ג׳מאל, -פעילות הקוויקרים האמריקנים בפלישתינה 1948-1869 / -Haifa] : -חסקין, גילי. -שבוי בקסמה : -הוד השרון : -טאוב, גדי. -המתנחילים והמאבק על משמעותה של הציונות / -מתנחלים -תל אביב : -פרוזה (ידיעות אחרונות). -日本軍 「慰安婦」 関係 資料 集成 / -初版. -東京 : -鈴木 裕子, -山下 英愛, - 外村 大,1966- -成田 龍一. -歴史学 の ポジショナリティ : -東京 : -山崎 一穎, -森 鷗外 論攷 / -東京 : -森 鷗外, -木村 博一, -日本 社会科 の 成立 理念 と カリキュラム 構造 / -初版. -東京 : -堀 幸雄, -最新 右翼 辞典 / -右翼 辞典 -東京 : -久保田 淳, -ことば、ことば、ことば / -初版. -東京 : -小林 一茶, -だん袋 : -一茶 自筆 句集 -東京 : -渡辺 卓郎. -岡本 哲志, -銀座 四百年 : -東京 : -講談社 選書 メチエ ; -銀座 (Tokyo, Japan) -千石 英世, -小島 信夫 : -暗示 の 文学、鼓舞する 寓話 -東京 : -小島 信夫, -検証 国家 戦略なき 日本 / -東京 : -読売 新聞社. -吉田 喜重, -吉田 喜重 : -変貌 の 倫理 -東京 : -蓮實 重彦, -李 燕, -陶 行知 の 芸術 教育論 : -初版. -東京 : -陶 行知, -寺崎 昌男, -大学 は 歴史 の 思想 で 変わる : -初版. -東京 : -比田井 克仁, -伝說 と 史実 の はざま : -東京 : -誰 で も 読める 日本 古代史 年表 : -日本 古代史 年表 -東京 : -吉川 弘文館. -保阪 正康, -松本 清張 と 昭和 史 / -初版. -東京 : -平凡社 新書 ; -松本 清張, -松本 清張, -松本 清張, -東京 大学. -戦争 の 表象 : -東京 : -東京 大学. -吉見 俊哉, -人口 減少 時代 の 日本 経済 / -東京 : -人口学 ライブラリー ; -大淵 寬, -森岡 仁, -日本 の 所得 分配 : -初版. -東京 : -小塩 隆士, -田近 栄治. -府川 哲夫, -佐々木 毅, -知識 基盤 社会 と 大学 の 挑戦 : -初版. -東京 : -本多 博之, -戦国 織豊期 の 貨幣 と 石高制 / -東京 : -資料 集成 戦争 と 障害者 / -東京 : -十五年 戦争 極秘 資料集. 補卷 ; -橋本 雅之, -古風土記 の 研究 / -初版. -大阪市 : -研究 叢書 ; -古風土記 -常陸国 風土記. -八代 斌助 の 思想 と 行動 を 考える : -京都市 : -神戶 国際 大学 経済 文化 研究所 叢書 ; -八代 斌助, -日本 聖公会 -桑田 優, -平尾 武之, -山本 祐策, -小川 恭一. -徳川 幕府 の 昇進 制度 : -寬政 十年末 旗本 昇進表 -東京 : -ジャーナリズム と 権力 / -京都市 : -大石 裕, -日本 の 地方 民鉄 と 地域 社会 / -初版. -東京 : -青木 栄一, -少子化 の 経済 分析 / -東京 : -高山 憲之, -斎藤 修, -田間 泰子, -「近代 家族」と ボディ・ポリティクス / -京都市 : -四川省 潼南县 地名录 / -潼南县 地名录 -[潼南县 : -四川省 地名录 丛书 ; -潼南县 (China) -四川省 潼南县 地名 领导 小组. -四川省 武隆县 地名录 = -武隆县 地名录 -[武隆县 : -四川省 地名录 丛书 ; -武隆县 (China) -武隆县 地名 领导 小组. -四川省 新都县 地名录 / -新都县 地名录 -[新都县 : -四川省 地名录 丛书 ; -新都县 (China) -新都县 地名 领导 小组. -مالح، محمد رياض. -الشيخ الأكبر محيي الدين بن العربي سلطان العارفين / -أبو ظبي : -حميري، جمال الدين عبد الله. -النسبة إلى المواضع والبلدان / -الطبعة 1. -أبو ظبي : -مزروعي، فاطمة حمد. -تمثيلات الآخر في أدب قبل الإسلام / -أبو ظبي : -يوميات زايد / -الطبعة 1. -أبو ظبي : -المأمورة : -الطبعة 1. -Abu Dhabi : -العاديات : -الطبعة 1. -Abu Dhabi : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1997 حتى عام 2006 بشأن الأراضي الممنوحة للمواطنين / -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1996 حتى عام 2006 في العلامات التجاربة / -[?Dubai] : -قانون اتحادي رقم 24 لسنة 2006 م في شأن حماية المستهلك. -[?Dubai] : -قانون مكافحة التستر التجاري رقم 17 لسنة 2004 م. -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1999 حتى عام 2006 في المنازعات بين الؤجرين والمستأجرين : -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1990 حتى عام 2005 في الإبعاد / -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1988 حتى عام 2005 م في أحكام بطاقة الإئتمان. -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1991 حتى عام 2005 في بطلان الإعلان / -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1997 حتى عام 2005 في الملكية التجارية والصناعية / -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1991 حتى عام 2006 في التسهيلات المصرفية / -[?Dubai] : -حجي، عبد الرحمن. -دراسة الظاهرة العلمية في المجتمع الأندلسي / -أبو ظبي : -مري، سعيد. -ديوان الغواص / -أبو ظبي : -نجمآبادي، أبو الفضل. -كتاب القضاء : -الطبعة 1. -قم : -مجموعة ىثار آية الله الميرزا أبو الفضل النجم آبادي ؛ -نجمآبادي، أبو الفضل. -الرسائل الفقهية : -الطبعة 1. -قم : -مجموعة آثار آية الله الميرزا أبو الفضل النجمآبادي ؛ -한국 의 민주 정부. -한국 의 민주 정부. -חיים ביהודה. -[Jerusalem] : -松村 潤, -米國 議會 圖書館 所藏 滿洲語 文獻 目錄 / -滿洲語 文獻 目錄 -東京 : -東北 アジア 文獻 硏究 叢刊 ; -פוגל, דוד. -חרא של פרסום / -מהד׳ 1. -[Israel] : -פוגל, דוד. -ישראל. -אזורי עדיפות לאומית : -ירושלים : -دارا شكوه. -منتخبات آثار : -[تهران] : -جلالى نائينى، محمد رضا. -صادق عنقا. -١نته : -١ا) 22. -Verdugo City, Ca : -בר־עם שחל, ליאורה. -הנחיות לסקר ותיעוד אתרים לשימור / -[Israel] : -ארן, זלמן. -דברים על החינוך בדור הדעת / -חינוך בדור הדעת -אבא אבן -ירושלים : -סדרת ״השרים״ / יוסף יונאי -יונאי, יוסף. -הגדה של פסח : -ירושלים : -אלישיב, יוסף שלו׳. -קהלות יעקב. -ישראלזון, משה. -ורנר, שלמה י. -ליל שמורים. -ספר ליל שמורים : -ליל שמורים -ברוקלין, נ.י. : -ברוודה, שלמה. -חד גדיא. -הגדה של פסח : -ירושלים : -קניבסקי, יעקב ישראל. -ברונשטיין, ישראל יוסף בן משה אליעזר. -מוסקאוויטש, נפתלי אשר ישעי׳. -פירות האילן (ארבעה המינים) -ספר פירות האילן : -פירות האילן -אשדוד : -ספר יהושע. -ספר יהושעץ -יהושע -[ירושלים : -ספר יהושע. -ספר שופטים. -וילהלם, אהרן אליהו בן יחזקאל. -ספר שופטים. -אילה שלוחה. -דיקמאן, אברהם ש. -ספר שלשים יום קודם החג : -שלשים יום קודם החג -זכרון משה -מהד׳ 2. מתוקנת. -ליקוואוד, נ. דז. : -אורנשטיין, יעקב משולם. -ישועות יעקב -ספר ישועות יעקב : -נדפס ונסדר מחדש. -אשדוד : -תורה. -באום, אברהם. -לילה כיום יאיר : -ירושלים : -אוצר מפרשי קהלת / -ירושלם : -קהלת. -ואנונו, שמעון. -קהלת. -דיין, נסים. -ספר יעלת חן : -יעלת חן -בני ברק : -תורה. -מרגליות התורה : -ספר מרגליות התורה -ירושלים : -תורה. -ואנונו, שמעון. -רבינוביץ־תאומים, בנימין בן יעקב. -ספר יחלק שלל : -יחלק שלל -ירושלים : -תורה. -ספורנו ורבינו בחיי. -ספר פניני ספורנו ורבינו בחיי : -לונדון : -תורה. -רוזנבוים, יעקב מאיר. -ספורנו, עובדיה בן יעקב, -בחיי בן אשר בן חלבא, -ראבד, רם משה. -הגדה של פסח מהדורת טנן : -פתח תקוה : -הגדה של פסח. -東京 大学. -東京 大学 総合 研究 博物館 所蔵 渡辺 武男 収集 広島・長崎 被爆 関連 資料 目錄 / -渡辺 武男 収集 広島・長崎 被爆 関連 資料 目錄 -広島・長崎 被爆 関連 資料 目錄 -東京 : -東京 大学 総合 研究 博物館 標本 資料 報告, - 渡辺 武男, -東京大学. -田賀井 篤平, -シルク ロード 草原 の 道 に おける アルジャィ 石窟 の 歴史 と 文化・国際 シンポジウム, 2007年 3月 27日 : -静岡市 : -楊 海英, -報告書 日系 アメリカ人 リーダーシップ シンポジウム 「芸術 から ビジネス まで: 多様 な 職業 を 通じた 日系 アメリカ人 の 貢献」/ -日系 アメリカ人 リーダーシップ シンポジウム 「芸術 から ビジネス まで: 多様 な 職業 を 通じた 日系 アメリカ人 の 貢献」 -東京 : -武田 興欣, -国際 交流 基金. -出来町 天王祭 鹿子神車・河水車 / -鹿子神車・河水車 -名古屋市 : -名古屋市 山車 調查 報告書 ; -名古屋市 文化財 調查 報告 ; -名古屋市 教育 委員会. -中国 対外 貿易 統計 / -2005年版. -東京 : -海外 調查 シリーズ ; -日本 貿易 振興 機構. -専門 用語 分野 の 国際 規格 共同 開発 調查 研究 成果 報告書. -東京 : -Japan. -日本 規格 協会. -群杭 基礎 の 大型 振動台 実験 / -[つくば市] : -土木 研究所 資料, -土木 研究所 (Japan). -マテリアル フロー データ ブック : -第 3版. -つくば市 : -森口 祐一. -橋本 征二, -産総研 レア メタル シンポジウム, 平成 18年 10月 2日. -「産総研 レア メタル シンポジウム」講演 予稿集. -名古屋市 : -産業 技術 総合 研究所. -古川 恵太. -沖縄 泡瀬 干潟 を 例 と した 沿岸 湿地 の 総合的 環境 評価 の 試み / -横須賀市 : -国土 技術 政策 総合 研究所 資料 = -徳川 将軍家 と 会津 松平家 : -会津若松市 : -会津藩 (Japan) -福島 県立 博物館. -若松城 天守閣 (Museum) -شيخ الأرض، محمد. -فشة خلق / -ابو ظبي : -ابن خلدون. -مقدمه ابن خلدون / -١ا) 2. -تهران : -انتشارات بنياد ترجمه و نشر كتاب ؛ -نابادى، محمد )روين. -شهرانى، عنايت الله. -ضرب المثلهاى درى افغانستان : -كلرى، البرتا [Calgary, Alberta, Canada]: -كوشان، محمد طه. -يعقوبي، أحمد بن أبي يعقوب. -تاريخ يعقوبى / -تهران : -انتشارات بناه ترجمه و نشر كتاب ؛ -آيتى، ابراهيم. -غيرت كرمانشاهى، عبد الكريم. -كليات آثار سيد عبد الكريم غيرت كرمانشاهى / -[تهران : -غيرت، محمد سعيد. diff --git a/tags/rel-1.5/test/util.py b/tags/rel-1.5/test/util.py deleted file mode 100644 index 7ade343..0000000 --- a/tags/rel-1.5/test/util.py +++ /dev/null @@ -1,4 +0,0 @@ -import sys -sys.path.append( '../pymarc' ); - - diff --git a/tags/rel-1.5/test/writer.py b/tags/rel-1.5/test/writer.py deleted file mode 100644 index 5e5e284..0000000 --- a/tags/rel-1.5/test/writer.py +++ /dev/null @@ -1,31 +0,0 @@ -import util -import unittest -import pymarc -import re -import os - -class MARCWriterTest(unittest.TestCase): - - def test_write(self): - - # write a record off to a file - writer = pymarc.MARCWriter(file('test/writer-test.dat','w')) - record = pymarc.Record() - field = pymarc.Field('245', ['0','0'], ['a', 'foo']) - record.addField(field) - writer.write(record) - writer.close() - - # read it back in - reader = pymarc.MARCReader(file('test/writer-test.dat')) - record = reader.next() - - # remove it - os.remove('test/writer-test.dat') - -def suite(): - suite = unittest.makeSuite(MARCWriterTest, 'test') - return suite - -if __name__ == "__main__": - unittest.main() diff --git a/tags/rel-1.5/test/xml_test.py b/tags/rel-1.5/test/xml_test.py deleted file mode 100644 index 4f7ed8d..0000000 --- a/tags/rel-1.5/test/xml_test.py +++ /dev/null @@ -1,66 +0,0 @@ -from unittest import TestCase -from pymarc import map_xml, parse_xml_to_array, record_to_xml, Record -from cStringIO import StringIO - -class XmlTest(TestCase): - - def test_map_xml(self): - self.seen = 0 - def count(r): self.seen += 1 - map_xml(count, 'test/batch.xml') - self.assertEqual(2, self.seen) - - def test_multi_map_xml(self): - self.seen = 0 - def count(r): self.seen += 1 - map_xml(count, 'test/batch.xml', 'test/batch.xml') - self.assertEqual(4, self.seen) - - def test_parse_to_array(self): - records = parse_xml_to_array('test/batch.xml') - self.assertEqual(len(records), 2) - - # should've got two records - self.assertEqual(type(records[0]), Record) - self.assertEqual(type(records[1]), Record) - - # first record should have 18 fields - r = records[0] - self.assertEqual(len(r.getFields()), 18) - - # check the content of a control field - self.assertEqual(r['008'].data, - u'910926s1957 nyuuun eng ') - - # check a data field with subfields - f = r['245'] - self.assertEqual(f.indicator1, '0') - self.assertEqual(f.indicator2, '4') - self.assertEqual(f['a'], u'The Great Ray Charles') - self.assertEqual(f['h'], u'[sound recording].') - - def test_xml(self): - # read in xml to a record - r1 = parse_xml_to_array('test/batch.xml')[0] - # generate xml - xml = record_to_xml(r1) - # parse generated xml - r2 = parse_xml_to_array(StringIO(xml))[0] - - # compare original and resulting record - self.assertEqual(r1.leader, r2.leader) - - f1 = r1.getFields() - f2 = r2.getFields() - self.assertEqual(len(f1), len(f2)) - - pos = 0 - while pos < len(f1): - self.assertEqual(f1[pos].tag, f2[pos].tag) - if f1[pos].isControlField(): - self.assertEqual(f1[pos].data, f2[pos].data) - else: - self.assertEqual(f1[pos].getSubfields(), f2[pos].getSubfields()) - self.assertEqual(f1[pos].indicators, f2[pos].indicators) - pos += 1 - diff --git a/tags/rel-1.6/Changes b/tags/rel-1.6/Changes deleted file mode 100644 index 82613e8..0000000 --- a/tags/rel-1.6/Changes +++ /dev/null @@ -1,103 +0,0 @@ -v1.6 Thu Jan 24 14:17:18 EST 2008 -- marc8 now prints warnings on stderr rather than stdout - -v1.5 Wed Jan 2 21:54:56 EST 2008 -- added pymarc.marcxml.record_to_xml for converting a record to marcxml - and corresponding test in test/xml_test.py - -v1.4 Tue Nov 27 13:44:41 EST 2007 -- map_xml can take multiple files - -v1.3 Tue Nov 20 08:48:51 EST 2007 -- added map_xml to pymarc/marcxml.py for a more functional processing - -v1.2 Tue Sep 4 08:22:44 EDT 2007 -- added pymarc/marcxml.py for marcxml reading support -- added test of marcxml reading: test/xml_test.py -- modified Field so that default indicators and subfields are - not set to a default array in the method signature. This causes - subtle bugs since new arrays are not contructed for - repeated calls to the constructor. - -v1.1 Wed Aug 15 08:34:39 EDT 2007 -- updated the homepage for the package - -v1.0 Wed Jul 18 14:55:19 EDT 2007 -- added marc8_to_unicode() support for applications that need to - convert marc8 data to unicode ... many thanks for Aaron Lav - for allowing relevant bits of code to be lifted from PyZ3950; - also thanks to Mark Matienzo for the idea and for testing. -- added some tests for new marc8_to_unicode functionality. Thanks - to the Library of Congress for providing equivalent marc8 and - utf8 marc record batches to use for constructing test data -- The folowing changes are courtesy of Mark Matienzo: - - modified __str__ methods for Field and Record to produce - data in MARCMaker [1] format. THIS MAY BREAK YOUR CODE. This is - not a complete implementation as support for special character - mnemonics [2] has yet to be added - - modified test cases for string conversion and added tests for - control fields - - added formatField() and isSubjectField() methods to Field and - the author(), uniformtitle(), subjects(), addedentries(), - and location() methods to Record, and tests for those methods - - [1] http://www.loc.gov/marc/makrbrkr.html - [2] http://www.loc.gov/marc/mnemonics.html - -v0.9 Tue Apr 10 21:54:02 EDT 2007 -- various simplifications and pythonifications (thanks Dan Chudnov) -- added easy_install support - -v0.85 Fri Feb 3 13:08:35 EST 2006 -- added default leader template for when records are created - from scratch (thanks Kurt Nordstrom) - -v0.81 Mon Jan 30 16:33:36 EST 2006 -- getFields() wasn't returning all the fields when no tag was passed in. - -v0.8 Mon Jan 30 07:05:36 CST 2006 -- added the ability to read raw marc from strings THIS MAY BREAK - YOUR CODE. pymarc no longer supports passing file paths to the - MARCReader constructor. You need to simply change: - - reader = MARCReader('marc.dat') - - to: - - reader = MARCReader(file('marc.dat')) - - Thanks to Daniel Hoth for suggesting this. It just makes sense to - be able to pass in MARC that you got from a Z39.50 network connection - or database, etc. - -v0.7 Mon Jan 23 15:08:55 EST 2006 -- added addSubfield() to Subfield (thanks Kurt Nordstrom) - -v0.6 Tue Nov 29 20:48:31 CST 2005 -- fixed test suite to run under the unittest that ships with python2.3 -- allow non-integer field tags -- fixed MARCWriter and added test (thanks Mikel Larreategi) - -v0.5 Thu Feb 10 10:01:12 CST 2005 -- handle empty subfields - -v0.4 Wed Feb 2 22:29:33 CST 2005 -- fixed directory validation: thanks Aaron Lav -- added iterator for pymarc.Field for iterating through subfields -- added pymarc.Field.value() for getting a field value easily - -v0.3 Wed Jan 5 17:03:37 CST 2005 -- changed mind about accessors (again): - removed getField() must use getFields() - renamed subfield() to getSubfields() and have it return a list -- added doctest support to pymarc/__init__.py -- added a test batch file of python data - -v0.2 Tue Jan 4 21:01:22 CST 2005 -- removed getField() and renamed getFields() to find() - -v0.11 Mon Jan 3 20:42:19 CST 2005 -- fixed test suite execution - -v0.1 Wed Dec 29 19:54:23 CST 2004 -- initial release diff --git a/tags/rel-1.6/MANIFEST.in b/tags/rel-1.6/MANIFEST.in deleted file mode 100644 index 591cc6d..0000000 --- a/tags/rel-1.6/MANIFEST.in +++ /dev/null @@ -1,3 +0,0 @@ -global-include *.py *.dat -include README MANIFEST.in - diff --git a/tags/rel-1.6/README b/tags/rel-1.6/README deleted file mode 100644 index a917d56..0000000 --- a/tags/rel-1.6/README +++ /dev/null @@ -1,30 +0,0 @@ -DESCRIPTION ------------ - -pymarc is a python library for working with MARC21 bibliographic data -loosely based on the MARC/Perl suite of modules (http://marcpm.sf.net). -More about pymarc can be found at: http://www.textualize.com/pymarc - -INSTALLATION ------------- - -Run the pymarc test suite to make sure things are in order with the -distribution: - - python test.py - -And then install: - - python setup.py install - -For typical usage of this library look at the documentation in -pymarc/__init__.py or at the unittests found in the test directory. - -TODO ----- - -- marcxml writing support -- cleanup with respect to PEP 8 and PEP 257 - -LICENSE: BSD -AUTHOR: Ed Summers diff --git a/tags/rel-1.6/ez_setup.py b/tags/rel-1.6/ez_setup.py deleted file mode 100644 index 38c09c6..0000000 --- a/tags/rel-1.6/ez_setup.py +++ /dev/null @@ -1,228 +0,0 @@ -#!python -"""Bootstrap setuptools installation - -If you want to use setuptools in your package's setup.py, just include this -file in the same directory with it, and add this to the top of your setup.py:: - - from ez_setup import use_setuptools - use_setuptools() - -If you want to require a specific version of setuptools, set a download -mirror, or use an alternate download directory, you can do so by supplying -the appropriate options to ``use_setuptools()``. - -This file can also be run as a script to install or upgrade setuptools. -""" -import sys -DEFAULT_VERSION = "0.6c5" -DEFAULT_URL = "http://cheeseshop.python.org/packages/%s/s/setuptools/" % sys.version[:3] - -md5_data = { - 'setuptools-0.6b1-py2.3.egg': '8822caf901250d848b996b7f25c6e6ca', - 'setuptools-0.6b1-py2.4.egg': 'b79a8a403e4502fbb85ee3f1941735cb', - 'setuptools-0.6b2-py2.3.egg': '5657759d8a6d8fc44070a9d07272d99b', - 'setuptools-0.6b2-py2.4.egg': '4996a8d169d2be661fa32a6e52e4f82a', - 'setuptools-0.6b3-py2.3.egg': 'bb31c0fc7399a63579975cad9f5a0618', - 'setuptools-0.6b3-py2.4.egg': '38a8c6b3d6ecd22247f179f7da669fac', - 'setuptools-0.6b4-py2.3.egg': '62045a24ed4e1ebc77fe039aa4e6f7e5', - 'setuptools-0.6b4-py2.4.egg': '4cb2a185d228dacffb2d17f103b3b1c4', - 'setuptools-0.6c1-py2.3.egg': 'b3f2b5539d65cb7f74ad79127f1a908c', - 'setuptools-0.6c1-py2.4.egg': 'b45adeda0667d2d2ffe14009364f2a4b', - 'setuptools-0.6c2-py2.3.egg': 'f0064bf6aa2b7d0f3ba0b43f20817c27', - 'setuptools-0.6c2-py2.4.egg': '616192eec35f47e8ea16cd6a122b7277', - 'setuptools-0.6c3-py2.3.egg': 'f181fa125dfe85a259c9cd6f1d7b78fa', - 'setuptools-0.6c3-py2.4.egg': 'e0ed74682c998bfb73bf803a50e7b71e', - 'setuptools-0.6c3-py2.5.egg': 'abef16fdd61955514841c7c6bd98965e', - 'setuptools-0.6c4-py2.3.egg': 'b0b9131acab32022bfac7f44c5d7971f', - 'setuptools-0.6c4-py2.4.egg': '2a1f9656d4fbf3c97bf946c0a124e6e2', - 'setuptools-0.6c4-py2.5.egg': '8f5a052e32cdb9c72bcf4b5526f28afc', - 'setuptools-0.6c5-py2.3.egg': 'ee9fd80965da04f2f3e6b3576e9d8167', - 'setuptools-0.6c5-py2.4.egg': 'afe2adf1c01701ee841761f5bcd8aa64', - 'setuptools-0.6c5-py2.5.egg': 'a8d3f61494ccaa8714dfed37bccd3d5d', -} - -import sys, os - -def _validate_md5(egg_name, data): - if egg_name in md5_data: - from md5 import md5 - digest = md5(data).hexdigest() - if digest != md5_data[egg_name]: - print >>sys.stderr, ( - "md5 validation of %s failed! (Possible download problem?)" - % egg_name - ) - sys.exit(2) - return data - - -def use_setuptools( - version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, - download_delay=15 -): - """Automatically find/download setuptools and make it available on sys.path - - `version` should be a valid setuptools version number that is available - as an egg for download under the `download_base` URL (which should end with - a '/'). `to_dir` is the directory where setuptools will be downloaded, if - it is not already available. If `download_delay` is specified, it should - be the number of seconds that will be paused before initiating a download, - should one be required. If an older version of setuptools is installed, - this routine will print a message to ``sys.stderr`` and raise SystemExit in - an attempt to abort the calling script. - """ - try: - import setuptools - if setuptools.__version__ == '0.0.1': - print >>sys.stderr, ( - "You have an obsolete version of setuptools installed. Please\n" - "remove it from your system entirely before rerunning this script." - ) - sys.exit(2) - except ImportError: - egg = download_setuptools(version, download_base, to_dir, download_delay) - sys.path.insert(0, egg) - import setuptools; setuptools.bootstrap_install_from = egg - - import pkg_resources - try: - pkg_resources.require("setuptools>="+version) - - except pkg_resources.VersionConflict, e: - # XXX could we install in a subprocess here? - print >>sys.stderr, ( - "The required version of setuptools (>=%s) is not available, and\n" - "can't be installed while this script is running. Please install\n" - " a more recent version first.\n\n(Currently using %r)" - ) % (version, e.args[0]) - sys.exit(2) - -def download_setuptools( - version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, - delay = 15 -): - """Download setuptools from a specified location and return its filename - - `version` should be a valid setuptools version number that is available - as an egg for download under the `download_base` URL (which should end - with a '/'). `to_dir` is the directory where the egg will be downloaded. - `delay` is the number of seconds to pause before an actual download attempt. - """ - import urllib2, shutil - egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3]) - url = download_base + egg_name - saveto = os.path.join(to_dir, egg_name) - src = dst = None - if not os.path.exists(saveto): # Avoid repeated downloads - try: - from distutils import log - if delay: - log.warn(""" ---------------------------------------------------------------------------- -This script requires setuptools version %s to run (even to display -help). I will attempt to download it for you (from -%s), but -you may need to enable firewall access for this script first. -I will start the download in %d seconds. - -(Note: if this machine does not have network access, please obtain the file - - %s - -and place it in this directory before rerunning this script.) ----------------------------------------------------------------------------""", - version, download_base, delay, url - ); from time import sleep; sleep(delay) - log.warn("Downloading %s", url) - src = urllib2.urlopen(url) - # Read/write all in one block, so we don't create a corrupt file - # if the download is interrupted. - data = _validate_md5(egg_name, src.read()) - dst = open(saveto,"wb"); dst.write(data) - finally: - if src: src.close() - if dst: dst.close() - return os.path.realpath(saveto) - -def main(argv, version=DEFAULT_VERSION): - """Install or upgrade setuptools and EasyInstall""" - - try: - import setuptools - except ImportError: - egg = None - try: - egg = download_setuptools(version, delay=0) - sys.path.insert(0,egg) - from setuptools.command.easy_install import main - return main(list(argv)+[egg]) # we're done here - finally: - if egg and os.path.exists(egg): - os.unlink(egg) - else: - if setuptools.__version__ == '0.0.1': - # tell the user to uninstall obsolete version - use_setuptools(version) - - req = "setuptools>="+version - import pkg_resources - try: - pkg_resources.require(req) - except pkg_resources.VersionConflict: - try: - from setuptools.command.easy_install import main - except ImportError: - from easy_install import main - main(list(argv)+[download_setuptools(delay=0)]) - sys.exit(0) # try to force an exit - else: - if argv: - from setuptools.command.easy_install import main - main(argv) - else: - print "Setuptools version",version,"or greater has been installed." - print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)' - - - -def update_md5(filenames): - """Update our built-in md5 registry""" - - import re - from md5 import md5 - - for name in filenames: - base = os.path.basename(name) - f = open(name,'rb') - md5_data[base] = md5(f.read()).hexdigest() - f.close() - - data = [" %r: %r,\n" % it for it in md5_data.items()] - data.sort() - repl = "".join(data) - - import inspect - srcfile = inspect.getsourcefile(sys.modules[__name__]) - f = open(srcfile, 'rb'); src = f.read(); f.close() - - match = re.search("\nmd5_data = {\n([^}]+)}", src) - if not match: - print >>sys.stderr, "Internal error!" - sys.exit(2) - - src = src[:match.start(1)] + repl + src[match.end(1):] - f = open(srcfile,'w') - f.write(src) - f.close() - - -if __name__=='__main__': - if len(sys.argv)>2 and sys.argv[1]=='--md5update': - update_md5(sys.argv[2:]) - else: - main(sys.argv[1:]) - - - - - diff --git a/tags/rel-1.6/pymarc/__init__.py b/tags/rel-1.6/pymarc/__init__.py deleted file mode 100644 index e2839d7..0000000 --- a/tags/rel-1.6/pymarc/__init__.py +++ /dev/null @@ -1,73 +0,0 @@ -# __init__.py - -r''' - -The pymarc module provides an API for reading, writing and modifying -MARC records. MARC (MAchine Readable Cataloging) is a metadata format for -bibliographic data. More about MARC can be found at the Library of Congress: -http://lcweb.loc.gov/marc - -Below are some common examples of how you might want to use pymarc. If you -run across an example that you think should be here please contribute it -by writing to the author. - -1. Reading a batch of records and printing out the 245 subfield a. If you - are curious this example uses the batch file available in the distribution. - - >>> from pymarc import MARCReader - >>> reader = MARCReader( 'test/marc.dat' ) - >>> for record in reader: - ... print record['245']['a'] - The pragmatic programmer : - Programming Python / - Learning Python / - Python cookbook / - Python programming for the absolute beginner / - Web programming : - Python programming on Win32 / - Python programming : - Python Web programming / - Core python programming / - Python and Tkinter programming / - Game programming with Python, Lua, and Ruby / - Python programming patterns / - Python programming with the Java class libraries : - Learn to program using Python : - Programming with Python / - BSD Sockets programming from a multi-language perspective / - Design patterns : - Introduction to algorithms / - ANSI Common Lisp / - -2. Creating a record and writing it out to a file. - - >>> from pymarc import Record, Field - >>> record = Record() - >>> record.add_field( \ - ... Field( \ - ... tag = '245', - ... indicators = ['0','1'], - ... subfields = [ \ - ... 'a', 'The pragmatic programmer : ', - ... 'b', 'from journeyman to master /', - ... 'c', 'Andrew Hunt, David Thomas.' ] ) ) - >>> out = file( 'file.dat', 'w' ) - >>> out.write( record.as_marc21() ) - -''' - -__version__ = '1.0' - -from record import * -from field import * -from exceptions import * -from reader import * -from writer import * -from constants import * -from marc8 import marc8_to_unicode, MARC8_to_Unicode -from marcxml import * - -if __name__ == "__main__": - import doctest - doctest.testmod() - diff --git a/tags/rel-1.6/pymarc/constants.py b/tags/rel-1.6/pymarc/constants.py deleted file mode 100644 index bd148c2..0000000 --- a/tags/rel-1.6/pymarc/constants.py +++ /dev/null @@ -1,7 +0,0 @@ -LEADER_LEN = 24 -DIRECTORY_ENTRY_LEN = 12 -SUBFIELD_INDICATOR = chr( 0x1F ) -END_OF_FIELD = chr( 0x1E ) -END_OF_RECORD = chr( 0x1D ) - - diff --git a/tags/rel-1.6/pymarc/exceptions.py b/tags/rel-1.6/pymarc/exceptions.py deleted file mode 100644 index 4be03df..0000000 --- a/tags/rel-1.6/pymarc/exceptions.py +++ /dev/null @@ -1,30 +0,0 @@ -class pymarcException( Exception ): - pass - -class RecordLengthInvalid( pymarcException): - def __str__( self ): - return( "Invalid record length in first 5 bytes of record" ) - -class RecordLeaderInvalid( pymarcException ): - def __str__ ( self ): - return "Unable to extract record leader" - -class RecordDirectoryInvalid( pymarcException ): - def __str__( self ): - return "Invalid directory" - -class NoFieldsFound( pymarcException ): - def __str__ ( self ): - return "Unable to locate fields in record data" - -class BaseAddressInvalid( pymarcException ): - def __str__ ( self ): - return "Base address exceeds size of record" - -class WriteNeedsRecord( pymarcException ): - def __str__( self ): - return "Write requires a pymarc.Record object as an argument" - -class NoActiveFile( pymarcException ): - def __str__( self ): - return "There is no active file to write to in call to write" diff --git a/tags/rel-1.6/pymarc/field.py b/tags/rel-1.6/pymarc/field.py deleted file mode 100644 index 9778b76..0000000 --- a/tags/rel-1.6/pymarc/field.py +++ /dev/null @@ -1,167 +0,0 @@ -from constants import * -from exceptions import * - -class Field( object ): - - def __init__( self, tag, indicators=None, subfields=None, data='' ): - """ - Field() pass in the field tag, indicators and subfields for the tag. - - field = Field( \ - tag = '245', - indicators = ['0','1'], - subfields = [ \ - 'a', 'The pragmatic programmer : ', - 'b', 'from journeyman to master /', - 'c', 'Andrew Hunt, David Thomas.' ] - - If you want to create a control field you don't pas in the indicators - and use a data parameter rather than a subfields parameter: - - field = Field( tag='001', data='fol05731351' ) - - """ - if indicators == None: - indicators = [] - if subfields == None: - subfields = [] - - tag = "%03s" % tag - if ( tag < '010' ): - self.tag = tag - self.data = data - else: - self.tag = tag - self.indicators = indicators - self.indicator1 = indicators[0] - self.indicator2 = indicators[1] - self.subfields = subfields - - def __iter__(self): - self.__pos = 0 - return self - - def __str__( self ): - """ - A Field object in a string context will return the tag, indicators - and subfield as a string. This follows MARCMaker format; see [1] - and [2] for further reference. Special character mnemonic strings - have yet to be implemented (see [3]), so be forewarned. Note also - for complete MARCMaker compatibility, you will need to change your - newlines to DOS format ('\r\n'). - - [1] http://www.loc.gov/marc/makrbrkr.html#mechanics - [2] http://search.cpan.org/~eijabb/MARC-File-MARCMaker/ - [3] http://www.loc.gov/marc/mnemonics.html - """ - if ( self.isControlField() ): - text = "=%s %s" % ( self.tag, self.data.replace(' ','\\') ) - else: - text = "=%s " % ( self.tag ) - for indicator in self.indicators: - if indicator in (' ','\\'): - text += "\\" - else: - text += "%s" % indicator - for subfield in self: - text += ("$%s%s" % subfield) - return text - - def __getitem__( self, subfield ): - """ - Retrieve the first subfield with a given subfield code in a field: - - field['a'] - - Handy for quick lookups. - """ - subfields = self.getSubfields( subfield ) - if len(subfields) > 0: return subfields[0] - return None - - def next( self ): - while self.__pos < len(self.subfields): - subfield = ( self.subfields[ self.__pos ], \ - self.subfields[ self.__pos+1 ] ) - self.__pos += 2 - return subfield - raise StopIteration - - def value( self ): - """ - Returns the field as a string without tag, indicators, and - subfield indicators. - """ - if self.isControlField(): - return self.data - string = "" - for subfield in self: - string += subfield[1] - return string - - def getSubfields( self, *codes ): - """ - getSubfields() accepts one or more subfield codes and will return a list - of subfield values. The order of the subfield values in the list - will be the order that they appear in the field. - - print field.getSubfields( 'a' ) - - print field.getSubfields( 'a', 'b', 'z' ) - """ - values = [] - for subfield in self: - if subfield[0] in codes: - values.append( subfield[1] ) - return values - - def addSubfield( self, code, value ): - """ - Adds a subfield code/value pair to the field. - - field.addSubfield('u', 'http://www.loc.gov') - """ - self.subfields.append(code) - self.subfields.append(value) - - def isControlField( self ): - """ - returns true or false if the field is considered a control field. - Control fields lack indicators and subfields. - """ - if self.tag < '010': - return True - return False - - def asMARC21( self ): - """ - used during conversion of a field to raw marc - """ - if self.isControlField(): - return self.data + END_OF_FIELD - marc = str(self.indicator1) + str(self.indicator2) - for subfield in self: - marc += SUBFIELD_INDICATOR + subfield[0] + subfield[1] - return marc + END_OF_FIELD - - def formatField( self ): - """ - Returns the field as a string without tag, indicators, and subfield indicators. Like pymarc.Field.value(), but prettier (adds spaces, formats subject headings). - """ - if self.isControlField(): return self.data - fielddata = '' - for subfield in self: - if not self.isSubjectField(): - fielddata += ' %s' % subfield[1] - else: - if subfield[0] not in ('v','x','y','z'): - fielddata += ' %s' % subfield[1] - else: fielddata += ' -- %s' % subfield[1] - return fielddata.strip() - - def isSubjectField( self ): - """ - returns True or False if the field is considered a subject field - used by formatField - """ - if self.tag.startswith('6'): return True - return False diff --git a/tags/rel-1.6/pymarc/marc8.py b/tags/rel-1.6/pymarc/marc8.py deleted file mode 100644 index 6c54284..0000000 --- a/tags/rel-1.6/pymarc/marc8.py +++ /dev/null @@ -1,103 +0,0 @@ -# see http://www.loc.gov/marc/specifications/speccharmarc8.html - -import unicodedata -import marc8_mapping - -from sys import stderr - -def marc8_to_unicode(marc8): - converter = MARC8_to_Unicode() - return converter.translate(marc8) - -class MARC8_to_Unicode: - """Converts MARC-8 to Unicode. Note that currently, unicode strings - aren't normalized, and some codecs (e.g. iso8859-1) will fail on - such strings. When I can require python 2.3, this will go away. - - Warning: MARC-8 EACC (East Asian characters) makes some - distinctions which aren't captured in Unicode. The LC tables give - the option of mapping such characters either to a Unicode private - use area, or a substitute character which (usually) gives the - sense. I've picked the second, so this means that the MARC data - should be treated as primary and the Unicode data used for display - purposes only. (If you know of either of fonts designed for use - with LC's private-use Unicode assignments, or of attempts to - standardize Unicode characters to allow round-trips from EACC, - or if you need the private-use Unicode character translations, - please inform me, asl2@pobox.com.""" - - basic_latin = 0x42 - ansel = 0x45 - def __init__ (self, G0 = basic_latin, G1 = ansel): - self.g0 = G0 - self.g1 = G1 - - def is_multibyte (self, charset): - return charset == 0x31 - - g0_set = set(['(', ',', '$']) - g1_set = set([')', '-', '$']) - - def translate (self, s): - uni_list = [] - combinings = [] - pos = 0 - while pos < len (s): -## http://www.loc.gov/marc/specifications/speccharmarc8.html - if s[pos] == '\x1b': - next = s[pos+1] - if (next in self.g0_set): - if s[pos+2] == ',' and next == '$': - pos += 1 - self.g0 = ord(s[pos+2]) - pos = pos + 3 - continue - elif next in self.g1_set: - if s[pos+2] == '-' and next == '$': - pos += 1 - self.g1 = ord(s[pos+2]) - pos = pos + 3 - continue - - mb_flag = self.is_multibyte(self.g0) - - if mb_flag: - d = (ord (s[pos]) * 65536 + - ord (s[pos+1]) * 256 + - ord (s[pos+2])) - pos += 3 - else: - d = ord (s[pos]) - pos += 1 - - if (d < 0x20 or - (d > 0x80 and d < 0xa0)): - uni = unichr (d) - continue - - try: - if d > 0x80 and not mb_flag: - (uni, cflag) = marc8_mapping.codesets [self.g1] [d] - else: - (uni, cflag) = marc8_mapping.codesets [self.g0] [d] - except KeyError, e: - print stderr, "couldn't find", self.g0, self.g1, d, str(e) - uni = ord(' ') - cflag = False - - if cflag: - combinings.append (unichr (uni)) - else: - uni_list.append (unichr (uni)) - if len (combinings) > 0: - uni_list += combinings - combinings = [] - - # what to do if combining chars left over? - uni_str = u"".join (uni_list) - - # unicodedata.normalize not available until Python 2.3 - if hasattr (unicodedata, 'normalize'): - uni_str = unicodedata.normalize ('NFC', uni_str) - - return uni_str diff --git a/tags/rel-1.6/pymarc/marc8_mapping.py b/tags/rel-1.6/pymarc/marc8_mapping.py deleted file mode 100644 index e69de29..0000000 diff --git a/tags/rel-1.6/pymarc/marcxml.py b/tags/rel-1.6/pymarc/marcxml.py deleted file mode 100644 index 157d978..0000000 --- a/tags/rel-1.6/pymarc/marcxml.py +++ /dev/null @@ -1,136 +0,0 @@ -from xml.sax import make_parser -from xml.sax.handler import ContentHandler, feature_namespaces, \ - feature_namespace_prefixes -from pymarc import Record, Field, MARC8_to_Unicode -import elementtree.ElementTree as ET - -class XmlHandler(ContentHandler): - """ - You can subclass XmlHandler and add your own process_record - method that'll be passed a pymarc.Record as it becomes - available. This could be useful if you want to stream the - records elsewhere (like to a rdbms) without having to store - them all in memory. - """ - - def __init__(self): - self.records = [] - self._record = None - self._field = None - self._subfield_code = None - self._text = [] - - def startElementNS(self, name, qname, attrs): - el = name[1] - self._text = [] - - if el == 'record': - self._record = Record() - elif el == 'controlfield': - tag = attrs.getValue((None, u'tag')) - self._field = Field(tag) - elif el == 'datafield': - tag = attrs.getValue((None, u'tag')) - ind1 = attrs.getValue((None, u'ind1')) - ind2 = attrs.getValue((None, u'ind2')) - self._field = Field(tag, [ind1, ind2]) - elif el == 'subfield': - self._subfield_code = attrs[(None, 'code')] - - def endElementNS(self, name, qname): - el = name[1] - text = u''.join(self._text) - - if el == 'record': - self.process_record(self._record) - self._record = None - elif el == 'leader': - self._record.leader = text - elif el == 'controlfield': - self._field.data = text - self._record.addField(self._field) - self._field = None - elif el == 'datafield': - self._record.addField(self._field) - self._field = None - elif el == 'subfield': - self._field.subfields.append(self._subfield_code) - self._field.subfields.append(text) - self._subfield_code = None - - self._text = [] - - def characters(self, chars): - self._text.append(chars) - - def process_record(self, record): - self.records.append(record) - -def parse_xml(file, handler): - """ - parse a file with a given subclass of xml.sax.handler.ContentHandler - """ - parser = make_parser() - parser.setContentHandler(handler) - parser.setFeature(feature_namespaces, 1) - parser.parse(file) - -def map_xml(f, *files): - """ - map a function onto the file, so that for each record that is - parsed the function f will get called with the extracted record - - def do_it(r): - print r - - map_xml(do_it, 'marc.xml') - """ - parser = make_parser() - handler = XmlHandler() - handler.process_record = f - for file in files: - parse_xml(file, handler) - -def parse_xml_to_array(file): - """ - parse an xml file and return the records as an array - """ - handler = XmlHandler() - parse_xml(file, handler) - return handler.records - -def record_to_xml(record): - """ - converts a record object to a chunk of xml - """ - - # helper for converting non-unicode data to unicode - # TODO: maybe should set g0 and g1 appropriately using 066 $a and $b? - marc8 = MARC8_to_Unicode() - def translate(x): - if type(x) == unicode: return x - else: return marc8.translate(x) - - root = ET.Element('record') - leader = ET.SubElement(root, 'leader') - leader.text = record.leader - for field in record: - if field.isControlField(): - f = ET.SubElement(root, 'controlfield') - f.set('tag', field.tag) - f.text = translate(field.data) - else: - f = ET.SubElement(root, 'datafield') - f.set('tag', field.tag) - f.set('ind1', field.indicators[0]) - f.set('ind2', field.indicators[1]) - for subfield in field: - sf = ET.SubElement(f, 'subfield') - sf.set('code', subfield[0]) - sf.text = translate(subfield[1]) - - return ET.tostring(root) - - - - diff --git a/tags/rel-1.6/pymarc/reader.py b/tags/rel-1.6/pymarc/reader.py deleted file mode 100644 index 8258868..0000000 --- a/tags/rel-1.6/pymarc/reader.py +++ /dev/null @@ -1,56 +0,0 @@ -from pymarc import Record, Field -from constants import END_OF_RECORD -from exceptions import * -from types import * -from cStringIO import StringIO - -class Reader( object ): - """ - A base class for all iterating readers in the pymarc package. - """ - def __iter__( self ): - return self - -class MARCReader( Reader ): - """ - An iterator class for reading a file of MARC21 records. - - Simple usage: - - from pymarc import MARCReader - - ## pass in a file object - reader = MARCReader(file('file.dat')) - for record in reader: - ... - - ## pass in marc in transmission format - reader = MARCReader(rawmarc) - for record in reader: - ... - - """ - - def __init__(self, f): - """ - The constructor which you can pass either raw marc or a file object. - """ - if (type(f) == FileType): self.fh = f - else: self.fh = StringIO(f) - - def next( self ): - """ - To support iteration. - """ - first5 = self.fh.read( 5 ) - if not first5: - raise StopIteration - if len( first5 ) < 5: - raise RecordLengthInvalid - - length = int( first5 ) - chunk = self.fh.read( length - 5 ) - chunk = first5 + chunk - r = Record( chunk ) - return r - diff --git a/tags/rel-1.6/pymarc/record.py b/tags/rel-1.6/pymarc/record.py deleted file mode 100644 index 92062bb..0000000 --- a/tags/rel-1.6/pymarc/record.py +++ /dev/null @@ -1,289 +0,0 @@ -from exceptions import * -from constants import * -from field import * -from types import * -import string -import re - - -class Record( object ): - """ - Record - - A class for representing a MARC record. Each Record object is made up of - multiple Field objects. You'll probably want to look at the docs for Field - to see how to fully use a Record object. - - Basic usage: - - field = Field( \ - tag = '245', - indicators = ['0','1'], - subfields = [ \ - 'a', 'The pragmatic programmer : ', - 'b', 'from journeyman to master /', - 'c', 'Andrew Hunt, David Thomas.' ] - - record.addField( field ) - - Or creating a record from a chunk of MARC in transmission format: - - record = Record( data=chunk ) - - Or getting a record as serialized MARC21. - - raw = record.asMARC21() - - You'll normally want to use a MARCReader object to iterate through - MARC records in a file. - """ - - def __init__( self, data='' ): - self.leader = (' '*10) + '22' + (' '*8) + '4500' - self.fields = list() - self.pos = 0 - if len(data) > 0: - ok = self.decodeMARC( data ) - - def __str__( self ): - """ - In a string context a Record object will return a prettified version - of the record in MARCMaker format. See the docstring for Field.__str__ - for more information. - """ - # join is significantly faster than concatenation - text = "=LDR %s\n" % self.leader - text += string.join( map( str, self.fields ), "\n" ) - text += '\n' - return text - - def __getitem__( self, tag ): - """ - Allows a shorthand lookup by tag: - - record["245"] - - """ - fields = self.getFields( tag ) - if len(fields) > 0: return fields[0] - return None - - def __iter__( self ): - self.__pos = 0 - return self - - def next(self): - if self.__pos >= len( self.fields ): - raise StopIteration - self.__pos += 1 - return self.fields[ self.__pos-1 ] - - def addField( self, *fields ): - """ - addField() will add pymarc.Field objects to a Record object. - Optionally you can pass in multiple fields. - """ - self.fields.extend(fields) - - def getFields( self, *args ): - """ - When passed a tag ( '245' ) getFields() will return a list of all the - fields in a record with a given tag. - - title = record.getFields( '245' ) - - If no fields with the specified - tag are found then an empty list is returned. If you are interested - in more than one tag you can pass in a list: - - subjects = record.getFields( '600', '610', '650' ) - - If no tag is passed in to fields() a list of all the fields will be - returned. - """ - if (len(args) == 0): - return self.fields - - return [f for f in self.fields if f.tag in args] - - def decodeMARC( self, marc ): - """ - decodeMARC() accepts a MARC record in transmission format as a - a string argument, and will populate the object based on the data - found. The Record constructor actually uses decodeMARC() behind - the scenes when you pass in a chunk of MARC data to it. - - """ - - # extract record leader - self.leader = marc[ 0 : LEADER_LEN ] - if len( self.leader ) != LEADER_LEN: raise RecordLeaderInvalid - - # extract the byte offset where the record data starts - baseAddress = int( marc[ 12 : 17 ] ) - if baseAddress <= 0: raise BaseAddressNotFound - if baseAddress >= len( marc ): raise BaseAddressInvalid - - # extract directory, baseAddress-1 is used since the - # director ends with an END_OF_FIELD byte - directory = marc[ LEADER_LEN : baseAddress-1 ] - - # determine the number of fields in record - if len(directory) % DIRECTORY_ENTRY_LEN <> 0: - raise RecordDirectoryInvalid - numFields = len( directory ) / DIRECTORY_ENTRY_LEN - - # add fields to our record using directory offsets - fieldNum = 0 - while ( fieldNum < numFields ): - entryStart = fieldNum * DIRECTORY_ENTRY_LEN - entryEnd = entryStart + DIRECTORY_ENTRY_LEN - entry = directory[ entryStart : entryEnd ] - entryTag = entry[ 0 : 3 ] - entryLength = int( entry[ 3 : 7 ] ) - entryOffset = int( entry[ 7 : 12 ] ) - entryData = marc[ baseAddress + entryOffset : - baseAddress + entryOffset + entryLength - 1 ] - - if entryTag < '010': - field = Field( tag=entryTag, data=entryData ) - else: - subfields = list() - subs = entryData.split( SUBFIELD_INDICATOR ) - i1 = subs[0][0] - i2 = subs[0][1] - for subfield in subs[1:]: - if len(subfield) == 0: continue - code = subfield[0] - data = subfield[1:] - subfields.append( code ) - subfields.append( data ) - field = Field( - tag = entryTag, - indicators = [ i1, i2 ], - subfields = subfields ) - - self.addField( field ) - fieldNum += 1 - - if fieldNum == 0: raise NoFieldsFound - - def asMARC21( self ): - """ - returns the record serialized as MARC21 - """ - fields = '' - directory = '' - offset = 0 - - # build the directory - # each element of the directory includes the tag, the byte length of - # the field and the offset from the base address where the field data - # can be found - for field in self.fields: - fieldData = field.asMARC21() - fields += fieldData - directory += "%03d%04d%05d" % (int(field.tag),len(fieldData),offset) - offset += len( fieldData ) - - # directory ends with an end of field - directory += END_OF_FIELD - - # field data ends with an end of record - fields += END_OF_RECORD - - # the base address where the directory ends and the field data begins - baseAddress = LEADER_LEN + len(directory) - - # figure out the length of the record - recordLength = baseAddress + len(fields) - - # update the leader with the current record length and base address - # the lengths are fixed width and zero padded - self.leader = "%05d%s%05d%s" % \ - ( recordLength, self.leader[5:12], baseAddress, self.leader[17:] ) - - # return the encoded record - return self.leader + directory + fields - - def title( self ): - """ - Returns the title of the record (245 $a an $b). - """ - title = None - try: - title = self['245']['a'] - title += self['245']['b'] - except TypeError, e: - pass - return title - - def isbn( self ): - """ - Returns an ISBN if appropriate. If not present None will - be returned. - """ - isbn = None - try: - # if anyone ever cares alot about performance - # this compilation could be moved out and compiled once - isbnPattern = re.compile( '^([0-9A-Za-z]+)' ) - isbn = isbnPattern.match( self["020"]["a"] ).group(1) - except Exception, e: - pass - return isbn - - def author( self ): - if self['100']: - return self['100'].formatField() - elif self['110']: - return self['110'].formatField() - elif self['111']: - return self['111'].formatField() - return None - - def uniformtitle( self ): - if self['130']: - return self['130'].formatField() - elif self['240']: - return self['240'].formatField() - return None - - def subjects( self ): - """ - Note: Fields 690-699 are considered "local" added entry fields but - occur with some frequency in OCLC and RLIN records. - """ - subjlist = self.getFields ( - '600', '610', '611', '630', '648', '650', '651', '653', '654', - '655', '656', '657', '658', '662', '690', '691', '696', '697', - '698', '699' - ) - return subjlist - - def addedentries( self ): - """ - Note: Fields 790-799 are considered "local" added entry fields but - occur with some frequency in OCLC and RLIN records. - """ - aelist = self.getFields ( - '700', '710', '711', '720', '730', '740', '752', '753', '754', - '790', '791', '792', '793', '796', '797', '798', '799' - ) - return aelist - - def location( self ): - loc = self.getFields('852') - return loc - - def notes( self ): - # todo - pass - - def publisher( self ): - # todo - pass - - def pubyear( self ): - # todo - pass diff --git a/tags/rel-1.6/pymarc/writer.py b/tags/rel-1.6/pymarc/writer.py deleted file mode 100644 index 23c32ff..0000000 --- a/tags/rel-1.6/pymarc/writer.py +++ /dev/null @@ -1,49 +0,0 @@ -from pymarc import Record, Field, WriteNeedsRecord, NoActiveFile -from types import * -from cStringIO import StringIO - -class Writer( object ): - - def write( self ): - pass - -class MARCWriter( Writer ): - """ - A class for writing MARC21 records in transmission format. - - Simple usage: - - from pymarc import MARCWriter - - ## pass in a file - writer = MARCWriter(file('file.dat','w')) - writer.write(record) - - ## use StringIO if you want to write to a string - string = StringIO() - writer = MARCWriter(string) - writer.write(record) - print string - """ - - def __init__(self, f): - """ - You need to pass in a file like object. - """ - self.fh = f - - def write(self, record): - """ - Writes a record. - """ - if type(record) != Record: - raise WriteNeedsRecord - self.fh.write(record.asMARC21()) - - def close( self ): - """ - Closes the file. - """ - self.fh.close() - self.fh = None - diff --git a/tags/rel-1.6/setup.py b/tags/rel-1.6/setup.py deleted file mode 100644 index 2c3985b..0000000 --- a/tags/rel-1.6/setup.py +++ /dev/null @@ -1,39 +0,0 @@ -# bootstrap easy_install -import ez_setup -ez_setup.use_setuptools() - -from setuptools import setup -from sys import version_info - -classifiers = """\ -Intended Audience :: Education -Intended Audience :: Developers -Intended Audience :: Information Technology -License :: OSI Approved :: BSD License -Programming Language :: Python -Topic :: Text Processing :: General -""" - -# workaround for older pythons that don't -# understand classifiers - -if version_info < (2, 3): - _setup = setup - def setup(**kwargs): - if kwargs.has_key("classifiers"): - del kwargs["classifiers"] - _setup(**kwargs) - -setup( - name = 'pymarc', - version = '1.6', - url = 'http://cheeseshop.python.org/pypi/pymarc', - author = 'Ed Summers', - author_email = 'ehs@pobox.com', - license = 'http://www.opensource.org/licenses/bsd-license.php', - packages = [ 'pymarc' ], - description = "read, write and modify MARC bibliographic data", - classifiers = filter( None, classifiers.split("\n") ), - test_suite = 'test' -) - diff --git a/tags/rel-1.6/test.py b/tags/rel-1.6/test.py deleted file mode 100644 index 8ea1517..0000000 --- a/tags/rel-1.6/test.py +++ /dev/null @@ -1,19 +0,0 @@ -import unittest -import test.record -import test.field -import test.reader -import test.encode -import test.writer - -def suite(): - suite = unittest.TestSuite() - suite.addTest( test.record.suite() ) - suite.addTest( test.field.suite() ) - suite.addTest( test.reader.suite() ) - suite.addTest( test.encode.suite() ) - suite.addTest( test.writer.suite() ) - return suite - -runner = unittest.TextTestRunner() -runner.run( suite() ) - diff --git a/tags/rel-1.6/test/__init__.py b/tags/rel-1.6/test/__init__.py deleted file mode 100644 index 4c41d24..0000000 --- a/tags/rel-1.6/test/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -import record -import field -import reader -import marc8 diff --git a/tags/rel-1.6/test/bad.dat b/tags/rel-1.6/test/bad.dat deleted file mode 100644 index 4800dc9..0000000 --- a/tags/rel-1.6/test/bad.dat +++ /dev/null @@ -1,191 +0,0 @@ - - Date: 03/15/2007 - - When searching the Florida State University Library catalog, - you sent the following records: - - -FMT BK -LDR 00000nam 2200409Ia 4500 -006 m d -007 cr cnu|||unuuu -008 041015s2004 caua sb s000|0 eng d -020 |a 1417545372 (electronic bk.) -035 |a (OCoLC)56733780 -0359 |a AMR9920 |b FS -TKR |a (Source)B0013464- 321 -TKR |a (FTaSU)NETLIBY20050112 -OWN |a FS -040 |a N$T |c N$T -05014 |a PS1303 |b .S25 2004eb -08204 |a 818/.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24510 |a Mark Twain's helpful hints for good living |h [electronic resource] : |b a handbook for the damned human race / |c edited by Lin Salamo, Victor Fischer, and Michael B. Frank of the Mark Twain Project. -260 |a Berkeley : |b University of California Press, |c c2004. -300 |a xiv, 207 p. : |b ill. |c 21 cm. -4901 |a Jumping frogs ; |v 2 -504 |a Includes bibliographical references (p. 203-206). -533 |a Electronic reproduction. |b Boulder, Colo. : |c NetLibrary, |d 2004. |n Available via World Wide Web. |n Access may be limited to NetLibrary affiliated libraries. -650 0 |a Conduct of life |v Quotations, maxims, etc. -650 0 |a Conduct of life |v Literary collections. -60010 |a Twain, Mark, |d 1835-1910 |v Quotations. -655 7 |a Electronic books. |2 local -7001 |a Salamo, Lin. -7001 |a Fischer, Victor, |d 1942- -7001 |a Frank, Michael B. -7102 |a Bancroft Library. |b Mark Twain Project. -7102 |a NetLibrary, Inc. -7761 |c Original |z 0520242459 |w (DLC) 2003024224 |w (OCoLC)53398020 -8001 |a Twain, Mark, |d 1835-1910. |t Jumping frogs ; |v 2. -85640 |3 Bibliographic record display |u http://www.netLibrary.com/urlapi.asp?action=summary&v=1&bookid=119359 |z An electronic book accessible through the World Wide Web; click for information -CAT |a NCRD |b 20 |c 20041222 -NCO |a I -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST8 |0 HOL |1 FSU60-002387996 |n 8 |a FTaSU |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -LOC8 |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -SYS 002249954 - -FMT BK -LDR 00000pam 2200301 a 4500 -008 040820s2004 nyu b 000|0 eng -010 |a 2004057341 -020 |a 0142437751 -035 |a (OCoLC)56413662 -0359 |a AMS5114 |b FS -TKR |a (Source)ONIFS141- 49 -OWN |a FS -040 |a DLC |c DLC |d YDX |d FDA -049 |a FDAA ksm -05000 |a PS1302 |b .Q56 2004 -08200 |a 818/.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24514 |a The portable Mark Twain / |c edited with an introduction by Tom Quirk. -260 |a New York : |b Penguin Books, |c 2004. -300 |a liv, 583 p. ; |c 20 cm. -440 0 |a Penguin classics -504 |a Includes bibliographical references (p. [xli]-xlv). -60010 |a Twain, Mark, |d 1835-1910 |v Correspondence. -650 0 |a Humorous stories, American. -650 0 |a Authors, American |y 19th century |v Correspondence. -7001 |a Quirk, Tom, |d 1946- -CAT |a NCRD |b 20 |c 20050218 -CAT |a NUPD |b 20 |c 20050324 -NCO |a blank -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST0 |0 Z30 |1 002255004000010 |b FSULC |c GEN |o BOOK |d 01 |f N |r FSU60-002393331 |n 0 |h PS1302 |i .Q56 2004 |3 Book Sort |4 STROZIER LIBRARY |6 Regular Loan -LOC0 |b FSULC |c GEN |o BOOK |h PS1302 |i .Q56 2004 |3 Book Sort |4 STROZIER LIBRARY |6 Regular Loan -SYS 002255004 - -FMT BK -LDR 00000nam 2200361Ia 4500 -006 m d -007 cr cnu|||unuuu -008 031127s2003 cau s 000|i eng d -020 |a 0520900995 (electronic bk.) -035 |a (OCoLC)53798433 -0359 |a ALU9407 |b FS -TKR |a (Source)B0011135- 96 -TKR |a (FTaSU)NETLIBY20040302 -OWN |a FS -040 |a N$T |c N$T -05014 |a PS1331 |b .A4 2003eb -08214 |a 818.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24010 |a Correspondence. |k Selections -24510 |a Mark Twain's letters 1876-1880. |n Volume 2, |p 1877 |h [electronic resource] / |c edited by the Mark Twain Project. -250 |a Electronic ed. -260 |a Berkeley, Calif. : |b Published for the University of California Press by the Mark Twain Project of the Bancroft Library, |c 2003. -538 |a Mode of access: World Wide Web. -506 |a Made available through NetLibrary; access may be limited to NetLibrary affiliated libraries. -500 |a Title from ebook title screen. -60010 |a Twain, Mark, |d 1835-1910 |v Correspondence. -650 0 |a Authors, American |y 19th century |v Correspondence. -650 0 |a Humorists, American |y 19th century |v Correspondence. -655 7 |a Electronic books. |2 local -7102 |a Bancroft Library. |b Mark Twain Project. -7102 |a NetLibrary, Inc. -8564 |3 Bibliographic record display |u http://www.netLibrary.com/urlapi.asp?action=summary&v=1&bookid=100194 |z An electronic book accessible through the World Wide Web; click for information -CAT |a NCRD |b 20 |c 20040224 -NCO |a I -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST8 |0 HOL |1 FSU60-002178151 |n 8 |a FTaSU |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -LOC8 |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -SYS 002042593 - -FMT BK -LDR 00000nam 2200373Ia 4500 -006 m d -007 cr cnu|||unuuu -008 031127s2003 cau s 000|i eng d -020 |a 0520900987 (electronic bk.) -035 |a (OCoLC)53798432 -0359 |a ALU9406 |b FS -TKR |a (Source)B0011135- 95 -TKR |a (FTaSU)NETLIBY20040302 -OWN |a FS -040 |a N$T |c N$T -05014 |a PS1331 |b .A4 2003eb -08214 |a 818.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24010 |a Correspondence. |k Selections -24510 |a Mark Twain's letters 1876-1880. |n Volume 1, |p 1876 |h [electronic resource] / |c edited by the Mark Twain Project. -250 |a Electronic ed. -260 |a Berkeley, Calif. : |b Published for the University of California Press by the Mark Twain Project of the Bancroft Library, |c 2003. -538 |a Mode of access: World Wide Web. -506 |a Made available through NetLibrary; access may be limited to NetLibrary affiliated libraries. -500 |a Title from ebook title screen. -60010 |a Twain, Mark, |d 1835-1910 |v Correspondence. -650 0 |a Authors, American |y 19th century |v Correspondence. -650 0 |a Humorists, American |y 19th century |v Correspondence. -655 7 |a Electronic books. |2 local -7102 |a Bancroft Library. |b Mark Twain Project. -7102 |a NetLibrary, Inc. -7102 |a NetLibrary, Inc. -8564 |3 Bibliographic record display |u http://www.netLibrary.com/urlapi.asp?action=summary&v=1&bookid=100193 |z An electronic book accessible through the World Wide Web; click for information -CAT |a NCRD |b 20 |c 20040224 -NCO |a I -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST8 |0 HOL |1 FSU60-002178150 |n 8 |a FTaSU |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -LOC8 |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -SYS 002042592 - -FMT BK -LDR 00000nam 2200361Ia 4500 -006 m d -007 cr cnu|||unuuu -008 031202s2003 cau s 000|i eng d -020 |a 0520901010 (electronic bk.) -035 |a (OCoLC)53817958 -0359 |a ALU9412 |b FS -TKR |a (Source)B0011135- 101 -TKR |a (FTaSU)NETLIBY20040302 -OWN |a FS -040 |a N$T |c N$T -05014 |a PS1331 |b .A4 2003eb -08214 |a 818.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24010 |a Correspondence. |k Selections -24510 |a Mark Twain's letters 1876-1880. |n Volume 4, |p 1879 |h [electronic resource] / |c edited by the Mark Twain Project. -250 |a Electronic ed. -260 |a Berkeley, Calif. : |b Published for the University of California Press by the Mark Twain Project of the Bancroft Library, |c 2003. -538 |a Mode of access: World Wide Web. -506 |a Made available through NetLibrary; access may be limited to NetLibrary affiliated libraries. -500 |a Title from ebook title screen. -60010 |a Twain, Mark, |d 1835-1910 |v Correspondence. -650 0 |a Authors, American |y 19th century |v Correspondence. -650 0 |a Humorists, American |y 19th century |v Correspondence. -655 7 |a Electronic books. |2 local -7102 |a Bancroft Library. |b Mark Twain Project. -7102 |a NetLibrary, Inc. -8564 |3 Bibliographic record display |u http://www.netLibrary.com/urlapi.asp?action=summary&v=1&bookid=100196 |z An electronic book accessible through the World Wide Web; click for information -CAT |a NCRD |b 20 |c 20040224 -NCO |a I -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST8 |0 HOL |1 FSU60-002178156 |n 8 |a FTaSU |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -LOC8 |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -SYS 002042598 - - - - Florida State University - Library Staff diff --git a/tags/rel-1.6/test/batch.xml b/tags/rel-1.6/test/batch.xml deleted file mode 100644 index b09773a..0000000 --- a/tags/rel-1.6/test/batch.xml +++ /dev/null @@ -1,157 +0,0 @@ - - - - - 00925njm 22002777a 4500 - 5637241 - DLC - 19920826084036.0 - sdubumennmplu - 910926s1957 nyuuun eng - - 91758335 - - - 1259 - Atlantic - - - DLC - DLC - - - Atlantic 1259 - - - The Great Ray Charles - [sound recording]. - - - New York, N.Y. : - Atlantic, - [1957?] - - - 1 sound disc : - analog, 33 1/3 rpm ; - 12 in. - - - Ray Charles, piano & celeste. - - - The Ray -- My melancholy baby -- Black coffee -- There's no you -- Doodlin' -- Sweet sixteen bars -- I surrender dear -- Undecided. - - - Brief record. - - - Jazz - 1951-1960. - - - Piano with jazz ensemble. - - - Charles, Ray, - 1930- - prf - - - - 01832cmma 2200349 a 4500 - 12149120 - 20001005175443.0 - cr ||| - 000407m19949999dcu g m eng d - - 0 - ibc - copycat - 1 - ncip - 20 - y-gencompf - - - undetermined - web preservation project (wpp) - - - vb07 (stars done) 08-19-00 to HLCD lk00; AA3s lk29 received for subject Aug 25, 2000; to DEWEY 08-25-00; aa11 08-28-00 - - - 00530046 - - - (OCoLC)ocm44279786 - - - IEU - IEU - N@F - DLC - - - lccopycat - - - n-us-dc - n-us--- - - - F204.W5 - - - 975.3 - 13 - - - The White House - [computer file]. - - - Computer data. - - - Washington, D.C. : - White House Web Team, - 1994- - - - Mode of access: Internet. - - - Title from home page as viewed on Aug. 19, 2000. - - - Features the White House. Highlights the Executive Office of the President, which includes senior policy advisors and offices responsible for the President's correspondence and communications, the Office of the Vice President, and the Office of the First Lady. Posts contact information via mailing address, telephone and fax numbers, and e-mail. Contains the Interactive Citizens' Handbook with information on health, travel and tourism, education and training, and housing. Provides a tour and the history of the White House. Links to White House for Kids. - - - White House (Washington, D.C.) - - - United States. - Executive Office of the President. - - - United States. - Office of the Vice President. - - - United States. - Office of the First Lady. - - - White House Web Team. - - - http://www.whitehouse.gov - - - http://lcweb.loc.gov/staff/wpp/whitehouse.html - Web site archive - - - diff --git a/tags/rel-1.6/test/encode.py b/tags/rel-1.6/test/encode.py deleted file mode 100644 index 27e0c76..0000000 --- a/tags/rel-1.6/test/encode.py +++ /dev/null @@ -1,25 +0,0 @@ -import util -from pymarc import MARCReader, Record, Field -import unittest -import os - -class Encode( unittest.TestCase ): - - def test_encode_decode( self ): - # get raw data from file - original = file( 'test/one.dat' ).read() - # create a record object for the file - reader = MARCReader(file('test/one.dat')) - record = reader.next() - # make sure original data is the same as - # the record encoded as MARC - raw = record.asMARC21() - self.assertEqual( original, raw ) - -def suite(): - suite = unittest.makeSuite( Encode, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - diff --git a/tags/rel-1.6/test/field.py b/tags/rel-1.6/test/field.py deleted file mode 100644 index e82aaee..0000000 --- a/tags/rel-1.6/test/field.py +++ /dev/null @@ -1,103 +0,0 @@ -import util -import unittest -from pymarc.record import Record, Field - -class FieldTest( unittest.TestCase ): - - def setUp( self ): - self.field = Field( - tag = '245', - indicators = [ 0, 1 ], - subfields = [ - 'a', 'Huckleberry Finn: ', - 'b', 'An American Odyssey' - ] - ) - - self.controlfield = Field( - tag = '008', - data = '831227m19799999nyu ||| | ger ' - ) - - self.subjectfield = Field( - tag = '650', - indicators = [' ', '0'], - subfields = [ - 'a', 'Python (Computer program language)', - 'v', 'Poetry.' - ] - ) - - def test_string( self ): - self.assertEquals( str(self.field), - '=245 01$aHuckleberry Finn: $bAn American Odyssey') - - def test_controlfield_string( self ): - self.assertEquals( str(self.controlfield), - r'=008 831227m19799999nyu\\\\\\\\\\\|||\|\ger\\') - - def test_indicators( self ): - assert self.field.indicator1 is 0 - self.assertEqual( self.field.indicator2, 1 ) - - def test_subfields_created( self ): - subfields = self.field.subfields - self.assertEqual( len( subfields ), 4 ) - - def test_subfield_short( self ): - self.assertEqual( self.field['a'], 'Huckleberry Finn: ' ) - self.assertEqual( self.field['z'], None ) - - def test_subfields( self ): - self.assertEqual( self.field.getSubfields( 'a' ), - ['Huckleberry Finn: '] ) - self.assertEqual( self.subjectfield.getSubfields( 'a' ), - ['Python (Computer program language)']) - - def test_subfields_multi( self ): - self.assertEqual( self.field.getSubfields( 'a','b' ), - ['Huckleberry Finn: ', 'An American Odyssey' ] ) - self.assertEqual( self.subjectfield.getSubfields( 'a','v' ), - ['Python (Computer program language)', 'Poetry.' ] ) - - def test_encode( self ): - self.field.asMARC21() - - def test_iterator( self ): - string = "" - for subfield in self.field: - string += subfield[0] - string += subfield[1] - self.assertEquals( string, "aHuckleberry Finn: bAn American Odyssey" ) - - def test_value( self ): - self.assertEquals( self.field.value(), - 'Huckleberry Finn: An American Odyssey' ) - self.assertEquals( self.controlfield.value(), "831227m19799999nyu ||| | ger " ) - - def test_non_integer_tag( self ): - # make sure this doesn't throw an exception - f = Field( tag="3 0", indicators=[0,1], subfields=['a', 'foo'] ) - - def test_add_subfield( self ): - f = Field( tag="245", indicators=[0,1], subfields=['a', 'foo'] ) - f.addSubfield('a','bar') - self.assertEquals( f.__str__(), '=245 01$afoo$abar') - - def test_is_subject_field( self ): - self.assertEqual( self.subjectfield.isSubjectField(), True ) - self.assertEqual( self.field.isSubjectField(), False ) - - def test_format_field( self ): - self.assertEqual( self.subjectfield.formatField(), - 'Python (Computer program language) -- Poetry.' ) - self.assertEqual( self.field.formatField(), 'Huckleberry Finn: An American Odyssey' ) - -def suite(): - suite = unittest.makeSuite( FieldTest, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - - diff --git a/tags/rel-1.6/test/marc.dat b/tags/rel-1.6/test/marc.dat deleted file mode 100644 index 9c52c7d..0000000 --- a/tags/rel-1.6/test/marc.dat +++ /dev/null @@ -1 +0,0 @@ -01060cam 22002894a 45000010009000000050017000090080041000260350021000679060045000889250044001339550160001779550053003370100017003900200015004070400018004220420008004400500023004480820014004711000025004852450088005102600044005983000027006425040041006696500026007107000026007369850008007621177850420040816084925.0990802s2000 mau b 001 0 eng  a(DLC) 99043581 a0bvipcorignewd1eocipf19gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc05 to ja00 08-02-99; jf05 to subj. 08/02/99; jf11 to sl 08-03-99; jf25 08-05-99 to ddc; bk rec'd, to CIP ver. ps07 01-07-00; CIP ver jf05 to sl 04/05/00 aADDED COPIES: another copy to ASCD ps15 01-12-00 a 99043581  a020161622X aDLCcDLCdDLC apcc00aQA76.6b.H857 200000a005.12211 aHunt, Andrew,d1964-14aThe pragmatic programmer :bfrom journeyman to master /cAndrew Hunt, David Thomas. aReading, Mass :bAddison-Wesley,c2000. axxiv, 321 p. ;c24 cm. aIncludes bibliographical references. 0aComputer programming.1 aThomas, David,d1956- eGAP00979cam 2200241 a 45000010009000000050017000090080041000269060045000679250042001129550206001540100017003600200015003770400018003920500026004100820017004361000016004532450037004692500012005062600051005183000078005695040051006476500039006981251588220020923085341.0010827s2001 cc a b 001 0 eng  a7bcbccorigcopd2encipf20gy-gencatlg0 aacquireb2 shelf copyxpolicy default apb07 2001-08-27 to ASCDajf00 2001-08-31ajf00 2001-09-05;cjf03 2001-10-16 to Subj.djf01 2001-10-25 to slejf12 2001-11-23; jf12 to Dewey 11-23-01aaa20 2001-12-07; copy 2 added jf16 to BCCD 09-23-02 a 2001276084 a0596000855 aDLCcDLCdDLC00aQA76.73.P98bL88 200100a005.13/32211 aLutz, Mark.10aProgramming Python /cMark Lutz. a2nd ed. aBeijing :aSebastopol, CA :bO'Reilly,cc2001. axxxvii, 1255 p. :bill. ;c24 cm. +e1 computer optical disc (4 3/4 in.). aIncludes bibliographical references and index. 0aPython (Computer program language)00887cam 2200253 a 45000010009000000050017000090080041000269060045000679250044001129550151001560100017003070200015003240400018003390500027003570820017003841000016004012450051004172500012004682600040004803000035005205040020005556500039005757000019006141361051220040714135238.0040601s2004 caua 001 0 eng  a7bcbccorigcopd2encipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apv17 2004-06-01 Preprocessor to ASCDajf00 2004-06-03;cjf03 2004-06-24 to Subj.djf09 2004-06-28 to slejf12 2004-07-01 to Deweyaaa25 2004-07-14 a 2004273129 a0596002815 aDLCcDLCdDLC00aQA76.73.P98bL877 200400a005.13/32221 aLutz, Mark.10aLearning Python /cMark Lutz and David Ascher. a2nd ed. aSebastopol, CA :bO'Reilly,cc2004. axxvi, 591 p. :bill. ;c24 cm. aIncludes index. 0aPython (Computer program language)1 aAscher, David.01038cam 2200289 a 45000010009000000050017000090080041000269060045000679250042001129550167001540100017003210150015003380200015003530350023003680400023003910420014004140500026004280820017004542450065004712600039005363000027005755000048006025000020006506500039006707000020007097000019007291306994220030606071827.0030127s2002 cau 001 0 eng  a7bcbcccopycatd2encipf20gy-gencatlg0 aacquireb2 shelf copyxpolicy default aps04 2003-01-27 to ASCDajf00 2003-01-30cjf05 2003-01-30 to subj.djf09 2003-01-30 to slejf12 2003-02-03 to Deweyaaa20 2003-03-10ajg07 2003-06-06 copy 2 added a 2003268354 aGBA2-Y6761 a0596001673 a(OCoLC)ocm49044543 aUKMcUKMdCUSdDLC alccopycat00aQA76.73.P98bP95 200200a005.13/322100aPython cookbook /cedited by Alex Martelli and David Ascher. aSebastopol, CA :bO'Reilly,c2002. axxix, 574 p. ;c24 cm. a"Recipes from the Python community"--Cover. aIncludes index. 0aPython (Computer program language)1 aMartelli, Alex.1 aAscher, David.00759nam 22002295a 45000010009000000050017000090080041000260350022000679060045000899250044001349550020001780100017001980200015002150400013002300420008002431000021002512450068002722600084003402630009004243000012004339630084004451312796220030318153335.0030318s2003 inu 000 0 eng  a(DLC) 2003104024 a0bibccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2003-03-18 a 2003104024 a1592000738 aDLCcDLC apcc1 aDawson, Michael.10aPython programming for the absolute beginner /cMichael Dawson. aIndianapolis, IN :bPremier Press Inc., a division of Course Technology,c2003. a0306 ap.ccm. aMargaret Bauer ; phone (812) 273-0561 ; fax null email margaret_bauer@yahoo.com01304cam 22002894a 45000010009000000050017000090080041000269060045000679250044001129550280001560100017004360200015004530400018004680420008004860500024004940820017005181000049005352450150005842460030007342600053007643000036008175040064008536500026009176500023009437000021009667000027009871256551420020718085037.0011016s2002 njua b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2001-10-16 to ASCD;cjf03 2001-10-17 to Subj.djf01 2001-10-25 to slejf25 2001-10-25 to Deweyaaa20 2001-10-26aps16 2002-01-11 bk rec'd, to CIP ver.ajf00 2002-01-16fjf04 2002-01-18 to S.L.gjf12 2002-01-18 to bccdajf00 2002-03-26; copy 2 added jf16 to BCCD 07-18-02 a 2001055410 a0130410659 aDLCcDLCdDLC apcc00aQA76.625b.T48 200200a005.2/762211 aThiruvathukal, George K.q(George Kuriakose)10aWeb programming :btechniques for integrating Python, Linux, Apache, and MySQL /cGeorge K. Thiruvathukal, John P. Shafaee, Thomas W. Christoper.14aWeb programming in Python aUpper Saddle River, NJ :bPrentice Hall,cc2002. axviii, 745 p. :bill. ;c24 cm. aIncludes bibliographical references (p. 723-725) and index. 0aInternet programming. 0aWeb sitesxDesign.1 aShafaee, John P.1 aChristopher, Thomas W.01023cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550168001560100017003240200035003410400018003760420008003940500026004020820016004281000029004442450067004732500012005402600051005523000035006035000020006386500039006586300021006977000027007181187737320010105091546.0991228s2000 cc a 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc01 12-28-99; jf03 01-04-00 ; jf11 to sl 1-4-00; jf12 to Dewey 01-06-00; aa05 01-10-00; CIP ver. pv08 to BCCD 05-01-00; copy 2 added jf16 to BCCD 01-05-01 a 99085714  a1565926218 (pbk. : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P98bH36 200000a005.2652211 aHammond, Markq(Mark J.)10aPython programming on Win32 /cMark Hammond and Andy Robinson. a1st ed. aBeijing ;aSebastopol, CA :bO'Reilly,cc2000. axvii, 652 p. :bill. ;c24 cm. aIncludes index. 0aPython (Computer program language)00aMicrosoft Win32.1 aRobinson, Andy,d1967-00867cam 22002538a 45000010009000000050017000090080041000269060045000679250044001129550127001560100017002830200015003000400013003150420008003280500026003360820017003621000019003792450080003982600047004782630009005253000011005346500039005459630029005841343237720031222144424.0031211s2003 oru 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc27 2003-12-11 RUSH to ASCDcjf07 2003-12-17 to subjectdjf09 2003-12-17 to slejp05 2003-12-18 to Deweyaaa20 2003-12-22 a 2003064366 a1887902996 aDLCcDLC apcc00aQA76.73.P98bZ45 200300a005.13/32221 aZelle, John M.10aPython programming :ban introduction to computer science /cJohn M. Zelle. aWilsonville, OR :bFranklin, Beedlec2003. a0312 ap. cm. 0aPython (Computer program language) aTom Sumner, 503-682-766801008cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550171001560100017003270200015003440400018003590420008003770500026003850820018004111000026004292450065004552600046005203000034005665000020006006500039006206500026006596500023006857000022007081222727720030509151148.0001109s2002 inua 001 0 eng  a7bcbccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 11-09-00apv11 2002-04-12 2 copies to ASCDajf00 2002-04-18;cjf03 2002-08-20 to Subj.djf09 2002-08-21 to slejf25 2002-09-10 2 copies to Deweyaaa05 2002-10-04 a 00110884  a0735710902 aDLCcDLCdDLC apcc00aQA76.73.P98bH65 200200a005.2/7622211 aHolden, Steve,d1950-10aPython Web programming /cSteve Holden [with David Beazley]. aIndianapolis, Ind. :bNew Riders,cc2002. axxi, 691 p. :bill. ;c23 cm. aIncludes index. 0aPython (Computer program language) 0aInternet programming. 0aWeb sitesxDesign.1 aBeazley, David M.01049cam 22002534a 45000010009000000050017000090080041000269060045000679250044001129550148001560100017003040200015003210400018003360420008003540500026003620820017003881000018004052450047004232600052004703000066005225040051005885380117006396500039007561216916820010522141328.0000911s2000 nju b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc16 09-11-00; jf02 09-12-00 ; jf11 to sl 9-12-00; jf12 to Dewey 09-14-00; aa05 09-14-00; CIP Ver. jf02 05-11-01; jf12 to BCCD 05-22-01 a 00047856  a0130260363 aDLCcDLCdDLC apcc00aQA76.73.P98bC48 200100a005.13/32211 aChun, Wesley.10aCore python programming /cWesley J. Chun. aUpper Saddle River, NJ :bPrentice Hall,c2001. axxix, 771 p. ;c24 cm. +e1 computer optical disc (4 3/4 in.) aIncludes bibliographical references and index. aSystem requirements for accompanying computer disc: Windows 9x/Me/NT/2000; a Web brouser; Macintosh; UNIX/Linux. 0aPython (Computer program language)00948cam 22002654a 45000010009000000050017000090080041000269060045000679250044001129550133001560100017002890200015003060400018003210420008003390500026003470820017003731000021003902450055004112600038004663000036005045040051005406500039005916500036006306300016006661213218820010817152505.0000804s2000 ctua b 001 0 eng  a7bcbccorignewd2encipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pb05 08-04-00;jfoo 08-08-00;cjf03 2001-07-18 to Subj.djf02 2001-07-19 to slejf25 2001-07-31 to Deweyaaa20 2001-08-17 a 00697831  a1884777813 aDLCcDLCdDLC apcc00aQA76.73.P98bG73 200000a005.13/32211 aGrayson, John E.10aPython and Tkinter programming /cJohn E. Grayson. aGreenwich, CT :bManning,cc2000. axxiii, 658 p. :bill. ;c24 cm. aIncludes bibliographical references and index. 0aPython (Computer program language) 0aTcl (Computer program language)00aTk toolkit.00767nam 22002295a 45000010009000000050017000090080041000260350022000679060045000899250044001349550020001780100017001980200015002150400013002300420008002432450081002512600079003322630009004113000012004204400021004329630084004531337832520031020153106.0031020s2003 inu 000 0 eng  a(DLC) 2003114351 a0bibccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc10 2003-10-20 a 2003114351 a1592000770 aDLCcDLC apcc00aGame programming with Python, Lua, and Ruby /c[edited by] Estelle Manticas. aIndianapolis, IN :bPremier Press, a Division of Course Technology,c2003. a0311 ap.ccm. aGame development aMargaret Bauer ; phone (812) 273-0561 ; fax null email margaret_bauer@yahoo.com01121cam 22002414a 45000010009000000050017000090080041000269060045000679250044001129550362001560100017005180200015005350400018005500420008005680500026005760820017006021000027006192450058006462600052007043000033007565040051007896500039008401256552920030227150222.0011016s2002 njua b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2001-10-16 to ASCD;cjf05 2001-10-17 to subj.djf04 2001-10-17 to S.L.ejf25 2001-10-25 to Deweyaaa20 2001-10-26aps11 2002-01-15 bk rec'd, to CIP ver.fjp07 2002-02-13ajp00 2002-03-08gjp85 2002-03-08 to BCCD; copy 2 added jf16 to BCCD 07-18-02ajf00 2003-01-29ajf07 2003-02-27 somehow copy 1 got back into the CIP ver. stream (handed to acting TL) a 2001055411 a0130409561 aDLCcDLCdDLC apcc00aQA76.73.P98bC47 200200a005.13/32211 aChristopher, Thomas W.10aPython programming patterns /cThomas W. Christopher. aUpper Saddle River, NJ :bPrentice Hall,c2002. axix 538 p. :bill. ;c24 cm. aIncludes bibliographical references and index. 0aPython (Computer program language)01062cam 22002778a 45000010009000000050017000090080041000269060045000679250044001129550120001560100017002760200028002930400013003210420008003340500026003420820018003681000024003862450134004102600041005442630009005853000011005946500039006056500037006446500039006819630064007201275256420020426115101.0020424s2002 mau 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc21 2002-04-24 to ASCDcjf05 2002-04-25 to subj.djf09 2002-04-25 to slejf25 2002-04-26 to Deweyaaa20 2002-04-26 a 2002066565 a0201616165 (alk. paper) aDLCcDLC apcc00aQA76.73.P98bH54 200200a005.2/7622211 aHightower, Richard.10aPython programming with the Java class libraries :ba tutorial for building Web and Enterprise applications /cRichard Hightower. aBoston, MA :bAddison-Wesley,c2002. a0207 ap. cm. 0aPython (Computer program language) 0aJava (Computer program language) 0aApplication softwarexDevelopment. aMarilyn Rash, 617-848-6509; email: timothy.nicholls@awl.com01012cam 22002294a 45000010009000000050017000090080041000269060045000679250044001129550192001560100017003480200028003650400018003930420008004110500026004190820017004451000017004622450151004792600042006303000071006726500039007431216723920010608101527.0000908s2001 mau b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc21 09-08-00;jf05 (desc) 09/08/00 ; jf11 to sl 9-11-00; jf12 to Dewey 09-12-00;aa03 9-12-00;CIP ver jf05 to sl 01/11/01; jf12 to BCCD 02-01-01; copy 2 added jf16 to BCCD 04-24-01 a 00046921  a0201709384 (alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P48bG38 200100a005.13/32211 aGauld, Alan.10aLearn to program using Python :ba tutorial for hobbyists, self-starters, and all who want to learn the art of computer programming /cAlan Gauld. aReading, MA :bAddison-Wesley,c2001. axii, 270 p. ;c24 cm.e+ 1 computer laser optical disc (4 3/4 in.) 0aPython (Computer program language)00935cam 22002534a 450000100070000000500170000700800410002403500210006590600450008692500440013195501480017501000170032302000220034004000180036204200080038005000260038808200170041410000160043124500610044726000390050830000750054765000390062270000200066120525620000830103214.0990629s2000 caua 001 0 eng  9(DLC) 99065006 a7bcbccorignewd2eopcnf19gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apn08/e-pcn 06-29-99; to ASCD pb02 06-10-00; jf00 06-13-00; jf03 08-17-00 ; jf11 to sl 8-22-00; jf25 2 copies to Dewey 08-24-00; aa19 08-30-2000 a 99065006  a0761523340 (pbk.) aDLCcDLCdDLC apcc00aQA76.73.P98bA48 199900a005.13/32211 aAltom, Tim.10aProgramming with Python /cTim Altom with Mitch Chapman. aRocklin, CA :bPrima Tech,cc1999. axxxiv, 372 p. :bill. ;c24 cm. +e1 computer optical disc (4 3/4 in.) 0aPython (Computer program language)1 aChapman, Mitch.01214cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550202001560100017003580200047003750400018004220420008004400500024004480820017004721000019004892450079005082600051005873000058006386500026006966500048007226500040007706500049008108560077008591328439520040226131230.0030722s2004 maua 001 0 eng  a7bcbccorignewd1eecipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ajf05 2003-07-22cjf05 2003-07-22 to subj.djf09 2003-07-22 to slejf12 2003-07-23 to Deweyaaa20 2003-07-29ajf00 2004-01-29fjf07 2004-02-02ejf12 2004-02-03 to BCCDajf16 2004-02-26 copy2 to BCCD a 2003016400 a1584502681 (Pbk. with CD-ROM : alk. paper) aDLCcDLCdDLC apcc00aQA76.625b.J66 200400a005.2/762221 aJones, M. Tim.10aBSD Sockets programming from a multi-language perspective /cM. Tim Jones. aHingham, Mass. :bCharles River Media,cc2004. axix, 444 p. :bill. ;c24 cm. +e1 CD-ROM (4 3/4 in.) 0aInternet programming. 0aComputer networksxDesign and construction. 0aInternetworking (Telecommunication) 0aProgramming languages (Electronic computers)413Table of contentsuhttp://www.loc.gov/catdir/toc/ecip047/2003016400.html01113cam 2200277 a 4500001000800000005001700008008004100025035002100066906004500087955011600132010001700248020003300265040001800298050002300316082001600339245009800355260004600453300003300499440004900532504006400581650005100645650003600696650002300732700001800755991006200773159816719981112152315.2940902s1995 maua b 001 0 eng  9(DLC) 94034264 a7bcbccorignewd1eocipf19gy-gencatlg apc18 to ja00 09-02-94; jf06 to subj 09-06-94; jf11 to sl 09-06-94; jf12 09-06-94 to ddc; CIP ver. jc03 11-23-94 a 94034264  a0201633612 (acid-free paper) aDLCcDLCdDLC00aQA76.64b.D47 199500a005.1/222000aDesign patterns :belements of reusable object-oriented software /cErich Gamma ... [et al.]. aReading, Mass. :bAddison-Wesley,cc1995. axv, 395 p. :bill. ;c25 cm. 0aAddison-Wesley professional computing series aIncludes bibliographical references (p. 375-381) and index. 0aObject-oriented programming (Computer science) 0aComputer softwarexReusability. 0aSoftware patterns.1 aGamma, Erich. bc-GenCollhQA76.64i.D47 1995p00011185514tCopy 1wBOOKS01233cam 2200289 a 45000010009000000050017000090080041000269060045000679250044001129550226001560100017003820200034003990400013004330500024004460820014004702450065004842460015005492500012005642600043005763000021006195000111006405040068007516500026008196500025008457000022008707000051008921237004420020812080859.0010405s2001 mau b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc20 to ja00 04-05-01; jp07 04-11-01 sent to sl;jp85 to Dewey 04-19-01; aa20 04-20-01aps13 2001-08-16 bk rec'd, to CIP ver.fjf07 2001-08-20ajf00 2001-08-20gjf12 2001-08-23 to bccdajf01 2001-09-13 copy 2 added to BCCD a 2001031277 a0262032937 (hc. : alk. paper) aDLCcDLC00aQA76.6b.I5858 200100a005.122100aIntroduction to algorithms /cThomas H. Cormen ... [et al.].30aAlgorithms a2nd ed. aCambridge, Mass. :bMIT Press,cc2001. axxi, 1180 p. cm. aRev. ed. of: Introduction to algorithms / Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest. c1990. aIncludes bibliographical references (p. [1127]-1130) and index. 0aComputer programming. 0aComputer algorithms.1 aCormen, Thomas H.1 aCormen, Thomas H.tIntroduction to algorithms.01009pam 2200265 a 4500001000800000005001700008008004100025035002100066906004500087955011600132010001700248020002200265040001800287050002600305082001700331100001800348245003700366260005300403300003500456440005200491500002700543504006400570650004400634991006500678303540919960425075058.2951006s1996 njua b 001 0 eng  9(DLC) 95045017 a7bcbccorignewd1eocipf19gy-gencatlg apc17 RUSH to ja00 10-06-95;jf05 to subj. 10/06/95; jf04 to S.L. 10-06-95; jf14 10-10-95; CIP ver. jk14 04-22-96 a 95045017  a0133708756 (pbk.) aDLCcDLCdDLC00aQA76.73.C28bG69 199600a005.13/32201 aGraham, Paul.10aANSI Common Lisp /cPaul Graham. aEnglewood Cliffs, N.J. :bPrentice Hall,cc1996. axiii, 432 p. :bill. ;c23 cm. 0aPrentice Hall series in artificial intelligence a"An Alan R. Apt book." aIncludes bibliographical references (p. 401-414) and index. 0aCOMMON LISP (Computer program language) bc-GenCollhQA76.73.C28iG69 1996p00034751468tCopy 1wBOOKS \ No newline at end of file diff --git a/tags/rel-1.6/test/marc8.py b/tags/rel-1.6/test/marc8.py deleted file mode 100644 index ed09748..0000000 --- a/tags/rel-1.6/test/marc8.py +++ /dev/null @@ -1,20 +0,0 @@ -from pymarc import marc8_to_unicode -from unittest import TestCase - -class MARC8Test(TestCase): - - def test_marc8_to_unicode(self): - marc8_file = file('test/test_marc8.txt') - utf8_file = file('test/test_utf8.txt') - count = 0 - - while True: - marc8 = marc8_file.readline().strip("\n") - utf8 = utf8_file.readline().strip("\n") - if marc8 == '' or utf8 == '': - break - count += 1 - self.assertEquals(marc8_to_unicode(marc8).encode('utf8'), utf8) - - self.assertEquals(count, 1514) - diff --git a/tags/rel-1.6/test/one.dat b/tags/rel-1.6/test/one.dat deleted file mode 100644 index a43cf54..0000000 --- a/tags/rel-1.6/test/one.dat +++ /dev/null @@ -1 +0,0 @@ -00755cam 22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500fol05731351 IMchF20000613133448.0000107s2000 nyua 001 0 eng  a 00020737  a0471383147 (paper/cd-rom : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P22bM33 200000a005.13/32211 aMartinsson, Tobias,d1976-10aActivePerl with ASP and ADO /cTobias Martinsson. aNew York :bJohn Wiley & Sons,c2000. axxi, 289 p. :bill. ;c23 cm. +e1 computer laser disc (4 3/4 in.) a"Wiley Computer Publishing." 0aPerl (Computer program language)00aActive server pages.00aActiveX. \ No newline at end of file diff --git a/tags/rel-1.6/test/reader.py b/tags/rel-1.6/test/reader.py deleted file mode 100644 index 52bf586..0000000 --- a/tags/rel-1.6/test/reader.py +++ /dev/null @@ -1,45 +0,0 @@ -import util -import unittest -import pymarc -import re - -class MARCReaderFileTest( unittest.TestCase ): - """ - Tests for the pymarc.MARCReader class which provides iterator - based access to a MARC file. - """ - - def setUp( self ): - self.reader = pymarc.MARCReader(file('test/test.dat')) - - def test_iterator( self ): - count = 0 - for record in self.reader: - count += 1 - self.assertEquals(count, 10, 'found expected amt of MARC21 records') - - def test_string( self ): - ## basic test of stringification - startsWithLeader = re.compile( "^=LDR" ) - hasNumericTag = re.compile( "\n=\d\d\d " ) - for record in self.reader: - text = str(record) - self.failUnless( startsWithLeader.search(text), 'got leader') - self.failUnless(hasNumericTag.search(text), 'got a tag') - -class MARCReaderStringTest(MARCReaderFileTest): - - def setUp(self): - raw = file('test/test.dat').read() - self.reader = pymarc.reader.MARCReader(raw) - - # inherit same tests from MARCReaderTestFile - -def suite(): - fileSuite = unittest.makeSuite(MARCReaderFileTest, 'test') - stringSuite = unittest.makeSuite(MARCReaderStringTest, 'test') - suite = unittest.TestSuite((fileSuite, stringSuite)) - return suite - -if __name__ == "__main__": - unittest.main() diff --git a/tags/rel-1.6/test/record.py b/tags/rel-1.6/test/record.py deleted file mode 100644 index 331e1a1..0000000 --- a/tags/rel-1.6/test/record.py +++ /dev/null @@ -1,178 +0,0 @@ -import util -import unittest - -from pymarc import Record, Field -from pymarc.exceptions import * - -class RecordTest( unittest.TestCase ): - - def test_add_field( self ): - record = Record() - field = Field( - tag = '245', - indicators = [ '1', '0' ], - data = [ 'a', 'Python', 'c', 'Guido' ] ) - record.addField( field ) - self.failUnless( field in record.fields, msg='found field' ) - - def test_quick_access( self ): - record = Record() - title = Field( - tag = '245', - indicators = [ '1', '0' ], - data = [ 'a', 'Python', 'c', 'Guido' ] ) - record.addField( title ) - self.assertEqual( record['245'], title, 'short access' ) - self.assertEqual( record['999'], None, 'short access with no field' ) - - def test_field_not_found( self ): - record = Record() - self.assertEquals( len( record.fields ), 0 ) - - def test_find( self ): - record = Record() - subject1 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Programming Language' ] ) - record.addField( subject1 ) - subject2 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Object Oriented' ] ) - record.addField( subject2 ) - found = record.getFields( '650' ) - self.assertEqual( found[0], subject1, 'getFields() item 1' ) - self.assertEqual( found[0], subject1, 'getFields() item 2' ) - found = record.getFields() - self.assertEqual(len(found), 2, 'getFields() with no tag') - - def test_multi_find( self ): - record = Record() - subject1 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Programming Language' ] ) - record.addField( subject1 ) - subject2 = Field( - tag = '651', - indicators = [ '', '0' ], - data = [ 'a', 'Object Oriented' ] ) - record.addField( subject2 ) - found = record.getFields( '650', '651' ) - self.assertEquals( len(found), 2 ) - - def test_bad_leader( self ): - record = Record() - self.failUnlessRaises( RecordLeaderInvalid, - record.decodeMARC, 'foo' ) - - def test_bad_base_address( self ): - record = Record() - self.failUnlessRaises( BaseAddressInvalid, - record.decodeMARC, '00695cam 2200241Ia 45x00' ) - - def test_title( self ): - record = Record() - self.assertEquals( record.title(), None ) - record.addField( Field( '245', [0,1], - subfields=[ 'a', "Foo :", 'b', 'bar' ] ) ) - self.assertEquals( record.title(), 'Foo :bar' ) - - record = Record() - record.addField( Field( '245', [0,1], - subfields=[ 'a', "Farghin" ] ) ) - self.assertEquals( record.title(), "Farghin" ) - - def test_isbn( self ): - record = Record() - self.assertEquals( record.isbn(), None ) - record.addField( Field( '020', [0,1], subfields=['a', '123456789' ] ) ) - self.assertEquals( record.isbn(), '123456789' ) - - def test_author( self ): - record = Record() - self.assertEquals( record.author(), None) - record.addField( Field( '100', [1,0], subfields=['a', 'Bletch, Foobie,', 'd', '1979-1981.'] ) ) - self.assertEquals( record.author(), 'Bletch, Foobie, 1979-1981.') - - record = Record() - record.addField( Field( '130', [0,' '], subfields=['a', 'Bible.', 'l', 'Python.'] ) ) - self.assertEquals( record.author(), None) - - def test_uniformtitle( self ): - record = Record() - self.assertEquals( record.uniformtitle(), None ) - record.addField( Field( '130', [0,' '], - subfields=[ 'a', "Tosefta.", 'l', "English.", 'f', "1977." ] ) ) - self.assertEquals( record.uniformtitle(), "Tosefta. English. 1977." ) - - record = Record() - record.addField( Field( '240', [1,4], - subfields=[ 'a', "The Pickwick papers.", 'l', "French." ] ) ) - self.assertEquals( record.uniformtitle(), "The Pickwick papers. French." ) - - def test_subjects( self ): - record = Record() - r1 = '=630 0\\$aTosefta.$lEnglish.$f1977.' - r2 = '=600 10$aLe Peu, Pepe.' - shlist = [r1, r2] - self.assertEquals( record.subjects(), [] ) - record.addField( Field( '630', [0,' '], - subfields=[ 'a', "Tosefta.", 'l', "English.", 'f', "1977." ] ) ) - record.addField( Field( '730', [0,' '], - subfields=[ 'a', "Tosefta.", 'l', "English.", 'f', "1977." ] ) ) - record.addField( Field( '600', [1,0], - subfields=[ 'a', "Le Peu, Pepe." ] ) ) - self.assertEquals( len( record.subjects() ), 2 ) - self.assertEquals( record.subjects()[0].__str__(), r1 ) - self.assertEquals( record.subjects()[1].__str__(), r2 ) - rshlist = [rsh.__str__() for rsh in record.subjects()] - self.assertEquals( shlist, rshlist ) - - def test_added_entries( self ): - record = Record() - ae1 = '=730 0\\$aTosefta.$lEnglish.$f1977.' - ae2 = '=700 10$aLe Peu, Pepe.' - aelist = [ae1, ae2] - self.assertEquals( record.addedentries(), [] ) - record.addField( Field( '730', [0,' '], - subfields=[ 'a', "Tosefta.", 'l', "English.", 'f', "1977." ] ) ) - record.addField( Field( '700', [1,0], - subfields=[ 'a', "Le Peu, Pepe." ] ) ) - record.addField( Field( '245', [0,0], - subfields=[ 'a', "Le Peu's Tosefa." ] ) ) - self.assertEquals( len( record.addedentries() ), 2 ) - self.assertEquals( record.addedentries()[0].__str__(), ae1 ) - self.assertEquals( record.addedentries()[1].__str__(), ae2 ) - raelist = [rae.__str__() for rae in record.addedentries()] - self.assertEquals( aelist, raelist ) - - def test_location( self ): - record = Record() - loc1 = '=852 \\\\$aAmerican Institute of Physics.$bNiels Bohr Library and Archives.$eCollege Park, MD' - loc2 = '=852 01$aCtY$bMain$hLB201$i.M63' - loclist = [loc1, loc2] - self.assertEquals( record.location(), [] ) - record.addField( Field('040', [' ',' '], - subfields=[ 'a', 'DLC', 'c', 'DLC' ] ) ) - record.addField( Field('852', [' ',' '], - subfields=[ 'a', 'American Institute of Physics.', - 'b', 'Niels Bohr Library and Archives.', - 'e', 'College Park, MD' ] ) ) - record.addField( Field('852', [0,1], - subfields=['a', 'CtY', 'b', 'Main', 'h', 'LB201', 'i', '.M63'] ) ) - self.assertEquals( len( record.location() ), 2 ) - self.assertEquals( record.location()[0].__str__(), loc1 ) - self.assertEquals( record.location()[1].__str__(), loc2 ) - rloclist = [rloc.__str__() for rloc in record.location()] - self.assertEquals( loclist, rloclist ) - -def suite(): - suite = unittest.makeSuite( RecordTest, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - - diff --git a/tags/rel-1.6/test/test.dat b/tags/rel-1.6/test/test.dat deleted file mode 100644 index 68d6dad..0000000 --- a/tags/rel-1.6/test/test.dat +++ /dev/null @@ -1 +0,0 @@ -00755cam 22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500fol05731351 IMchF20000613133448.0000107s2000 nyua 001 0 eng  a 00020737  a0471383147 (paper/cd-rom : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P22bM33 200000a005.13/32211 aMartinsson, Tobias,d1976-10aActivePerl with ASP and ADO /cTobias Martinsson. aNew York :bJohn Wiley & Sons,c2000. axxi, 289 p. :bill. ;c23 cm. +e1 computer laser disc (4 3/4 in.) a"Wiley Computer Publishing." 0aPerl (Computer program language)00aActive server pages.00aActiveX.00647pam 2200241 a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001500161100002600176245006700202260003800269263000900307300001100316650003700327650002500364700001600389fol05754809 IMchF20000601115601.0000203s2000 mau 001 0 eng  a 00022023  a1565926994 aDLCcDLCdDLC apcc00aQA76.73.P22bD47 200000a005.742211 aDescartes, Alligator.10aProgramming the Perl DBI /cAlligator Descartes and Tim Bunce. aCmabridge, MA :bO'Reilly,c2000. a1111 ap. cm. 0aPerl (Computer program language) 0aDatabase management.1 aBunce, Tim.00605cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077040001800094042000800112050002700120082001700147100002100164245005500185260004500240300002600285504005100311650003700362fol05843555 IMchF20000525142739.0000318s1999 cau b 001 0 eng  a 00501349  aDLCcDLCdDLC apcc00aQA76.73.P22bB763 199900a005.13/32211 aBrown, Martin C.10aPerl :bprogrammer's reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axix, 380 p. ;c22 cm. aIncludes bibliographical references and index. 0aPerl (Computer program language)00579cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002700135082001700162100002100179245005500200260004500255300003600300650003700336fol05843579 IMchF20000525142716.0000318s1999 caua 001 0 eng  a 00502116  a0072120002 aDLCcDLCdDLC apcc00aQA76.73.P22bB762 199900a005.13/32211 aBrown, Martin C.10aPerl :bthe complete reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axxxv, 1179 p. :bill. ;c24 cm. 0aPerl (Computer program language)00801nam 22002778a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001800156100002000174245008800194250003200282260004100314263000900355300001100364650003700375650003600412650002600448700002500474700002400499fol05848297 IMchF20000524125727.0000518s2000 mau 001 0 eng  a 00041664  a1565924193 aDLCcDLC apcc00aQA76.73.P22bG84 200000a005.2/7622211 aGuelich, Scott.10aCGI programming with Perl /cScott Guelich, Shishir Gundavaram & Gunther Birznieks. a2nd ed., expanded & updated aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language) 0aCGI (Computer network protocol) 0aInternet programming.1 aGundavaram, Shishir.1 aBirznieks, Gunther.00665nam 22002298a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002700130082001700157111005200174245008600226250001200312260004100324263000900365300001100374650005000385fol05865950 IMchF20000615103017.0000612s2000 mau 100 0 eng  a 00055759  a0596000138 aDLCcDLC apcc00aQA76.73.P22bP475 200000a005.13/32212 aPerl Conference 4.0d(2000 :cMonterey, Calif.)10aProceedings of the Perl Conference 4.0 :bJuly 17-20, 2000, Monterey, California. a1st ed. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)vCongresses.00579nam 22002178a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100002800173245006200201260004100263263000900304300001100313650003700324fol05865956 IMchF20000615102948.0000612s2000 mau 000 0 eng  a 00055770  a1565926099 aDLCcDLC apcc00aQA76.73.P22bB43 200000a005.13/32211 aBlank-Edelman, David N.10aPerl for system administration /cDavid N. Blank-Edelman. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)00661nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100001700173245006700190250001200257260004100269263000900310300001100319650003700330700002300367700001700390fol05865967 IMchF20000615102611.0000614s2000 mau 000 0 eng  a 00055799  a0596000278 aDLCcDLC apcc00aQA76.73.P22bW35 200000a005.13/32211 aWall, Larry.10aProgramming Perl /cLarry Wall, Tom Christiansen & Jon Orwant. a3rd ed. aCambridge, Mass. :bO'Reilly,c2000. a0007 ap. cm. 0aPerl (Computer program language)1 aChristiansen, Tom.1 aOrwant, Jon.00603cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001700161100003200178245006000210260005700270300003300327650003700360fol05872355 IMchF20000706095105.0000315s1999 njua 001 0 eng  a 00500678  a013020868X aDLCcDLCdDLC apcc00aQA76.73.P22bL69 199900a005.13/32211 aLowe, Vincentq(Vincent D.)10aPerl programmer's interactive workbook /cVincent Lowe. aUpper Saddle River, NJ :bPrentice Hall PTP,cc1999. axx, 633 p. :bill. ;c23 cm. 0aPerl (Computer program language)00696nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020002800094040001300122042000800135050002600143082001700169100002600186245004400212260005100256263000900307300001100316500002000327650003700347650001700384650004100401fol05882032 IMchF20000707091904.0000630s2000 cau 001 0 eng  a 00058174  a0764547291 (alk. paper) aDLCcDLC apcc00aQA76.73.P22bF64 200000a005.13/32212 aFoster-Johnson, Eric.10aCross-platform Perl /cEric F. Johnson. aFoster City, CA :bIDG Books Worldwide,c2000. a0009 ap. cm. aIncludes index. 0aPerl (Computer program language) 0aWeb servers. 0aCross-platform software development. \ No newline at end of file diff --git a/tags/rel-1.6/test/test_marc8.txt b/tags/rel-1.6/test/test_marc8.txt deleted file mode 100644 index d656f3f..0000000 --- a/tags/rel-1.6/test/test_marc8.txt +++ /dev/null @@ -1,1514 +0,0 @@ -(3YhOI,(B (3eMeO(B. -(3cja(B (3SbWJ(B (3GdedcjI(B (3aj(B (3eUQ?(B : -(3GdWHYI(B 1. -(3GdbGgQI(B : -$1!S+!#!'`X!_s(B. -$1!Os!0!!#!!A3'44(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!!!!m(B $1i$N(B $1!X$-SD(B $1!`;!0$!\g(B / -$1!D&!0a(B : -$1!X$-SD(B $1!`;!0$!\g(B, -$1!:g!D&(B $1!1:!0m(B, -$1!X$-SD(B $1!`;!0$!\g(B, -$1i%$i%.i%ji%9(B $1!BX!:`!5=(B : -$1!D&!0a(B : -$1!Tk!Xl(B $1!Tk!BX!:`(B $1!Y4!!L$(B $1!=>(B, -$1!Bk!0d(B $1i$Di$Ri$K(B $1i$+i$Xi$ii$:(B : -$1!WN!JH(B. -$1!D&!0a(B : -$1!X$-SD(B $1!`;!0$!\g(B, -$1!0-!L,(B $1i$N(B $1!X\(B : -$1!D&!0a(B : -$1!05!L$(B $1!:[!0!(B, -$1!X$-SD(B $1!`;!0$!\g(B, -$1!GzK\[(B $1!0!!9'(B, -$1!X$-SD(B $1!`;!0$!\g(B, -$1!TX!U}i!&i%7i%'i%$i%/i%9i%Ti%"i!&i%(i%ji%*i%Ci%H(B / -$1!Os(B 1$1!JH(B. -$1!D&!0a(B : -$1!D-!;S(B $1!TX!U}(B, -$1!]y'O@(B $1-1w!1W(B, -$1!D-!;S(B $1!TX!U}(B, -$1!15!0;!^U(B $1!_0!5=(B, -$1!X$-SD(B $1!`;!0$!\g(B $1!Y$(B : -$1!D&!0a(B : -$1!KG!0s(B $1!X\!0d!Y$(B $1!5+!CU(B ; -$1!X$-SD(B $1!`;!0$!\g(B, -(3THjdj,(B (3YHO(B (3GdQMef(B. -(3GdcdeI(B (3GdYQHjI(B : -[Saudi Arabia] : -(3cJGH(B (3GdTQb(B (3GdGhSW(B -(3ecGfI(B (3GdEHGVjI(B (3aj(B (3GdMVGQI(B (3GdESdGejI(B / -(3GdWHYI(B 1. -[(3GdbGgQI(B] : -$1!X$-SD(B $1!`;!0$!\g(B, -$1!:m!Ci(B $1!X$-SD(B $1!`;!0$!\g(B $1!3"!_A(B. -$1!WN!JH(B. -$1!D&!0a(B : -$1!X$-SD(B $1!`;!0$!\g(B $1!3"!_A(B. -$1!<7!V3(B $1!R;!0s!:M(B, -$1!;%i$7i$$(B $1'Rt(B : -$1!D&!0a(B : -$1!X$-SD(B $1!`;!0$!\g(B, -$1!X$-SD(B $1!`;!0$!\g(B, -$1!(B $1!RA!Tk(B $1'5+'CU(B ; -(3aQRGO,(B (3YHO(B (3GdMSjf(B. -(3GdefgL(B (3aj(B (3JGQjN(B (3GdCOH(B (3GdYQHj(B : -Tehran : -$1!8x(B $1!D3!Bu(B. -$1!G[!`[(B $1!C\!1W(B / -Kuala Lumpur : -$1!08!WX(B $1!3K!JH(B $1!Pn!3W(B ; -$1!:M!Cg(B, -$1!C{!<5(B $1!Bs'X<(B / -[Singapore] : -$1!:M!Cg(B, -(3LGFRI(B (3SdWGf(B (3GdYhjS(B (3GdKbGajI(B : -(3GdTGQbI(B : -(3efThQGJ(B (3GJMGO(B (3cJGH(B (3hGOHGA(B (3GdGeGQGJ(B -(3eDSSI(B (3SdWGf(B (3Hf(B (3Ydj(B (3GdYhjS(B (3GdKbGajI(B. -(3GJMGO(B (3cJGH(B (3hCOHGA(B (3GdEeGQGJ(B. -$1!By'4U!#!!F\!#!!7u!#!!1?!JU!#!'^i!Pn!#!!5#!#!!3*!#!!35'2f!#!'X}!@z!#!!4x!KH(B : -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -$1!5t(B $1!1a!04(B $1';@'[4(B $1!5w(B $1!0q(B $1!M"(B $1!@&'Rw(B $1'?n!5"(B / -[$1'^L!C%(B] : -$1!5t(B $1!1a!04(B, -$1!04!3((B $1!5@!D$(B $1!MI!9f(B. -$1!4c';2!(B $1!O2'43!;P(B. -$1'=*!X$(B $1'8t!Bo(B $1!T&!G4'4U(B $1!4c';2!.!Hu(B $1'T2(B $1!Na'CZ(B $1'YK!_z(B -$1!Os(B1$1!JH(B. -$1!4I!0a!!#!!7t!CU!`y(B $1!V+!#!!BK!It!#!!\S!CU!#!KN7!ON!#!!Y$!UN!#!!MB!]t!#!!P{!=<(B / -$1!BK!It!#!!\S!CU!#!KN7!ON!#!!Y$!UN!#!!MB!]t!#!!P{!=<(B -$1!7o'2>!#!!7t!CU!`y(B $1!V+!#!!BK!It!#!!\S!CU!#!KN7!ON!#!!Y$!UN!#!!MB!]t!#!!P{!=<(B -$1!Os(B1$1!JH(B. -$1!4I!0a!!#!!7t!CU!`y(B -$1!\l(B $1!F]!O$(B, -$1'`v#Nl(B : -$1!\l(B $1!F]!O$(B $1!`1'EN(B $1'XN'Y$!_A(B -$1!WN!JH(B. -[Singapore] : -1950$1oL(oL}!#!o]OoPpoJ6!#!oVi!#!o\eoIo!#!oR_o]J!#!oU~!#!oVj!#!oT"oOh!#!oW=oQX!#!oVi!#!oQaoIg!#!(B/ -$1oS!oV>!#!o[ZoQ=oT#!#!(B: -$1o\eoIo!#!o].oL}oR_!#!oVi!#!oW'!#!oVloT$(B ; -$1o].oL}oR_!#!oUaoInoS?!#!oJ6o]K!#!oUaoIn(B -$1o\e!#!o]soS[(B. -$1o\eoIo!#!oW=oT%!#!oPJo]?!#!oUaoInoVG(B. -$1!BK!It!#!!?V!G:!#!!C[!0n!#!!XR!Dc(B / -$1!C[!0n!#!!XR!Dc(B -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -"$1!Ci!CU!#!!B=!]t!#!!BK!It!#!!?V!G:!R0!#!!\S!8!!#!!3K!7u!#!!M"!#!i!T!1J!R_!#!!5w!#!!04!?u!#!!M^!;3!#!!XR!CU!#!!7e!C-!#!!C[!0n!#!!0T!4W!Dci!U!#!(B($1!PA!O(B $1!Df!:M(B, -$1!0!'_N(B $1!T5!Tx!`"(B / -[s.l.] : -$1!4l'U<(B $1!1?'4`(B $1!BX'5+(B. -$1!3i!E[!V0(B $1!D-!(B $1!X(B $1';7!1?(B $1'X8'3|(B $1':`'6>(B $1!1?!6-!_A(B -$1!WN!JH(B. -[Singapore] : -$1!Bg(B $1!DG!a)(B. - $1!;I(B $1!0e(B. -$1'R{(B $1K_p!C%(B $1!7z(B $1!6@!G!(B : -$1!;I(B $1!0e(B $1!N%!P.(B $1!;E'Xi(B -$1!WN!JH(B. -Singapore : -$1!=x'CU(B ; -$1!L}(B $1!U1(B. -$1!L}(B $1!U1(B $1!BM!BX'\O(B / -$1!WN!JH(B. -Singapore : -$1!Be!4&!8+(B $1!Be'U<(B $1!1?'2>(B $1'5+'CU(B -$1!Be!4&!8+(B $1!Be'U<(B $1!1?'2>(B $1!1?!6-!_A(B ; -$1'E*(B $1!>0(B, -$1!db(B $1!Be'U<(B $1!BX'8d(B $1'Y$(B $1!5#(B $1!4l'U<(B $1!BX':`(B / -$1!WN!JH(B. -Singapore : -$1!Be!4&!8+(B $1!Be'U<(B $1!1?'2>(B $1!1?!6-!_A(B ; -$1!5t(B $1!GE!<&(B. -$1'9$E7h(B $1!0d!Ky(B / -$1!WN!JH(B. -Singapore : -$1!5t(B $1!GE!<&(B $1!1?!6-(B ; -$1'_#(B $1!0;!_`(B, -$1!Nk!<5(B $1!9%!7y(B $1!6F'E](B $1'If!^v(B : -$1!04K7o(B $1!6F'E-(B $1'Kg!8W(B $1!5w(B $1!BX!4H(B $1!M"'YK'\Q(B -$1!WN!JH(B. -[Singapore] : -$1!T9!87'Qd(B $1!BX!JU'Xm(B / -[$1!T9!87'Qd(B. -$1!T9!87'Qd(B (China). -$1!T9!87'Qd(B (China). -$1!T9!87'Qd(B (China). -$1!04!7o(B $1!5.!0s(B $1!=3!P:(B $1!F*!5=(B $1!7t!Xi(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!(B : -$1!04!9*(B $1!FM!Bo(B $1!9%':`(B $1!04K7o(B $1!;F'BT(B $1!FM!Bo(B $1KN7!ON(B $1!04!=x(B $1'5+'CU(B -$1!\o-HE'3k!Bo(B $1!T&!G4!Bp(B (China) -$1'Kg(B $1!GB!(B $1!Bg!X7(B $1'Xl!`1(B $1!N7!ON(B / -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -$1!A)!P{(B $1!0=(B $1!D((B : -$1'_T!4c(B $1'Yl'Y~(B $1':`!^z(B $1!=3!DC(B 50$1!5t!'CZ(B. -$1!;&!43(B $1!U4!DU(B : -$1'7F!0s(B $1!N#'Y<(B $13BD!S,(B $1!M"(B $1'YK!_z(B -$1!Os(B1$1!JH(B. -$1!F''HW(B : -$1!3'!3((B $1-Fm!O|(B $1KN7!ON(B : -$1!Os(B1$1!JH(B. -$1'^L!Fw(B : -$1!3'!3((B $1!P'!KH(B $1'Y$'5+(B -$1'`N(B $1!1I'U<(B, -$1'\V'7U(B $1!Be!0-'Pp(B : -$1'=*!<5!E(B $1!Pn'Q1(B $1!M"(B $1!KH'Y$(B $1'T2(B $1';1'Zh(B -$1!Os(B1$1!JH(B. -$1'=*!<5(B : -$1'=*!<5(B (China) -$1!?p(B $1!\+(B -$1'V$(B $1!;{!G=(B. -$1!0"(B $1!=3'23(B. -$1'`.(B $1!@m'\D(B. -$1!;e!X$(B $1!5.!Nh!8@(B : -$1!M{!Oe(B $1!7z(B $1!0d(B $1!Nk(B $1!0=(B $1'^U(B -$1!Os(B1$1!JH(B. -$1'I1'_.!(B $1!CU!Pn(B -$1!K3(B $1K7o'QN(B, -$1!Cs(B $1!4&'E7(B. -$1'[4!K}(B $1!Ky!JU(B $1!@,EWF(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!!BX(B $1!N7!ON(B $1!Y$!BX(B; -$1!UZ!F#!1W(B, -$1'V5'(B $1o[loWloT#(B : -$1oT%(B $1o].oWn(B. -$1!F'(B $1!Bw!;x(B. -$1!Gn!2~(B $1!bb!;e(B $1!M"(B $1!S8'=e(B : -$1!@0';B(B $1!=w!<5(B -$1!Os(B2$1!JH(B. -$1'=*!<5(B : -$1'a_'KG(B $1!0=!Bk(B = -$1!=w!<5(B $1!7y'4U(B(China) -$1!=w!<5(B $1!7y'4U(B(China) -$1!4c(B $1'bV'[4(B. -$1!FF'[=(B $1!BA!G4(B $1'Wl!!.!>m(B $1'T2(B $1';1'Zh(B / -$1!Os(B1$1!JH(B. -$1'I&!4c(B : -$1!FH(B $1'I!'D&(B, -$1!0R(B $1'_T(sm(B. -$1'ZO(B $1'Xm!>#(B. -$1!FM!Bo(B $1!BX':`(B $1'Y$!O>(B / -$1!Os(B1$1!JH(B. -$1'I1'_.!!DN!Tx(B : -$1!87!!Y?(B $1!R!(B / -$1!Os(B1$1!JH(B. -$1!^L!C%(B : -$1!4"(B $1!BX!Gb(B, -Confucius. -$1!<:!0/(B $1!C!(B. -$1!4"(B $1!BX!Gb(B, -$1!UW(B $1!G@'\4(B, -$1!Rr!Ih(B $1!7y!!W&(B $1!G6!G%(B $1!M"(B $1!=Q!?b(B, $1'\4!WD(B $1'T2(B $1!@z'Wl(B $1KN7!ON(B / -$1!Os(B1$1!JH(B. -$1!0&!GW!#!FH(B. -$1!123BD(B $1!Ci'X0(B $1!>.!>m(B $1'Y$-J;(B $1!M"(B $1'KG!0s!>4(B $1!R]!;3(B / -$1!Os(B1$1!JH(B. -$1!0&!GW(B : -$1!04K7o(B $1!M"(B $1'KG!0s!>4(B $1'T2(B $1!0d!BX(B $1':`EWF(B $1'5+'CU(B -$1!7y!KH(B $1!1W!>E(B $1'T2(B $1'X)'3|(B $1!B(B, -$1'b^';C(B $1!TP!HG!LG(B, 2004 = -$1!Os(B1$1!JH(B. -$1!4I!0a!.!Hu(B $1!5='Y$(B / -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -"$1)JD!X$(B $1'(B $1'Z"!4)(B $1!3K!JH(B"--P. facing t.p. -$1!:j!0s(B $1!2F!X<(B $1!Z"!B\(B $1!5+!3U(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!4(B $1!<7!O5(B $1'T2(B $1!P'!KH(B = -$1!Os(B1$1!JH(B. -$1!4I!0a!(B / -$1!Os(B1$1!JH(B. -$1'^S!;(B $1!BX!4H(B $1KN7!ON(B $1'5+'CU(B -$1!04K7o(B $1'Yl!;'(B $1!Be'Yx(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!w!FM(B. -$1!a\!59'bV(B $1'4{!5=(B $1'T2(B $1!BX!4H(B $1':`EWF(B $1KN7'X='CZ(B -$1!a\!59'bV!5=(B $1!Be(B $1KN7!ON(B / -$1!a\!59'bV(B $1'4{!5=(B $1'T2(B $1!BX!4H(B $1':`EWF(B $1KN7'X='CZ(B $1'Y$!BX!_A(B -$1!Os(B1$1!JH(B. -$1!=2!5@!.!>m(B $1'T2(B $1'Wl!!_z(B / -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -$1!04!4c(B $1'Yl'Q<(B $1!9%':`(B $1'Yl!BA':`(B $1!4d!8r'bj(B $1';D'F(B, -$1!]>!C!!`y(B $1!5+!O>(B $1!WN!Q[(B / -$1!4I!0a(B $1!Os(B1$1!JH(B. -$1!4I!0a(B : -$1!_#(B $1!;#!>F(B $1!_A(B -$1'D&!4I(B $1!R\!<7'E-(B $1!8(B $1!1?!6-(B $1!Pa'\O(B -$1!Fw(B $1'^='U<(B. -$1!C[(B $1'U<(B. -$1!9%!7q(B $1!'CZ(B . -$1!4c!0a!(B, -$1!Tk!PV(B $1!_"!;6(B $1'Wl!(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1oJ;(B $1oMSoX+(B, -$1oIUoW=(B $1oI!oNnoQ,(B $1oRl(B $1oIDoW?oO/(B $1oX0oWt(B $1oJ(oW?(B $1oUaoIn(B / -$1oS!oV>(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1oYQ(B $1oS/oJ.(B. -OECD $1oJ6oUN(B $1oX)oPz(B $1oInoWI(B $1oVGoYe(B $1oVi(B $1oIooK_oQ,(B $1oS[oV9(B $1oUV(B $1oIZo\e(B $1oUaoIn(B / -$1oS!oV>(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1oJ;(B $1oW=oS](B. -$1o\voW=oQ,(B $1oRl(B $1oW'o[o(B $1oV-(B $1oQZoW/(B $1o\noI?(B $1oQ,oW?(B $1oUaoIn(B / -$1oS!oV>(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1oJ;(B $1oS[oX+(B, -$1oIUoPGoVG(B $1oI{oVk(B $1o\xoRl(B $1oVd(B $1oVSo\e(B $1o\voW=(B $1oInoW?(B $1oQ,oW?(B $1oUaoIn(B / -$1oS!oV>(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1!2?(B $1!1T!E7(B, -$1!2?(B $1!1T!E7(B $1!X4!YJ(B $1!:W!:M(B : -$1!WN!JH(B. -$1(;}!4I!Qd(B $1!Be!k(B $1!A&!88(B $1!M"(B $1!P.!`2(B -$1!Os(B1$1!JH(B. -$1!a)!H$(B : -$1!04!7o(B $1!3(!Kz!bo(B -$1!04!7o(B $1!7o!FM!bo(B -$1!5\(B $1!Hm!Ky(B. -$1!D$(B $1!VF(B $1!T2(B $1!BX!4H(B $1!9%!_z!5y(B / -$1!Os(B2$1!JH(B. -Carle Place, N.Y. : -$1i!T!MO!MHi!U!Pn!3W(B ; -$1!D$(B $1!VF(B, -$1!5t(B $1!@*!0d(B. -$1!Bu!Cd(B $1!a)!H$(B $1!_U!=Y!5=(B (1897-1945) / -$1!a)!H$(B : -$1!Cs(B $1!0w-U-(B. -$1!aq(B $1!?b!>.(B. -$1!3#!;l(B $1!;!!1J(B 50 $1!(B $1'Z=!4)(B $1!3K!JH(B." -$1!\s(B $1!RB(B, -$1!^L'=v(B : -$1!Os(B1$1!JH(B. -$1!a)!H$(B : -$1!04!7o(B $1!3(!Kz!bo(B -$1!04!7o(B $1!7o!FM!bo(B -$1!a)!H$i!&!BX!4Hi!&KN7!ON(B / -$1!a)!H$(B : -$1!5\(B $1!1e!_B(B. -$1!a,(B $1!2A!23(B. -$1!5d(B $1!9%!EN(B. -$1!0}(B $1!?n(B $1!BO!N_!]t(B / -$1!WN!JH(B. -Singapore : -$1!K3(B $1#6j!F'(B. -$1!:|(B $1!;F!C^(B. -$1!04!Bs(B $1'^i!Pn(B $1!8}'QN(B $1!\*!X+(B : -$1!5.:(L(B $1!>#!9'(B $13BD!A,(B $1'\W'CI(B $1'Pp!>'(B $1'Y$!BX!_A(B -$1!a)!H$(B $1!WN!JH(B. -$1!a)!H$(B : -$1!5.:(L(B $1!>#!9'(B, -$1!5.:(L(B $1!>#!9'(B $13BD!A,(B $1'\W'CI(B $1'Pp!>'(B $1'Y$!BX!_A(B $1'Q['[M(B $1!9f'6>'CZ(B. -$1KGa!:|(B $1!T+!IC(B $1![i!Aq(B $1!5=!B\(B / -$1!WN!JH!+4(B -$1!T+!4I!%(B $1!GW!J((B. -$1!04!U<(B $1!CZ!`y(B (Kobe-shi, Japan) -$1!K3(B $1!bt!]L(B. -$1!UV!UH(B $1!Iz'Ms(B / -1$1!JH(B. -$1!T+!4I!4!3[(B $1!04!7o(B / -$1!WN!JH(B. -$1(;}!4I!oS,(B. -$1oWIoS$(B $1oVi(B $1o]8oQ\(B $1oZpoM*(B $1oPu(B $1oUV(B : -$1oYHo[o(B. -$1oS!oV>oT#(B : -$1oV\(B $1oMGoWl(B, -(3Hdabjg,(B (3YHO(B (3Gddg(B (3Hf(B (3MSjf(B (3Hf(B (3YHO(B (3Gddg(B. -(3bhJ(B (3GdCdHGH(B (3ef(B (3eLGfj(B (3Lfj(B (3GdCdHGH(B / -(3JQje,(B (3MVQehJ(B : -(3Rcj,(B (3QeVGf(B (3NejS(B. -(3eaghe(B (3GdSff(B (3GdQHGfjI(B : -(3GdWHYI(B 1. -(3GdbGgQI(B : -(3gPG(B (3gh(B (3GdESdGe(B (3;(B -(3YeGQI,(B (3eMeO(B. -(3bQGAI(B (3GdfU(B (3GdOjfj(B : -(3GdWHYI(B 1. -(3GdbGgQI(B : -(3gPG(B (3gh(B (3GdESdGe(B (3;(B -(3fOhI(B (3GdSjQI(B (3GdfHhjI(B : -(3GdWHYI(B 1. -[Omdurman] : -(3efThQGJ(B (3GdeQcR(B (3;(B -(3EeGe,(B (3MeGOI(B. -(3eHGQc(B (3hGdENhGf(B / -(3GdWHYI(B (3GdYQHjI(B 1. -(3GdegfOSjf(B [Giza] : -$1!Be!YF(B $1!5.!BX(B $1![`!`S!Q|(B / -$1!WN!JH(B. -$1!T+!4I!'7q(B $1!5w(B $1'C-'^U(B -$1!Os(B1$1!JH(B. -$1!4I!0a!!X%(B = -$1!Os(B1$1!JH(B. -$1!4I!0a!!X%i!U'Q[!Q|(B $1!9f'6>'CZ(B. -$1!04K7o(B $1!Os!0Q(B $1'CI!5=(B $1'E_!DB'`y(B. -$1'`y!V+(B $1!FMK7o(B $1(;}'IC(B $1'E_!DB(B $1'4Q'Q[(B / -$1!FMK7o(B $1(;}'IC(B $1'E_!DB(B $1'4Q'Q[(B -$1(;}'IC(B $1'E_!DB(B $1'4Q'Q[(B -$1!Os(B1$1!JH(B. -$1!4I!0a!w(B, - $1!8{!Cr(B $1!9%(B,1966- -$1!?b!L$(B $1!c+!0!(B. -$1KF*!5=':`(B $1i$N(B $1i%]i%8i%7i%gi%Ji%ji%Fi%#(B : -$1!D&!0a(B : -$1!;e!'(B $1i$H(B $1i%+i%ji%-i%ei%ii%`(B $1!E9!\)(B / -$1!WN!JH(B. -$1!D&!0a(B : -$1!v3(B $1-1w!_B(B, -$1!35!Be(B $1!52!RW(B $1'[`!3,(B / -$1!52!RW(B $1'[`!3,(B -$1!D&!0a(B : -$1!0;!1a!L$(B $1!GZ(B, -$1i$3i$Hi$P!+5i$3i$Hi$P!+5i$3i$Hi$P(B / -$1!WN!JH(B. -$1!D&!0a(B : -$1!;E!D$(B $1!0!!T{(B, -$1i$@i$s!WZ(B : -$1!0!!T{(B $1!T&!Oy(B $1!59!_A(B -$1!D&!0a(B : -$1!GzK\[(B $1!4a!\g(B. -$1!;n!Ci(B $1!6<'Xm(B, -$1!]Z!!N_(B $1i$N(B $1!BX':`!+5!bu!T=i$9i$k(B $1!;*!Xf(B -$1!D&!0a(B : -$1!;E!;y(B $1!1W!9'(B, -$1KEa9Y?(B $1K7o'2>(B $1-?n!L5i$Ji$-(B $1!Bs!Ci(B / -$1!D&!0a(B : -$1KYJ9Z/(B $1!Be!Rq!Na(B. -$1!5@!L$(B $1!6a!]:(B, -$1!5@!L$(B $1!6a!]:(B : -$1KYK!Yf(B $1i$N(B $1!2-!KH(B -$1!D&!0a(B : -$1!Ul!;1(B $1!]:E=S(B, -$1!Cs(B $1!J((B, -$1!_'(B $1!WD!N#(B $1i$N(B $1KV1!WF(B $13BD!S,!Y$(B : -$1!WN!JH(B. -$1!D&!0a(B : -$1!_'(B $1!WD!N#(B, -$1!;;!.!>m(B $1i$G(B $1KYKi$oi$k(B : -$1!WN!JH(B. -$1!D&!0a(B : -$1!FF!L$!0S(B $1'3k!0f(B, -$192F!Xi(B $1i$H(B $1!5=K;1(B $1i$N(B $1i$Oi$6i$^(B : -$1!D&!0a(B : -$1!Y"(B $1i$G(B $1i$b(B $1KYJi$ai$k(B $1!Bs!Ci(B $1!5.!0s!5=(B $1!!BX!`y(B. -$1!1a!^q(B $1!F#!(B $1!Na'CZ(B $1i$H(B $1!9%':`(B $1i$N(B $1!@d-?n(B : -$1!WN!JH(B. -$1!D&!0a(B : -$1!Ci!8}(B $1!4d!0=(B, -$1-?nK7o(B $1!Qq3YX!Cd(B $1i$N(B $1!Yo!<^(B $1i$H(B $1!N(!a\'Wl(B / -$1!D&!0a(B : -$1!Z"!B\(B $1!_A!?b(B $1-?n-J;(B $1i$H(B $1!_6!:~!R_(B / -$1!D&!0a(B : -$1!4W!0T!.!>m(B $1i$H(B $1!WD!44(B $1i$r(B $1!R]i$(i$k(B : -$1!0a!\n!>!0!(B. -$13=u!<4(B $1!<]!!0=(B, -$1'b~!V3(B $1!2'(B, -$1!L$!^U(B $1!G"!:M(B, -$1!+%![k!0s(B $1'2>!Bo!+&i$H(B $1i%\i%Gi%#i!&i%]i%ji%Fi%#i%/i%9(B / -$1!0a!\n!(B. -$1!3K'1L"]M(B $1!9(!K3!Nr(B $1!bS!:M!Nk![2i!&!G(!F\![2(B / -$1!bS!:M!Nk![2i!&!G(!F\![2(B -$1!5E!5.!;X!'CZ(B. -$1!04K7o(B $1K;C!8{(B $1!Y~!C"(B $1!Q1!X8(B / -2005$1!!_A(B. -$1!5E!5.!;X!`!9&(B. -$1!FtKQv(B $1!G6-I:(B $1'0L"Mc(B $1i$r(B $1!1N(B $1i$H(B $1i$7i$?(B $1!G7!;l(B $1'HD!7y(B $1i$N(B $1KQm'^]!M"(B $1!Kg!8W(B $1!XN32](B $1i$N(B $1!X[i$_(B / -$1KEV!`(B $1i$H(B $1'CZ!G>(B $1!D-!(B : -$1'CZ!G>!Tg!D-!!V0(B (Japan) -$1!Nv!;y(B $1KQd!Oe(B $1!4d!JU!`y(B. -$1!Tg!D-!87(B $1!9(!:f!^[(B (Museum) -(3TjN(B (3GdCQV,(B (3eMeO(B. -(3aTI(B (3Ndb(B / -(3GHh(B (3XHj(B : -(3GHf(B (3NdOhf(B. -(3ebOeg(B (3GHf(B (3NdOhf(B / -(31G(B) 2. -(3JgQGf(B : -(3GfJTGQGJ(B (3HfjGO(B (3JQLeg(B (3h(B (3fTQ(B (3cJGH(B (3;(B -(3fGHGOi,(B (3eMeO(B )(3Qhjf(B. -(3TgQGfi,(B (3YfGjJ(B (3Gddg(B. -(3VQH(B (3GdeKdgGi(B (3OQi(B (3GaZGfSJGf(B : -(3cdQi,(B (3GdHQJG(B [Calgary, Alberta, Canada]: -(3chTGf,(B (3eMeO(B (3Wg(B. -(3jYbhHj,(B (3CMeO(B (3Hf(B (3CHj(B (3jYbhH(B. -(3JGQjN(B (3jYbhHi(B / -(3JgQGf(B : -(3GfJTGQGJ(B (3HfGg(B (3JQLeg(B (3h(B (3fTQ(B (3cJGH(B (3;(B -(3BjJi,(B (3GHQGgje(B. -(3ZjQJ(B (3cQeGfTGgi,(B (3YHO(B (3GdcQje(B. -(3cdjGJ(B (3BKGQ(B (3SjO(B (3YHO(B (3GdcQje(B (3ZjQJ(B (3cQeGfTGgi(B / -[(3JgQGf(B : -(3ZjQJ,(B (3eMeO(B (3SYjO(B. diff --git a/tags/rel-1.6/test/test_utf8.txt b/tags/rel-1.6/test/test_utf8.txt deleted file mode 100644 index 83f58f2..0000000 --- a/tags/rel-1.6/test/test_utf8.txt +++ /dev/null @@ -1,1514 +0,0 @@ -عودة، محمد. -كيف سقطت الملكية في مصر؟ : -الطبعة 1. -القاهرة : -肖 显靜. -第一 推动 / -第1版. -北京市 : -与 2049年 的 中国 对话 -吴 国林, -芋生 裕信, -西脇 順三郎 の 研究 : -東京 : -新典社 選書 ; -西脇 順三郎, - 交通 运输 管理志 / -第1版. -天津市 : -天津市 西青区 系列 分志 ; -天津市 地方志 丛书 -Transportation -西青区 (Tianjing, China). -鎌倉 近世 史料 / -[鎌倉市] : -鎌倉市 (Japan) -澤 壽郎, -片桐 一男, -鎌倉市 中央 図書舘. -نعيم، عبدالعزيز العلى. -نظام الضرائب فى الإسلام ومدى تطبيقه فى المملكة العربية السعودية : -[Cairo : -回想 の 西脇 順三郎 / -東京 : -西脇 順三郎, -安東 伸介, -西脇 順三郎, -イギリス 文學史 : -東京 : -英語 英文學 講座 -١ا) 4. -تهران : -صفا، ذبيح الله. -金田 弘, -旅人 つひに かへらず : -初版. -東京 : -西脇 順三郎, -世界 の 詩 : -東京 : -串田 孫一, -西脇 順三郎, -渡辺 一夫, -西脇 順三郎, -芭蕉・シェイクスピア・エリオット / -第 1版. -東京 : -松尾 芭蕉, -鍵谷 幸信, -松尾 芭蕉, -佐久間 隆史, -西脇 順三郎 論 : -東京 : -現代 詩人論 叢書 ; -西脇 順三郎, -شبيلي، عبد الرحمن. -الكلمة العربية : -[Saudi Arabia] : -كتاب الشرق الاوسط -مكانة الإباضية في الحضارة الإسلامية / -الطبعة 1. -[القاهرة] : -西脇 順三郎, -定本 西脇 順三郎 全集. -初版. -東京 : -西脇 順三郎 全集. -工藤 美代子, -寂しい 声 : -東京 : -西脇 順三郎, -西脇 順三郎, -幻影 の 人 西脇 順三郎 を 語る / -西脇 順三郎 を 語る -第 1版. -東京 : -西脇 順三郎, -西脇 順三郎 を 偲ぶ 会. -双鸭山 林业局 志 / -第1版. -[双鸭山? : -黑龙江省 (China). -伊 蝉. -非常 误会/ -Singapore : -狮城 作家 群英 丛书 ; -فرزاد، عبد الحسين. -المنهج في تاريخ الأدب العربي : -Tehran : -夏 枯早. -涼風 有信 / -Kuala Lumpur : -丹袖 出版 系列 ; -子木, -杭州 日记 / -[Singapore] : -子木, -جائزة سلطان العويس الثقافية : -الشارقة : -منشورات اتحاد كتاب وادباء الامارات -مؤسسة سلطان بن علي العويس الثقافية. -اتحاد كتاب وأدباء الإمارات. -旱区 水 土 作物 关系 及 其 最优 调控 原理 : -第1版. -北京 : -周 保中 将军 和 他 的 抗联 战友 / -[长春] : -周 保中, -中共 吉林 省委. -南宁市 稅务誌 / -稅务誌 -第1版. -[南宁市 : -南宁 (China) -广西 壮族 自治区 南宁市 国家 稅务局. -广西 壮族 自治区 南宁市 地方 稅务局. -中国 副食品 市场 需求 与 "菜篮子 工程" 布局 / -第1版. -北京 : -رياض، محمد. -رحله في زمان النوبة : -[القاهرة] : -عبد الرسول، كوثر. -جياني، الحسين بن محمد. -تسمية شيوخ أبي داود السجستاني / -الطبعة 1. -بيروت : -أبو داود سليمان بن الأشعث السجستاني. -فجي، جاسم بن محمد بن حمود. -ابن الدباغ، يوسف بن عبد العزيز. -جابري، رياض. -سعد الله الجابري وحوار مع التاريخ : -الطبعة 1. -حمص : -جابري، سعد الله. -إبراهيم، أيمن. -الإسلام والسلطان والملك : -الطبعة 1. -دمشق : -سليطين، وفيق. -الزمن الأبدي : -الطبعة 1. -اللاذقية : -وقائع حلقة النقاش الأولى حول تطوير أساليب تعليم اللغة العربية لغير الناطقين بها : -الطبعة العربية 1. -عمان : -مصطلحات ميكانيك السيارات. -الطبعة 1. -[Amman] : -خصاونة، عوني محمد. -التطبيقات الفلكية في الشريعة الإسلامية / -تطبيقات علم الفلك في الشريعة الإسلامية -بدر، عبد الرحيم. -موسوعة أسماء النجوم عند العرب في الفلك القديم والحديث / -عمان : -تكريتي، شاكر علي. -مذكراتي وذكرياتي-- هذه / -الطبعة 1. -بغداد : -تكريتي، شاكر علي. -يحيى، حسب الله. -فنارات في القصة والرواية / -الطبعة 1. -بغداد : -عاني، يوسف. -المسرح، الوجود، الحلم / -الطبعة 1. -بغداد : -راوي، نوري. -متحف الحقيقة، متحف الخيال : -الطبعة 1. -بغداد : -حديثي، بهجت عبد الغفور. -الروح الايماني في الشعر العربي : -الطبعة 1. -بغداد : -نفحات الهند واليمن بأسانيد الشيخ أبي الحسن : -الطبعة 1. -الرياض : -قاضي، النعمان. -شعر الفتوح الإسلامية في صدر الإسلام / -الطبعة 1. -جدة : -من أدب الجهاد -حسن، حسن مصطفى. -الحيوان في الشعر العربي / -الطبعة 1. -الرياض : -زهراني، علي بن صالح السلوك. -بلاد غامد وزهران / -الطبعة 3.، وقد أضيفت اليها فصول جديدة وزيادات مهمة. -جدة : -معجم الجغرافي للبلاد العربية السعودية -عبدلي، عبد الله منسي. -المسجد الحرام في قلب الملك عبد العزيز / -مكة : -رومي، عدنان سالم. -علماء الكويت وأعلامها خلال ثلاثة قرون / -الطبعة 1. -الكويت : -سلسلة تاريخ ما أهمله التاريخ ؛ -أغبري، أكرم عبد الملك. -أهمية البحر الأحمر في علاقة الجمهورية اليمنية بدول مجلس التعاون الخليجي / -الطبعة 1. -صنعاء : -كتاب الثوابت ؛ -بلو، محمد. -إنفاق الميسور في تاريخ بلاد التكرور / -الرباط : -منشورات معهد الدراسات الإفريقية. سلسلة نصوص ووثائق ؛ -شاذلي، بهيجة. -ذاكر، عبد النبي. -الواقعي والمتخيل في الرحلة الأوروبية إلي المغرب / -أكادير : -ذنون، عبد الحكيم. -تاريخ الشام القديم / -الطبعة 1. -دمشق : -العلاقات المصرية-اليابانية / -الجيزة : -مدني، إسماعيل محمد. -بيئة البحرين البحرية / -البحرين : -سلسلة كتب حول الحياة الفطرية ؛ -실크 로드 와 韓國 文化 의 探究 / -대전 광역시 : -人文 硏究 學術 叢書 ; -史 在東, -红盾 耕耘录 : -第1版. -[厦门] : -龙海市 (China) -بدر، عزة. -أم الدنيا : -كتاب الجمهورية -خلايلي، خليل. -تاريخ جسكالا : -الطبعة 1. -دمشق ؛ -راوى، صلاح. -فلسفة الوعى الشعبى : -الطبعة 1. -القاهرة : -刘 宏. -百年 梦寻 : -20世纪 中国 经济 思潮 与 社会 变革 -第1版. -北京市 : -世纪 回眸. -沈 山. -石 淑华, -趋势 与 策略 / -Kuala Lumpur : -林 水〓. -陈 友信. -西脇 順三郎, -西脇 順三郎・パイオニア の 仕事 / -パイオニア の 仕事 -第 1版. -東京 : -コレクション・日本 シュ-ルレアリスム ; -和田 桂子, -申 國美. -1900-2001 國家 圖書館 藏 敦煌 遺書 研究 論著 目錄 索引 / -敦煌 遺書 研究 論著 目錄 索引 -國家 圖書館 藏 敦煌 遺書 研究 論著 目錄 索引 -第1版. -北京市 : -敦煌縣 (China) -中國 國家 圖書館 -郭 永秀, -余韵 : -郭 永秀 音乐 评论集 -初版. -[Singapore] : -1950년대 후반기 의 한국 사회 와 이 승만 정부 의 붕괴 / -서울 특별시 : -한국 현대사 의 재 인식 ; -현대사 연구소 기획 연구 -한 흥수. -한국 정신 문화 연구원. -敦煌 懸泉 月令 詔條 / -月令 詔條 -第1版. -北京 : -"本書 收錄 敦煌 懸泉置 遺址 出土 的 《使者 和 中所 督察 詔書 四時 月令 五十條》 (簡稱 「月令 詔條」)". -懸泉置 Sites (China) -中國 文物 硏究所. -甘肅省 文物 考古 硏究所. -刘 星, -文化界 人士 / -Singapore : -新加坡 文艺 协会 丛书 ; -金 梅子, -一双 舊草鞋 / -[s.l.] : -印华 作协 文丛. -前橋藩 松平家 記錄 / -[Tokyo] : -前橋 市立 図書館. -長崎県 水 調查書 : -[長崎市] : -長崎県 (Japan). -許 保由, -不枉此生 : -許 保由 回憶錄 -Sibu, Sarawak : -許 保由, -吴 木炎. -前路 亮红灯 / -第1版. -K. L., Malaysia : -大将 观点 ; -薛 嘉元, -猫城 猫语 / -第1版. -K.L. [i.e. Kuala Lumpur], Malaysia : -大将 fuse ; -晨露, -鱼說 / -初版. -Miri, Sarawak : -美里 笔会 丛书 ; -梁 菊庵, -飄逝 的 年華 : -菊庵 文集 -[Jakarta : -青春 是 一首歌 : -驻校 作家 写作 计划 学员 作品集 -初版. -[Singapore] : -方 桂香. - 尤 今. -听 青春 在 哭泣 : -尤 今 短篇 小说 -初版. -Singapore : -心书 ; -白 荷. -白 荷 散文选 / -初版. -Singapore : -新加坡 新华 作家 丛书 -新加坡 新华 作家 作品集 ; -杨 怡, -从 新华 文坛 论 及 印华 文学 / -初版. -Singapore : -新加坡 新华 作家 作品集 ; -周 洛崙. -梦廻 人生 / -初版. -Singapore : -周 洛崙 作品 ; -陈 久霖, -神州 大地 商机 无限 : -中国 商业 环境 和 文化 的变迁 -初版. -[Singapore] : -舒城县 文物志 / -[舒城县. -舒城县 (China). -舒城县 (China). -舒城县 (China). -中國 古代 建築 歷史 圖說 / -第1版. -北京市 : -侯 幼彬. -李 婉貞. -孔 繁志. -敖鲁古雅 鄂温克人 的 文化 变迁 = -第1版. -天津 : -中央 民族 大学 中国 少数 民族 研究 中心 丛书 -鄂温克族 自治旗 (China) -环 洞庭湖 经济圈 建设 硏究 / -第1版. -长沙市 : -湖南省 (China) -朱 翔. -谢 留文. -客家 方言 语音 硏究 / -第1版. -北京 : -探索 之 果 : -云南 财贸 学院 建校 50周年 论文选 -第1版. -北京 : -云南 财贸 学院 学术 委员会. -宿務 華人 的 經濟--社會史 (附 從 糖業 看 菲律濱 華人) / -糖業 看 菲律濱 華人 -初版. -菲律濱 : -Go, Bon Juan. -珠江 三角洲 公共 管理 模式 硏究 / -第1版. -北京 : -教育部 人文 社会 科学 重点 硏究 基地 中山大学 行政 管理 硏究 中心 学术 文库 -"地方 政府 与 区域 公共 管理 研究" 系列 -陈 瑞莲. -蔡 立辉. -黎 军, -甘 靑 宁 民族 地区 现代 远程 敎育 / -第1版. -北京市 : -مجدلاني، أحمد. -دراسة تحليلية حول أثر النظام الانتخابي على تركيبة المجلس التشريعي القادم / -رام الله : -سلسلة تقارير دورية -شاكري، حسين. -ذكرياتي / -الطبعة 1. -قم : -ميردامادي، عبد المجيد. -زيارة الرسول المصطفى وآله : -الطبعة 2. -تهران : -موسوعة الرسول المصطفى ؛ -حلاق، حسان. -مناهج تحقيق التراث والمخطوطات العربية / -الطبعة 1. -بيروت : -حسين، قصي. -في الحضارة العربية : -الطبعة 1. -طرابلس، لبنان : -عباس، محمد. -ثوار ... عظماء / -بوزريعة، الجزائر : -تطاوي، عبد الله. -اللغة والمتغير الثقافي : -الطبعة 1. -القاهرة : -غوادره، فيصل حسين. -التمرد في شعر العصر العباسي الأول / -الطبعة 1. -عمان : -黑 岩, -各舉 門神 的 風采 / -Sibu, Sarawak : -漳泉 之聲 叢書 ; -陆 力军. -市场 义乌 : -第1版. -杭州 : -义乌市 (China) -义乌市 (China) -白 小虎. -王 祖強. -靖 国平. -教育 的 智慧 性格 : -当代 知识 教育 的 变革 -第1版. -武汉 : -公共 决策 研究 : -第1版. -长沙 : -公共 管理 论丛 -颜 佳华, -迈向 新世纪 : -广州市城市 规划 信息 系统 的 理论 与 实践 -第1版. -广州 : -广州 (China) -戴 逢 -姜 崇洲. -丁 建伟. -韩 振远. -山西 古祠堂 : -矗立 在 人 神 之 间 -第1版. -沈阳市 : -中国 文化 遗珍 丛书. 山西 -潘 知常, -王 国维 : -第1版. -北京 : -跨文化 沟通 个案 研究 丛书 -文津 書系 -王 国维, -李 加荣. -军用 生物 技术 / -第1版. -北京市 : -庄 力霞. -邱 德修. -商周 用鼎 制度 之 理論 基礎 / -限定版. -臺北市 : -商周 金文 硏究 論文; -蒲正信, -药师经注释 / -第1版. -成都市 : -佛典丛书. -زاهي، فريد. -العين والمرآة : -[Rabat] : -دواليبي، محمد معروف. -مذكرات الدكتور معروف الدواليبي / - الطبعة 1. -الرياض : -أبو الخير، محمود عبد الله. -شعر رثاء النفس : -عمان : -黎平 剿匪 斗争 / -第1版. -[黎平 : -中共 黎平 县委. -鬼谷子 学术 研讨会 -第一届 鬼谷子 学术 研讨会 论文集 / -鬼谷子 学术 研讨会 论文集 -第1届 鬼谷子 学术 研讨会 论文集 -北京 第1版. -北京 : -鬼谷子, -鬼谷子 学术 研究会. -فقير، بدر بن عادل. -تغير الأنماط السكنية في مدينة الدرعية : -الرياض : -إصدارات دارة الملك عبد العزيز ؛ -سمحي، علي حمود. -داخل آزال خارج صنعاء : -صنعاء : -شمري، محمد علي. -شعراء الخليج : -الطبعة 1. -عمان : -الشعر النبطي : -الطبعة 1. -عمان : -حنداين، محمد. -المخزن وسوس، 1672-1822 : -الطبعة 1. -الرباط : -عبيدات، داود عمر سلامة. -الموحدون في الأندلس : -إربد، الأردن : -مدني، إسماعيل محمد. -رحلتي مع البيئة / -الطبعة 1. -[?Manama] : -حميد الدين، عبد الله بن محمد. -الهوية في بنية النظام الدولي / -الطبعة 1. -عمان : -سيد، محمد عبد الرحمن. -تجرية دولة قطر في مجال ذوي الاحتياجات الخاصة / -[الدوحة] : -فاضل لنكراني، محمد. -كتاب الطهارة : -الطبعة 1. -[Tehran] : -نجمآبادي، أبو الفضل. -حاشية المكاسب : -الطبعة 1. -قم : -مجموعة آثار آية الله الميرزا أبو الفضل النجمآبادي ؛ -انصاري، مرتضى بن محمد أمين، -مؤسسة آية الله العظمى البروجردي. -东北亚 区域 经济 社会 合作 与 发展 国际 学术 研讨会 -东北亚 自由 贸易区 : -2004年 东北亚 区域 经济 社会 合作 与 发展 国际 学术 研讨会 论文选 -第1版. -沈阳 : -李 向平. -李 勇辉, -城镇 居民 住宅 消费 保障 制度 / -第1版. -北京市 : -陈 相灵. -《武经 七书》 与 当代 战争 战略 / -第1版. -北京 : -武经 七书. -社会 保障 社会 福祉 大事典 = -初版. -東京 : -労働 旬報社. -한국 팝 의 고고학 1970 : -제1판. -경기도 파주시 : -신 현준. -武 旭峰. -深入 黃山 的 背后 : -找寻 徽州 -第2版. -广州 : -发现 之旅 = -徽州 地区(China) -徽州 地区(China) -南 丽军. -比较 政治 制度 / -第1版. -哈尔滨 : -向 俊杰. -孔 兆政. -贾 少华. -民办 大学 的 战略 / -第1版. -杭州 : -浙江省 教育 科学 规划 2005 年 重点 研究 课题 -刘 晓琴. -中国 近代 留英 教育史 / -第1版. -天津市 : -近代 中国 研究 丛书 -Rev. ed. of author's doctoral thesis under title: 中国 近代 留英 教育 研究. -刘 晓琴. -党 崇民, -论 邓小平 战役 指导 特色 = -第1版. -北京 : -中国 军事学 博士 文库 -邓 小平, -建立 农村 劳动力 平等 就业 制度 / -第1版. -北京市 : -陈 晓华. -张 红宇. -胡 小林. -毛 泽东 的 学习 思想 与 实践 / -第1版. -济南 : -毛 泽东, -于 云才. -赵 志忠. -民族 文学 论稿 / -第1版. -沈阳市 : -至尊 宗喀巴 大师传 / -第3版, 修订本. -西宁 : -郭 和卿. -威慑 人类 / -第1版. -北京 : -沈 晓阳. -傅 国涌, -主角 与 配角 : -近代 中国 大转型 的 台前 幕后 -第1版. -武汉市 : -白 友涛. -盘根草 : -城市 现代化 背景下 的 回族 社区 -第1版. -银川市 : -邬 大光. -危机 与 转机 : -第1版. -[厦门] : -厦门 大学 WTO 硏究 中心 系列 丛书 ; -林 莉. -刘 学杰. -新疆 旧事 = -第1版. -乌魯木齐市 : -居上 图书 -新疆 维吾尔自治区 (China) -吴 静安, -春秋 左氏傳 舊注 疏證 續 / -第1版. -長春 : -劉 文淇, -Confucius. -左丘 明. -劉 文淇, -董 洪运, -聚焦 地平线下 : -漫谈 新时期 人民 防空 -北京 第1版. -北京市 : -皇甫 宜川. -中国 战争 电影史 / -第1版. -北京 : -百年 中国 电影 研究 书系 -高等 教育 发展 与 财政 政策 国际 研讨会 -高等 教育 发展 的 财政 政策 : -OECD 与 中国 -第1版. -北京 : -"根据 中国 教育部 和 经济 合作 与 发展 组织(OECD) 的 协商, 2004年月11--14日, 双方 在 北京 共同 召开了 '高等 教育 发展 与 财政 政策 国际 研讨会'" -- Foreword. -范 文曜. -闫 国华. -中国 当代 文学史 / -第1版. -海口 : -21世纪 高等 敎育 系列 敎材. 汉语言 文学类 -田 中阳. -赵 树勤. -王 中江. -进化 主义 在 中国 = -第1版. -北京 : -20世纪 西方 哲学 东渐史 -董 贵昕. -金融 泡沫 的 形成, 运行 与 控制 研究 / -第1版. -上海市 : -黄皮书 系列 -周 到. -周 到 藝術 考古 文集 / -第1版. -郑州市 : -河南 博物院 学术 文库 -河南 博物院. -唐 忠毛. -佛教 本觉 思想 论争 的 现代性 考察 / -第1版. -上海 : -中国 的 现代性 与 人文 学术 丛书 -地理 信息 与 规划 支持 系统 / -第1版. -北京 : -李 楯, -面对 艾滋病, 2004 = -第1版. -北京市 : -李 丹. -中国 上市 公司 发展 规模 研究 = -第1版. -武汉 : -管理 新干线 -卢 洪涛, -中国 现代 文学 思潮 史论 / -第1版. -北京 : -"陕西 师范 大学 优秀 著作 出版 基金 资助 出版"--P. facing t.p. -宋代 傳記 資料 叢刊 / -第1版. -北京市 : -宋元明清 傳記 資料 叢刊 系列 - Vol. 49 called "索引" with added title page: 四十七種 宋代 傳記 綜合 引得 / 洪 業 ... [et al.] 編纂. -洪 業. -北京 圖書館 出版社. -四十七種 宋代 傳記 綜合 引得. -作战 指挥学 / -北京 第1版. -北京 : -丁 邦宇. -装备 保障性 工程 与 管理 = -第1版. -北京市 : -徐 宗昌, -黄 益嘉. -杨 宏伟. -刘 佐泉. -太平 天国 与 客家 / -第1版. -开封市 : -客家 文化 研究 丛书 -中国 财富 新贵 / -第1版. -北京市 : -范 爱民. -高句丽 厉史 与 文化 学术 研讨会 -高句丽史 新 研究 / -高句丽 厉史 与 文化 学术 研讨会 论文集 -第1版. -延吉市 : -高句丽 (Kingdom) -李 国强. -李 宗勋. -中国 小额 信贷 发展 研究 = -第1版. -北京 : -曹 子娟. -陶 江. -陶姓 史话 = -第1版. -南昌市 : -中华 姓氏 文化 丛书 系列. 中华 姓氏 史话 丛书 -陈 光焱. -中国 财政 思想 与 制度 改革 / -第1版. -北京 : -中南 财经 大学 财政学 博士点 导师 文集 -郑 永振. -渤海 墓葬 研究 / -第1版. -长春市 : -严 长录. -陳 寅恪, -金明館 叢稿 初編 / -北京 第1版. -北京 : -陳 寅恪 集 -东北 老工业 基地 振兴 与 管理 现代化 / -第1版. -北京 : -中国 企业 管理 研究会. -中国 社会 科学院. -寒 布. -故宮 = -第1版. -北京 : -北京 的 世界 文化 遗产 = -故宮 博务院 (China) -北京 (China) -北京 (China) -閆 修篆. -易經 的 圖 與 卦 / -臺北市 : -易經. -浪尖 逐梦 : -余 柱业 口述 历史 档案 -初版. -Petaling Jaya, Selangor, Malaysia : -风云 丛书 ; -陈 剑, -郴州市 2000年 人口 普查 资料 / -郴州市 人口 普查 资料 -2000年 人口 普查 资料 -[郴州市 : -向 曽榆. -郴州市 第五次 人口 普查 领导 小组. -רוזנמן, מרדכי. -שמחת מרדכי. -ספר שמחת מרדכי / -ניו יורק : -חלק ב׳ : בראשית, שמות, ענינים שונים ־־ -徐 宗幹, -斯未 信齋 文編 -斯未 信齋 文編 ; -斯未 信齋 文編 ; 斯未 信齋 雜錄 -初版. -南投市 : -臺灣 歷史 文獻 叢刊 -徐 宗幹, -臺戰 實紀. -臺戰 演義 / -初版. -南投市 : -臺灣 歷史 文獻 叢刊 -劉永福, -臺灣 銀行. -冯 文炳. -废名 作品 精选 / -第1版. -武汉市 : -现代 文学 名家 作品 精选 -沙 铁华. -月 华. -大園 市藏. -臺灣 事蹟 綜覽 / -台北市 : -幕府山 胜迹 寻踪 / -南京市 : -下关文史 ; -政协 南京市下关区文史 资料 委员会 . -南京市 幕府山 地区 保护 开发领导 小组 办公室. -赵 淑敏, -京梦 / -第1版. -广州市 : -吴 兢 -贞观 政要 / -第1版. -合肥市 : -中华 古典 智慧 珍品 -唐 太宗, -范 勇胜. -העיירה שלי : -תל־אביב : -גרנצרסקי־קדרי, בינה. -科学 发展观 与 新一轮 经济 增长 / -第1版. -上海 : -厉 无畏. - 王 振. -熊谷 弘, -英米 陪審 制度 の 運用 と 其の 批判 / -[Tokyo] : -司法 研究 報告書 ; -이 준우, -국, 공유지 신탁 법제 개선 방안 연구 / -서울 특별시 : -연구 보고 ; -김 두진, -공정 거래법 상 경제력 집중 규제 연구 / -서울 특별시 : -연구 보고 ; -최 성근. -OECD 기업 지배 구조 원칙 의 국내법 수용 에 관한 연구 / -서울 특별시 : -연구 보고 ; -김 정순. -행정법 상 재판 외 분쟁 해결 법제 연구 / -서울 특별시 : -연구 보고 ; -김 수진, -공무원 권익 향상 을 위한 행정 구제 법제 연구 / -서울 특별시 : -연구 보고 ; -傅 佩榮, -傅 佩榮 解讀 孟子 : -初版. -台北縣 新店市 : -世界 公民 叢書 ; -Mencius. -Mencius. -平 可夫. -中國 軍事 與 國際 戰略 / -第1版. -香港 : -黑白講 李 敖 : -第1版. -[香港] : -富達 文庫 ; -李 敖, -齊 以正. -吳 小攀. -孟 庆顺. -"一国 两制" 与 香港 回归后 的政治 发展 / -香港 回归后 的政治 发展 -香港 初版. -香港 : -鄭 義, -中共 十大 敗仗 : -中共官方戰史上 被刻意 掩埋 的 篇章 -第1版. -香港 : -中國 共產黨 -中國 國民黨 -吳 潤生. -林 彪 與 文化 大革命 / -第2版. -Carle Place, N.Y. : -《眞相》系列 ; -林 彪, -周 承人. -早期 香港 電影史 (1897-1945) / -香港 : -李 以荘. -魏 成思. -兩岸 密使 50 年 / -香港 : -記憶 歷史 叢書 -程 希, -当代 中囯 留学生 硏究 / -初版. -香港 : -北京 大学 华侨 华人 硏究 中心 丛书 ; -"北京 大学 龚 诗贮 基金 赞助 出版." -鄭 義, -長征 : -第1版. -香港 : -中國 共產黨 -中國 國民黨 -香港・文化・研究 / -香港 : -吳 俊雄. -馬 傑偉. -呂 大樂. -伊 戰 啓示錄 / -初版. -Singapore : -王 賡武. -宮 少朋. -中日 关系 多维 透視 : -古厩 忠夫 教授 还历 纪念 论文集 -香港 初版. -香港 : -古厩 忠夫, -古厩 忠夫 教授 还历 纪念 论文集 编辑 委员会. -清宮 臺灣 巡撫 史料 / -初版. -臺北市 : -國立 故宮 博物院 院藏 清代 臺灣 文獻 叢編 -洪 安全, -馮 明珠. -落地 生根. -落地 生根 : -神戶 華僑 與 神阪 中華 會館 百年史 -香港 初版. -香港 : -北京 大學 華僑 華人 研究 中心 叢書 ; -Translation of: 落地 生根 : 神戶 華僑 と 神阪 中華 会館 の 百年. -中華 会館 (Kobe-shi, Japan) -忽 海燕. -中華 會館 (Kobe-shi, Japan) -王 鼎鈞. -葡萄 熟了 / -1版. -臺北市 : -大地 叢書 ; -戴 錦華, -性別 中國 / -初版. -台北市 : -麥田 人文 -附 參考 文獻. -盧 增. -柬埔寨 企业 纳稅 指南, 2004 / -中文 版. -[Phnom Penh?] : -הלר חדד, הילה. -התכלית של ועדות מייעצות ציבוריות לעניין מסוים־ נוסח אד הוקת בישראל : תוך התמקדות בשלוש הועדות הבאות: ועדת וילנאי (1999), ועדת טל (2000), ועדת בן בסט (2000) / -[Israel : -פרג׳, רג׳א סעיד. -הקשרים בין הדרוזים והיהודים עד הקמת מדינת ישראל (1948) / -ינוח : -חלפין, יגאל. -הטיהורים הסטליניסטיים : -תל אביב : -פטיש -קרליץ, שמריהו יוסף נסים. -חוט שני (הלכות רבית) -ספר חוט שני : -בני ברק : -הוכמן, חיים אריה, -안 도섭. -조선 의 혼불 타던 밤 에 : -초판. -서울시 : -윤 동주, -بلفقيه، عبد الله بن حسين بن عبد الله. -قوت الألباب من مجاني جني الألباب / -تريم، حضرموت : -زكي، رمضان خميس. -مفهوم السنن الربانية : -الطبعة 1. -القاهرة : -هذا هو الإسلام ؛ -عمارة، محمد. -قراءة النص الديني : -الطبعة 1. -القاهرة : -هذا هو الإسلام ؛ -ندوة السيرة النبوية : -الطبعة 1. -[Omdurman] : -منشورات المركز ؛ -إمام، حمادة. -مبارك والإخوان / -الطبعة العربية 1. -المهندسين [Giza] : -新譯 古文 辭類纂 / -初版. -臺北市 : -古籍 今注 新譯 叢書 -姚 鼐, -黃 鈞. -刘 文锁, -尼雅 : -静止 的 家园 和 时间 -第1版. -北京市 : -神秘 中国 -民丰县 (China) -民丰县 (China) -中国 新编 地方志 总目 提要 = -第1版. -北京市 : -《中国 新编 地方志 总目 提要》编纂 委员会. -中国 第二 历史 档案馆. -馆藏 民国 台湾 档案 汇编 / -民国 台湾 档案 汇编 -台湾 档案 汇编 -第1版. -北京市 : -台湾 文献 史料 出版 工程 -陈 云林. -海峡 两岸 出版 交流 中心. -黃 俊傑, -德川 日本 《論語》詮釋 史論 / -初版. -臺北市 : -東亞 文明 研究 叢書 ; -Confucius. -東亞 視域中 的 國籍、移民 與 認同 學術 研討會 -東亞 視域中 的 國籍、移民 與 認同 / -初版. -臺北市 : -東亞 文明 研究 叢書 ; -甘 懷真, -貴志 俊彦, -川島 真, -בסן, צדוק. -יתומות : -ירושלים : -רז, גאי. -בית האמנים. -שלו, אריה. -כישלון והצלחה בהתרעה : -תל אביב : -אריאלי, שאול. -תפסת מרובה לא תפסת : -ירושלים : -תמונת מצב -שביט, יעקב. -אירופה המהוללת והמקוללת : -תל אביב : -ריינהרץ, יהודה. -שי, דב. -15 מכל 100 שרדו : -חמישה עשר מכל מאה שרדו -מהד׳ 2. -[ת״א ז״א תל אביב : -שי, דב. -עדווי, ג׳מאל, -פעילות הקוויקרים האמריקנים בפלישתינה 1948-1869 / -Haifa] : -חסקין, גילי. -שבוי בקסמה : -הוד השרון : -טאוב, גדי. -המתנחילים והמאבק על משמעותה של הציונות / -מתנחלים -תל אביב : -פרוזה (ידיעות אחרונות). -日本軍 「慰安婦」 関係 資料 集成 / -初版. -東京 : -鈴木 裕子, -山下 英愛, - 外村 大,1966- -成田 龍一. -歴史学 の ポジショナリティ : -東京 : -山崎 一穎, -森 鷗外 論攷 / -東京 : -森 鷗外, -木村 博一, -日本 社会科 の 成立 理念 と カリキュラム 構造 / -初版. -東京 : -堀 幸雄, -最新 右翼 辞典 / -右翼 辞典 -東京 : -久保田 淳, -ことば、ことば、ことば / -初版. -東京 : -小林 一茶, -だん袋 : -一茶 自筆 句集 -東京 : -渡辺 卓郎. -岡本 哲志, -銀座 四百年 : -東京 : -講談社 選書 メチエ ; -銀座 (Tokyo, Japan) -千石 英世, -小島 信夫 : -暗示 の 文学、鼓舞する 寓話 -東京 : -小島 信夫, -検証 国家 戦略なき 日本 / -東京 : -読売 新聞社. -吉田 喜重, -吉田 喜重 : -変貌 の 倫理 -東京 : -蓮實 重彦, -李 燕, -陶 行知 の 芸術 教育論 : -初版. -東京 : -陶 行知, -寺崎 昌男, -大学 は 歴史 の 思想 で 変わる : -初版. -東京 : -比田井 克仁, -伝說 と 史実 の はざま : -東京 : -誰 で も 読める 日本 古代史 年表 : -日本 古代史 年表 -東京 : -吉川 弘文館. -保阪 正康, -松本 清張 と 昭和 史 / -初版. -東京 : -平凡社 新書 ; -松本 清張, -松本 清張, -松本 清張, -東京 大学. -戦争 の 表象 : -東京 : -東京 大学. -吉見 俊哉, -人口 減少 時代 の 日本 経済 / -東京 : -人口学 ライブラリー ; -大淵 寬, -森岡 仁, -日本 の 所得 分配 : -初版. -東京 : -小塩 隆士, -田近 栄治. -府川 哲夫, -佐々木 毅, -知識 基盤 社会 と 大学 の 挑戦 : -初版. -東京 : -本多 博之, -戦国 織豊期 の 貨幣 と 石高制 / -東京 : -資料 集成 戦争 と 障害者 / -東京 : -十五年 戦争 極秘 資料集. 補卷 ; -橋本 雅之, -古風土記 の 研究 / -初版. -大阪市 : -研究 叢書 ; -古風土記 -常陸国 風土記. -八代 斌助 の 思想 と 行動 を 考える : -京都市 : -神戶 国際 大学 経済 文化 研究所 叢書 ; -八代 斌助, -日本 聖公会 -桑田 優, -平尾 武之, -山本 祐策, -小川 恭一. -徳川 幕府 の 昇進 制度 : -寬政 十年末 旗本 昇進表 -東京 : -ジャーナリズム と 権力 / -京都市 : -大石 裕, -日本 の 地方 民鉄 と 地域 社会 / -初版. -東京 : -青木 栄一, -少子化 の 経済 分析 / -東京 : -高山 憲之, -斎藤 修, -田間 泰子, -「近代 家族」と ボディ・ポリティクス / -京都市 : -四川省 潼南县 地名录 / -潼南县 地名录 -[潼南县 : -四川省 地名录 丛书 ; -潼南县 (China) -四川省 潼南县 地名 领导 小组. -四川省 武隆县 地名录 = -武隆县 地名录 -[武隆县 : -四川省 地名录 丛书 ; -武隆县 (China) -武隆县 地名 领导 小组. -四川省 新都县 地名录 / -新都县 地名录 -[新都县 : -四川省 地名录 丛书 ; -新都县 (China) -新都县 地名 领导 小组. -مالح، محمد رياض. -الشيخ الأكبر محيي الدين بن العربي سلطان العارفين / -أبو ظبي : -حميري، جمال الدين عبد الله. -النسبة إلى المواضع والبلدان / -الطبعة 1. -أبو ظبي : -مزروعي، فاطمة حمد. -تمثيلات الآخر في أدب قبل الإسلام / -أبو ظبي : -يوميات زايد / -الطبعة 1. -أبو ظبي : -المأمورة : -الطبعة 1. -Abu Dhabi : -العاديات : -الطبعة 1. -Abu Dhabi : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1997 حتى عام 2006 بشأن الأراضي الممنوحة للمواطنين / -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1996 حتى عام 2006 في العلامات التجاربة / -[?Dubai] : -قانون اتحادي رقم 24 لسنة 2006 م في شأن حماية المستهلك. -[?Dubai] : -قانون مكافحة التستر التجاري رقم 17 لسنة 2004 م. -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1999 حتى عام 2006 في المنازعات بين الؤجرين والمستأجرين : -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1990 حتى عام 2005 في الإبعاد / -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1988 حتى عام 2005 م في أحكام بطاقة الإئتمان. -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1991 حتى عام 2005 في بطلان الإعلان / -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1997 حتى عام 2005 في الملكية التجارية والصناعية / -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1991 حتى عام 2006 في التسهيلات المصرفية / -[?Dubai] : -حجي، عبد الرحمن. -دراسة الظاهرة العلمية في المجتمع الأندلسي / -أبو ظبي : -مري، سعيد. -ديوان الغواص / -أبو ظبي : -نجمآبادي، أبو الفضل. -كتاب القضاء : -الطبعة 1. -قم : -مجموعة ىثار آية الله الميرزا أبو الفضل النجم آبادي ؛ -نجمآبادي، أبو الفضل. -الرسائل الفقهية : -الطبعة 1. -قم : -مجموعة آثار آية الله الميرزا أبو الفضل النجمآبادي ؛ -한국 의 민주 정부. -한국 의 민주 정부. -חיים ביהודה. -[Jerusalem] : -松村 潤, -米國 議會 圖書館 所藏 滿洲語 文獻 目錄 / -滿洲語 文獻 目錄 -東京 : -東北 アジア 文獻 硏究 叢刊 ; -פוגל, דוד. -חרא של פרסום / -מהד׳ 1. -[Israel] : -פוגל, דוד. -ישראל. -אזורי עדיפות לאומית : -ירושלים : -دارا شكوه. -منتخبات آثار : -[تهران] : -جلالى نائينى، محمد رضا. -صادق عنقا. -١نته : -١ا) 22. -Verdugo City, Ca : -בר־עם שחל, ליאורה. -הנחיות לסקר ותיעוד אתרים לשימור / -[Israel] : -ארן, זלמן. -דברים על החינוך בדור הדעת / -חינוך בדור הדעת -אבא אבן -ירושלים : -סדרת ״השרים״ / יוסף יונאי -יונאי, יוסף. -הגדה של פסח : -ירושלים : -אלישיב, יוסף שלו׳. -קהלות יעקב. -ישראלזון, משה. -ורנר, שלמה י. -ליל שמורים. -ספר ליל שמורים : -ליל שמורים -ברוקלין, נ.י. : -ברוודה, שלמה. -חד גדיא. -הגדה של פסח : -ירושלים : -קניבסקי, יעקב ישראל. -ברונשטיין, ישראל יוסף בן משה אליעזר. -מוסקאוויטש, נפתלי אשר ישעי׳. -פירות האילן (ארבעה המינים) -ספר פירות האילן : -פירות האילן -אשדוד : -ספר יהושע. -ספר יהושעץ -יהושע -[ירושלים : -ספר יהושע. -ספר שופטים. -וילהלם, אהרן אליהו בן יחזקאל. -ספר שופטים. -אילה שלוחה. -דיקמאן, אברהם ש. -ספר שלשים יום קודם החג : -שלשים יום קודם החג -זכרון משה -מהד׳ 2. מתוקנת. -ליקוואוד, נ. דז. : -אורנשטיין, יעקב משולם. -ישועות יעקב -ספר ישועות יעקב : -נדפס ונסדר מחדש. -אשדוד : -תורה. -באום, אברהם. -לילה כיום יאיר : -ירושלים : -אוצר מפרשי קהלת / -ירושלם : -קהלת. -ואנונו, שמעון. -קהלת. -דיין, נסים. -ספר יעלת חן : -יעלת חן -בני ברק : -תורה. -מרגליות התורה : -ספר מרגליות התורה -ירושלים : -תורה. -ואנונו, שמעון. -רבינוביץ־תאומים, בנימין בן יעקב. -ספר יחלק שלל : -יחלק שלל -ירושלים : -תורה. -ספורנו ורבינו בחיי. -ספר פניני ספורנו ורבינו בחיי : -לונדון : -תורה. -רוזנבוים, יעקב מאיר. -ספורנו, עובדיה בן יעקב, -בחיי בן אשר בן חלבא, -ראבד, רם משה. -הגדה של פסח מהדורת טנן : -פתח תקוה : -הגדה של פסח. -東京 大学. -東京 大学 総合 研究 博物館 所蔵 渡辺 武男 収集 広島・長崎 被爆 関連 資料 目錄 / -渡辺 武男 収集 広島・長崎 被爆 関連 資料 目錄 -広島・長崎 被爆 関連 資料 目錄 -東京 : -東京 大学 総合 研究 博物館 標本 資料 報告, - 渡辺 武男, -東京大学. -田賀井 篤平, -シルク ロード 草原 の 道 に おける アルジャィ 石窟 の 歴史 と 文化・国際 シンポジウム, 2007年 3月 27日 : -静岡市 : -楊 海英, -報告書 日系 アメリカ人 リーダーシップ シンポジウム 「芸術 から ビジネス まで: 多様 な 職業 を 通じた 日系 アメリカ人 の 貢献」/ -日系 アメリカ人 リーダーシップ シンポジウム 「芸術 から ビジネス まで: 多様 な 職業 を 通じた 日系 アメリカ人 の 貢献」 -東京 : -武田 興欣, -国際 交流 基金. -出来町 天王祭 鹿子神車・河水車 / -鹿子神車・河水車 -名古屋市 : -名古屋市 山車 調查 報告書 ; -名古屋市 文化財 調查 報告 ; -名古屋市 教育 委員会. -中国 対外 貿易 統計 / -2005年版. -東京 : -海外 調查 シリーズ ; -日本 貿易 振興 機構. -専門 用語 分野 の 国際 規格 共同 開発 調查 研究 成果 報告書. -東京 : -Japan. -日本 規格 協会. -群杭 基礎 の 大型 振動台 実験 / -[つくば市] : -土木 研究所 資料, -土木 研究所 (Japan). -マテリアル フロー データ ブック : -第 3版. -つくば市 : -森口 祐一. -橋本 征二, -産総研 レア メタル シンポジウム, 平成 18年 10月 2日. -「産総研 レア メタル シンポジウム」講演 予稿集. -名古屋市 : -産業 技術 総合 研究所. -古川 恵太. -沖縄 泡瀬 干潟 を 例 と した 沿岸 湿地 の 総合的 環境 評価 の 試み / -横須賀市 : -国土 技術 政策 総合 研究所 資料 = -徳川 将軍家 と 会津 松平家 : -会津若松市 : -会津藩 (Japan) -福島 県立 博物館. -若松城 天守閣 (Museum) -شيخ الأرض، محمد. -فشة خلق / -ابو ظبي : -ابن خلدون. -مقدمه ابن خلدون / -١ا) 2. -تهران : -انتشارات بنياد ترجمه و نشر كتاب ؛ -نابادى، محمد )روين. -شهرانى، عنايت الله. -ضرب المثلهاى درى افغانستان : -كلرى، البرتا [Calgary, Alberta, Canada]: -كوشان، محمد طه. -يعقوبي، أحمد بن أبي يعقوب. -تاريخ يعقوبى / -تهران : -انتشارات بناه ترجمه و نشر كتاب ؛ -آيتى، ابراهيم. -غيرت كرمانشاهى، عبد الكريم. -كليات آثار سيد عبد الكريم غيرت كرمانشاهى / -[تهران : -غيرت، محمد سعيد. diff --git a/tags/rel-1.6/test/util.py b/tags/rel-1.6/test/util.py deleted file mode 100644 index 7ade343..0000000 --- a/tags/rel-1.6/test/util.py +++ /dev/null @@ -1,4 +0,0 @@ -import sys -sys.path.append( '../pymarc' ); - - diff --git a/tags/rel-1.6/test/writer.py b/tags/rel-1.6/test/writer.py deleted file mode 100644 index 5e5e284..0000000 --- a/tags/rel-1.6/test/writer.py +++ /dev/null @@ -1,31 +0,0 @@ -import util -import unittest -import pymarc -import re -import os - -class MARCWriterTest(unittest.TestCase): - - def test_write(self): - - # write a record off to a file - writer = pymarc.MARCWriter(file('test/writer-test.dat','w')) - record = pymarc.Record() - field = pymarc.Field('245', ['0','0'], ['a', 'foo']) - record.addField(field) - writer.write(record) - writer.close() - - # read it back in - reader = pymarc.MARCReader(file('test/writer-test.dat')) - record = reader.next() - - # remove it - os.remove('test/writer-test.dat') - -def suite(): - suite = unittest.makeSuite(MARCWriterTest, 'test') - return suite - -if __name__ == "__main__": - unittest.main() diff --git a/tags/rel-1.6/test/xml_test.py b/tags/rel-1.6/test/xml_test.py deleted file mode 100644 index 4f7ed8d..0000000 --- a/tags/rel-1.6/test/xml_test.py +++ /dev/null @@ -1,66 +0,0 @@ -from unittest import TestCase -from pymarc import map_xml, parse_xml_to_array, record_to_xml, Record -from cStringIO import StringIO - -class XmlTest(TestCase): - - def test_map_xml(self): - self.seen = 0 - def count(r): self.seen += 1 - map_xml(count, 'test/batch.xml') - self.assertEqual(2, self.seen) - - def test_multi_map_xml(self): - self.seen = 0 - def count(r): self.seen += 1 - map_xml(count, 'test/batch.xml', 'test/batch.xml') - self.assertEqual(4, self.seen) - - def test_parse_to_array(self): - records = parse_xml_to_array('test/batch.xml') - self.assertEqual(len(records), 2) - - # should've got two records - self.assertEqual(type(records[0]), Record) - self.assertEqual(type(records[1]), Record) - - # first record should have 18 fields - r = records[0] - self.assertEqual(len(r.getFields()), 18) - - # check the content of a control field - self.assertEqual(r['008'].data, - u'910926s1957 nyuuun eng ') - - # check a data field with subfields - f = r['245'] - self.assertEqual(f.indicator1, '0') - self.assertEqual(f.indicator2, '4') - self.assertEqual(f['a'], u'The Great Ray Charles') - self.assertEqual(f['h'], u'[sound recording].') - - def test_xml(self): - # read in xml to a record - r1 = parse_xml_to_array('test/batch.xml')[0] - # generate xml - xml = record_to_xml(r1) - # parse generated xml - r2 = parse_xml_to_array(StringIO(xml))[0] - - # compare original and resulting record - self.assertEqual(r1.leader, r2.leader) - - f1 = r1.getFields() - f2 = r2.getFields() - self.assertEqual(len(f1), len(f2)) - - pos = 0 - while pos < len(f1): - self.assertEqual(f1[pos].tag, f2[pos].tag) - if f1[pos].isControlField(): - self.assertEqual(f1[pos].data, f2[pos].data) - else: - self.assertEqual(f1[pos].getSubfields(), f2[pos].getSubfields()) - self.assertEqual(f1[pos].indicators, f2[pos].indicators) - pos += 1 - diff --git a/tags/rel-1.7/Changes b/tags/rel-1.7/Changes deleted file mode 100644 index 082dcd3..0000000 --- a/tags/rel-1.7/Changes +++ /dev/null @@ -1,108 +0,0 @@ -v1.7 Wed Jan 30 21:52:48 EST 2008 -- documentation fixes (thanks Gabe Farrell) -- fixed marc8 stderr printing, and added quiet argument to MARC8_to_Unicode - for people who'd rather not see warnings on STDERR. - -v1.6 Thu Jan 24 14:17:18 EST 2008 -- marc8 now prints warnings on stderr rather than stdout - -v1.5 Wed Jan 2 21:54:56 EST 2008 -- added pymarc.marcxml.record_to_xml for converting a record to marcxml - and corresponding test in test/xml_test.py - -v1.4 Tue Nov 27 13:44:41 EST 2007 -- map_xml can take multiple files - -v1.3 Tue Nov 20 08:48:51 EST 2007 -- added map_xml to pymarc/marcxml.py for a more functional processing - -v1.2 Tue Sep 4 08:22:44 EDT 2007 -- added pymarc/marcxml.py for marcxml reading support -- added test of marcxml reading: test/xml_test.py -- modified Field so that default indicators and subfields are - not set to a default array in the method signature. This causes - subtle bugs since new arrays are not contructed for - repeated calls to the constructor. - -v1.1 Wed Aug 15 08:34:39 EDT 2007 -- updated the homepage for the package - -v1.0 Wed Jul 18 14:55:19 EDT 2007 -- added marc8_to_unicode() support for applications that need to - convert marc8 data to unicode ... many thanks for Aaron Lav - for allowing relevant bits of code to be lifted from PyZ3950; - also thanks to Mark Matienzo for the idea and for testing. -- added some tests for new marc8_to_unicode functionality. Thanks - to the Library of Congress for providing equivalent marc8 and - utf8 marc record batches to use for constructing test data -- The folowing changes are courtesy of Mark Matienzo: - - modified __str__ methods for Field and Record to produce - data in MARCMaker [1] format. THIS MAY BREAK YOUR CODE. This is - not a complete implementation as support for special character - mnemonics [2] has yet to be added - - modified test cases for string conversion and added tests for - control fields - - added formatField() and isSubjectField() methods to Field and - the author(), uniformtitle(), subjects(), addedentries(), - and location() methods to Record, and tests for those methods - - [1] http://www.loc.gov/marc/makrbrkr.html - [2] http://www.loc.gov/marc/mnemonics.html - -v0.9 Tue Apr 10 21:54:02 EDT 2007 -- various simplifications and pythonifications (thanks Dan Chudnov) -- added easy_install support - -v0.85 Fri Feb 3 13:08:35 EST 2006 -- added default leader template for when records are created - from scratch (thanks Kurt Nordstrom) - -v0.81 Mon Jan 30 16:33:36 EST 2006 -- getFields() wasn't returning all the fields when no tag was passed in. - -v0.8 Mon Jan 30 07:05:36 CST 2006 -- added the ability to read raw marc from strings THIS MAY BREAK - YOUR CODE. pymarc no longer supports passing file paths to the - MARCReader constructor. You need to simply change: - - reader = MARCReader('marc.dat') - - to: - - reader = MARCReader(file('marc.dat')) - - Thanks to Daniel Hoth for suggesting this. It just makes sense to - be able to pass in MARC that you got from a Z39.50 network connection - or database, etc. - -v0.7 Mon Jan 23 15:08:55 EST 2006 -- added addSubfield() to Subfield (thanks Kurt Nordstrom) - -v0.6 Tue Nov 29 20:48:31 CST 2005 -- fixed test suite to run under the unittest that ships with python2.3 -- allow non-integer field tags -- fixed MARCWriter and added test (thanks Mikel Larreategi) - -v0.5 Thu Feb 10 10:01:12 CST 2005 -- handle empty subfields - -v0.4 Wed Feb 2 22:29:33 CST 2005 -- fixed directory validation: thanks Aaron Lav -- added iterator for pymarc.Field for iterating through subfields -- added pymarc.Field.value() for getting a field value easily - -v0.3 Wed Jan 5 17:03:37 CST 2005 -- changed mind about accessors (again): - removed getField() must use getFields() - renamed subfield() to getSubfields() and have it return a list -- added doctest support to pymarc/__init__.py -- added a test batch file of python data - -v0.2 Tue Jan 4 21:01:22 CST 2005 -- removed getField() and renamed getFields() to find() - -v0.11 Mon Jan 3 20:42:19 CST 2005 -- fixed test suite execution - -v0.1 Wed Dec 29 19:54:23 CST 2004 -- initial release diff --git a/tags/rel-1.7/MANIFEST.in b/tags/rel-1.7/MANIFEST.in deleted file mode 100644 index 591cc6d..0000000 --- a/tags/rel-1.7/MANIFEST.in +++ /dev/null @@ -1,3 +0,0 @@ -global-include *.py *.dat -include README MANIFEST.in - diff --git a/tags/rel-1.7/README b/tags/rel-1.7/README deleted file mode 100644 index a917d56..0000000 --- a/tags/rel-1.7/README +++ /dev/null @@ -1,30 +0,0 @@ -DESCRIPTION ------------ - -pymarc is a python library for working with MARC21 bibliographic data -loosely based on the MARC/Perl suite of modules (http://marcpm.sf.net). -More about pymarc can be found at: http://www.textualize.com/pymarc - -INSTALLATION ------------- - -Run the pymarc test suite to make sure things are in order with the -distribution: - - python test.py - -And then install: - - python setup.py install - -For typical usage of this library look at the documentation in -pymarc/__init__.py or at the unittests found in the test directory. - -TODO ----- - -- marcxml writing support -- cleanup with respect to PEP 8 and PEP 257 - -LICENSE: BSD -AUTHOR: Ed Summers diff --git a/tags/rel-1.7/ez_setup.py b/tags/rel-1.7/ez_setup.py deleted file mode 100644 index 38c09c6..0000000 --- a/tags/rel-1.7/ez_setup.py +++ /dev/null @@ -1,228 +0,0 @@ -#!python -"""Bootstrap setuptools installation - -If you want to use setuptools in your package's setup.py, just include this -file in the same directory with it, and add this to the top of your setup.py:: - - from ez_setup import use_setuptools - use_setuptools() - -If you want to require a specific version of setuptools, set a download -mirror, or use an alternate download directory, you can do so by supplying -the appropriate options to ``use_setuptools()``. - -This file can also be run as a script to install or upgrade setuptools. -""" -import sys -DEFAULT_VERSION = "0.6c5" -DEFAULT_URL = "http://cheeseshop.python.org/packages/%s/s/setuptools/" % sys.version[:3] - -md5_data = { - 'setuptools-0.6b1-py2.3.egg': '8822caf901250d848b996b7f25c6e6ca', - 'setuptools-0.6b1-py2.4.egg': 'b79a8a403e4502fbb85ee3f1941735cb', - 'setuptools-0.6b2-py2.3.egg': '5657759d8a6d8fc44070a9d07272d99b', - 'setuptools-0.6b2-py2.4.egg': '4996a8d169d2be661fa32a6e52e4f82a', - 'setuptools-0.6b3-py2.3.egg': 'bb31c0fc7399a63579975cad9f5a0618', - 'setuptools-0.6b3-py2.4.egg': '38a8c6b3d6ecd22247f179f7da669fac', - 'setuptools-0.6b4-py2.3.egg': '62045a24ed4e1ebc77fe039aa4e6f7e5', - 'setuptools-0.6b4-py2.4.egg': '4cb2a185d228dacffb2d17f103b3b1c4', - 'setuptools-0.6c1-py2.3.egg': 'b3f2b5539d65cb7f74ad79127f1a908c', - 'setuptools-0.6c1-py2.4.egg': 'b45adeda0667d2d2ffe14009364f2a4b', - 'setuptools-0.6c2-py2.3.egg': 'f0064bf6aa2b7d0f3ba0b43f20817c27', - 'setuptools-0.6c2-py2.4.egg': '616192eec35f47e8ea16cd6a122b7277', - 'setuptools-0.6c3-py2.3.egg': 'f181fa125dfe85a259c9cd6f1d7b78fa', - 'setuptools-0.6c3-py2.4.egg': 'e0ed74682c998bfb73bf803a50e7b71e', - 'setuptools-0.6c3-py2.5.egg': 'abef16fdd61955514841c7c6bd98965e', - 'setuptools-0.6c4-py2.3.egg': 'b0b9131acab32022bfac7f44c5d7971f', - 'setuptools-0.6c4-py2.4.egg': '2a1f9656d4fbf3c97bf946c0a124e6e2', - 'setuptools-0.6c4-py2.5.egg': '8f5a052e32cdb9c72bcf4b5526f28afc', - 'setuptools-0.6c5-py2.3.egg': 'ee9fd80965da04f2f3e6b3576e9d8167', - 'setuptools-0.6c5-py2.4.egg': 'afe2adf1c01701ee841761f5bcd8aa64', - 'setuptools-0.6c5-py2.5.egg': 'a8d3f61494ccaa8714dfed37bccd3d5d', -} - -import sys, os - -def _validate_md5(egg_name, data): - if egg_name in md5_data: - from md5 import md5 - digest = md5(data).hexdigest() - if digest != md5_data[egg_name]: - print >>sys.stderr, ( - "md5 validation of %s failed! (Possible download problem?)" - % egg_name - ) - sys.exit(2) - return data - - -def use_setuptools( - version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, - download_delay=15 -): - """Automatically find/download setuptools and make it available on sys.path - - `version` should be a valid setuptools version number that is available - as an egg for download under the `download_base` URL (which should end with - a '/'). `to_dir` is the directory where setuptools will be downloaded, if - it is not already available. If `download_delay` is specified, it should - be the number of seconds that will be paused before initiating a download, - should one be required. If an older version of setuptools is installed, - this routine will print a message to ``sys.stderr`` and raise SystemExit in - an attempt to abort the calling script. - """ - try: - import setuptools - if setuptools.__version__ == '0.0.1': - print >>sys.stderr, ( - "You have an obsolete version of setuptools installed. Please\n" - "remove it from your system entirely before rerunning this script." - ) - sys.exit(2) - except ImportError: - egg = download_setuptools(version, download_base, to_dir, download_delay) - sys.path.insert(0, egg) - import setuptools; setuptools.bootstrap_install_from = egg - - import pkg_resources - try: - pkg_resources.require("setuptools>="+version) - - except pkg_resources.VersionConflict, e: - # XXX could we install in a subprocess here? - print >>sys.stderr, ( - "The required version of setuptools (>=%s) is not available, and\n" - "can't be installed while this script is running. Please install\n" - " a more recent version first.\n\n(Currently using %r)" - ) % (version, e.args[0]) - sys.exit(2) - -def download_setuptools( - version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, - delay = 15 -): - """Download setuptools from a specified location and return its filename - - `version` should be a valid setuptools version number that is available - as an egg for download under the `download_base` URL (which should end - with a '/'). `to_dir` is the directory where the egg will be downloaded. - `delay` is the number of seconds to pause before an actual download attempt. - """ - import urllib2, shutil - egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3]) - url = download_base + egg_name - saveto = os.path.join(to_dir, egg_name) - src = dst = None - if not os.path.exists(saveto): # Avoid repeated downloads - try: - from distutils import log - if delay: - log.warn(""" ---------------------------------------------------------------------------- -This script requires setuptools version %s to run (even to display -help). I will attempt to download it for you (from -%s), but -you may need to enable firewall access for this script first. -I will start the download in %d seconds. - -(Note: if this machine does not have network access, please obtain the file - - %s - -and place it in this directory before rerunning this script.) ----------------------------------------------------------------------------""", - version, download_base, delay, url - ); from time import sleep; sleep(delay) - log.warn("Downloading %s", url) - src = urllib2.urlopen(url) - # Read/write all in one block, so we don't create a corrupt file - # if the download is interrupted. - data = _validate_md5(egg_name, src.read()) - dst = open(saveto,"wb"); dst.write(data) - finally: - if src: src.close() - if dst: dst.close() - return os.path.realpath(saveto) - -def main(argv, version=DEFAULT_VERSION): - """Install or upgrade setuptools and EasyInstall""" - - try: - import setuptools - except ImportError: - egg = None - try: - egg = download_setuptools(version, delay=0) - sys.path.insert(0,egg) - from setuptools.command.easy_install import main - return main(list(argv)+[egg]) # we're done here - finally: - if egg and os.path.exists(egg): - os.unlink(egg) - else: - if setuptools.__version__ == '0.0.1': - # tell the user to uninstall obsolete version - use_setuptools(version) - - req = "setuptools>="+version - import pkg_resources - try: - pkg_resources.require(req) - except pkg_resources.VersionConflict: - try: - from setuptools.command.easy_install import main - except ImportError: - from easy_install import main - main(list(argv)+[download_setuptools(delay=0)]) - sys.exit(0) # try to force an exit - else: - if argv: - from setuptools.command.easy_install import main - main(argv) - else: - print "Setuptools version",version,"or greater has been installed." - print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)' - - - -def update_md5(filenames): - """Update our built-in md5 registry""" - - import re - from md5 import md5 - - for name in filenames: - base = os.path.basename(name) - f = open(name,'rb') - md5_data[base] = md5(f.read()).hexdigest() - f.close() - - data = [" %r: %r,\n" % it for it in md5_data.items()] - data.sort() - repl = "".join(data) - - import inspect - srcfile = inspect.getsourcefile(sys.modules[__name__]) - f = open(srcfile, 'rb'); src = f.read(); f.close() - - match = re.search("\nmd5_data = {\n([^}]+)}", src) - if not match: - print >>sys.stderr, "Internal error!" - sys.exit(2) - - src = src[:match.start(1)] + repl + src[match.end(1):] - f = open(srcfile,'w') - f.write(src) - f.close() - - -if __name__=='__main__': - if len(sys.argv)>2 and sys.argv[1]=='--md5update': - update_md5(sys.argv[2:]) - else: - main(sys.argv[1:]) - - - - - diff --git a/tags/rel-1.7/pymarc/__init__.py b/tags/rel-1.7/pymarc/__init__.py deleted file mode 100644 index 1268e99..0000000 --- a/tags/rel-1.7/pymarc/__init__.py +++ /dev/null @@ -1,75 +0,0 @@ -# __init__.py - -r''' - -The pymarc module provides an API for reading, writing and modifying -MARC records. MARC (MAchine Readable Cataloging) is a metadata format for -bibliographic data. More about MARC can be found at the Library of Congress: -http://lcweb.loc.gov/marc - -Below are some common examples of how you might want to use pymarc. If you -run across an example that you think should be here please contribute it -by writing to the author. - -1. Reading a batch of records and printing out the 245 subfield a. If you - are curious this example uses the batch file available in the distribution. - - >>> from pymarc import MARCReader - >>> reader = MARCReader(open('test/marc.dat')) - >>> for record in reader: - ... print record['245']['a'] - The pragmatic programmer : - Programming Python / - Learning Python / - Python cookbook / - Python programming for the absolute beginner / - Web programming : - Python programming on Win32 / - Python programming : - Python Web programming / - Core python programming / - Python and Tkinter programming / - Game programming with Python, Lua, and Ruby / - Python programming patterns / - Python programming with the Java class libraries : - Learn to program using Python : - Programming with Python / - BSD Sockets programming from a multi-language perspective / - Design patterns : - Introduction to algorithms / - ANSI Common Lisp / - -2. Creating a record and writing it out to a file. - - >>> from pymarc import Record, Field - >>> record = Record() - >>> record.addField( - ... Field( - ... tag = '245', - ... indicators = ['0','1'], - ... subfields = [ - ... 'a', 'The pragmatic programmer : ', - ... 'b', 'from journeyman to master /', - ... 'c', 'Andrew Hunt, David Thomas.' - ... ])) - >>> out = open('file.dat', 'w') - >>> out.write(record.asMARC21()) - >>> out.close() - -''' - -__version__ = '1.0' - -from record import * -from field import * -from exceptions import * -from reader import * -from writer import * -from constants import * -from marc8 import marc8_to_unicode, MARC8_to_Unicode -from marcxml import * - -if __name__ == "__main__": - import doctest - doctest.testmod() - diff --git a/tags/rel-1.7/pymarc/constants.py b/tags/rel-1.7/pymarc/constants.py deleted file mode 100644 index bd148c2..0000000 --- a/tags/rel-1.7/pymarc/constants.py +++ /dev/null @@ -1,7 +0,0 @@ -LEADER_LEN = 24 -DIRECTORY_ENTRY_LEN = 12 -SUBFIELD_INDICATOR = chr( 0x1F ) -END_OF_FIELD = chr( 0x1E ) -END_OF_RECORD = chr( 0x1D ) - - diff --git a/tags/rel-1.7/pymarc/exceptions.py b/tags/rel-1.7/pymarc/exceptions.py deleted file mode 100644 index 4be03df..0000000 --- a/tags/rel-1.7/pymarc/exceptions.py +++ /dev/null @@ -1,30 +0,0 @@ -class pymarcException( Exception ): - pass - -class RecordLengthInvalid( pymarcException): - def __str__( self ): - return( "Invalid record length in first 5 bytes of record" ) - -class RecordLeaderInvalid( pymarcException ): - def __str__ ( self ): - return "Unable to extract record leader" - -class RecordDirectoryInvalid( pymarcException ): - def __str__( self ): - return "Invalid directory" - -class NoFieldsFound( pymarcException ): - def __str__ ( self ): - return "Unable to locate fields in record data" - -class BaseAddressInvalid( pymarcException ): - def __str__ ( self ): - return "Base address exceeds size of record" - -class WriteNeedsRecord( pymarcException ): - def __str__( self ): - return "Write requires a pymarc.Record object as an argument" - -class NoActiveFile( pymarcException ): - def __str__( self ): - return "There is no active file to write to in call to write" diff --git a/tags/rel-1.7/pymarc/field.py b/tags/rel-1.7/pymarc/field.py deleted file mode 100644 index 9778b76..0000000 --- a/tags/rel-1.7/pymarc/field.py +++ /dev/null @@ -1,167 +0,0 @@ -from constants import * -from exceptions import * - -class Field( object ): - - def __init__( self, tag, indicators=None, subfields=None, data='' ): - """ - Field() pass in the field tag, indicators and subfields for the tag. - - field = Field( \ - tag = '245', - indicators = ['0','1'], - subfields = [ \ - 'a', 'The pragmatic programmer : ', - 'b', 'from journeyman to master /', - 'c', 'Andrew Hunt, David Thomas.' ] - - If you want to create a control field you don't pas in the indicators - and use a data parameter rather than a subfields parameter: - - field = Field( tag='001', data='fol05731351' ) - - """ - if indicators == None: - indicators = [] - if subfields == None: - subfields = [] - - tag = "%03s" % tag - if ( tag < '010' ): - self.tag = tag - self.data = data - else: - self.tag = tag - self.indicators = indicators - self.indicator1 = indicators[0] - self.indicator2 = indicators[1] - self.subfields = subfields - - def __iter__(self): - self.__pos = 0 - return self - - def __str__( self ): - """ - A Field object in a string context will return the tag, indicators - and subfield as a string. This follows MARCMaker format; see [1] - and [2] for further reference. Special character mnemonic strings - have yet to be implemented (see [3]), so be forewarned. Note also - for complete MARCMaker compatibility, you will need to change your - newlines to DOS format ('\r\n'). - - [1] http://www.loc.gov/marc/makrbrkr.html#mechanics - [2] http://search.cpan.org/~eijabb/MARC-File-MARCMaker/ - [3] http://www.loc.gov/marc/mnemonics.html - """ - if ( self.isControlField() ): - text = "=%s %s" % ( self.tag, self.data.replace(' ','\\') ) - else: - text = "=%s " % ( self.tag ) - for indicator in self.indicators: - if indicator in (' ','\\'): - text += "\\" - else: - text += "%s" % indicator - for subfield in self: - text += ("$%s%s" % subfield) - return text - - def __getitem__( self, subfield ): - """ - Retrieve the first subfield with a given subfield code in a field: - - field['a'] - - Handy for quick lookups. - """ - subfields = self.getSubfields( subfield ) - if len(subfields) > 0: return subfields[0] - return None - - def next( self ): - while self.__pos < len(self.subfields): - subfield = ( self.subfields[ self.__pos ], \ - self.subfields[ self.__pos+1 ] ) - self.__pos += 2 - return subfield - raise StopIteration - - def value( self ): - """ - Returns the field as a string without tag, indicators, and - subfield indicators. - """ - if self.isControlField(): - return self.data - string = "" - for subfield in self: - string += subfield[1] - return string - - def getSubfields( self, *codes ): - """ - getSubfields() accepts one or more subfield codes and will return a list - of subfield values. The order of the subfield values in the list - will be the order that they appear in the field. - - print field.getSubfields( 'a' ) - - print field.getSubfields( 'a', 'b', 'z' ) - """ - values = [] - for subfield in self: - if subfield[0] in codes: - values.append( subfield[1] ) - return values - - def addSubfield( self, code, value ): - """ - Adds a subfield code/value pair to the field. - - field.addSubfield('u', 'http://www.loc.gov') - """ - self.subfields.append(code) - self.subfields.append(value) - - def isControlField( self ): - """ - returns true or false if the field is considered a control field. - Control fields lack indicators and subfields. - """ - if self.tag < '010': - return True - return False - - def asMARC21( self ): - """ - used during conversion of a field to raw marc - """ - if self.isControlField(): - return self.data + END_OF_FIELD - marc = str(self.indicator1) + str(self.indicator2) - for subfield in self: - marc += SUBFIELD_INDICATOR + subfield[0] + subfield[1] - return marc + END_OF_FIELD - - def formatField( self ): - """ - Returns the field as a string without tag, indicators, and subfield indicators. Like pymarc.Field.value(), but prettier (adds spaces, formats subject headings). - """ - if self.isControlField(): return self.data - fielddata = '' - for subfield in self: - if not self.isSubjectField(): - fielddata += ' %s' % subfield[1] - else: - if subfield[0] not in ('v','x','y','z'): - fielddata += ' %s' % subfield[1] - else: fielddata += ' -- %s' % subfield[1] - return fielddata.strip() - - def isSubjectField( self ): - """ - returns True or False if the field is considered a subject field - used by formatField - """ - if self.tag.startswith('6'): return True - return False diff --git a/tags/rel-1.7/pymarc/marc8.py b/tags/rel-1.7/pymarc/marc8.py deleted file mode 100644 index 77e35b2..0000000 --- a/tags/rel-1.7/pymarc/marc8.py +++ /dev/null @@ -1,112 +0,0 @@ -# see http://www.loc.gov/marc/specifications/speccharmarc8.html - -import unicodedata -import marc8_mapping - -from sys import stderr - -def marc8_to_unicode(marc8): - """ - Pass in a string, and get back a Unicode object. - - print marc8_to_unicode(record.title()) - - """ - converter = MARC8_to_Unicode() - return converter.translate(marc8) - -class MARC8_to_Unicode: - """Converts MARC-8 to Unicode. Note that currently, unicode strings - aren't normalized, and some codecs (e.g. iso8859-1) will fail on - such strings. When I can require python 2.3, this will go away. - - Warning: MARC-8 EACC (East Asian characters) makes some - distinctions which aren't captured in Unicode. The LC tables give - the option of mapping such characters either to a Unicode private - use area, or a substitute character which (usually) gives the - sense. I've picked the second, so this means that the MARC data - should be treated as primary and the Unicode data used for display - purposes only. (If you know of either of fonts designed for use - with LC's private-use Unicode assignments, or of attempts to - standardize Unicode characters to allow round-trips from EACC, - or if you need the private-use Unicode character translations, - please inform me, asl2@pobox.com.""" - - basic_latin = 0x42 - ansel = 0x45 - def __init__ (self, G0 = basic_latin, G1 = ansel, quiet=False): - self.g0 = G0 - self.g1 = G1 - self.quiet = quiet - - def is_multibyte (self, charset): - return charset == 0x31 - - g0_set = set(['(', ',', '$']) - g1_set = set([')', '-', '$']) - - def translate (self, s): - uni_list = [] - combinings = [] - pos = 0 - while pos < len (s): - # http://www.loc.gov/marc/specifications/speccharmarc8.html - if s[pos] == '\x1b': - next = s[pos+1] - if (next in self.g0_set): - if s[pos+2] == ',' and next == '$': - pos += 1 - self.g0 = ord(s[pos+2]) - pos = pos + 3 - continue - elif next in self.g1_set: - if s[pos+2] == '-' and next == '$': - pos += 1 - self.g1 = ord(s[pos+2]) - pos = pos + 3 - continue - - mb_flag = self.is_multibyte(self.g0) - - if mb_flag: - d = (ord (s[pos]) * 65536 + - ord (s[pos+1]) * 256 + - ord (s[pos+2])) - pos += 3 - else: - d = ord (s[pos]) - pos += 1 - - if (d < 0x20 or - (d > 0x80 and d < 0xa0)): - uni = unichr (d) - continue - - try: - if d > 0x80 and not mb_flag: - (uni, cflag) = marc8_mapping.codesets [self.g1] [d] - else: - (uni, cflag) = marc8_mapping.codesets [self.g0] [d] - except KeyError, e: - if not self.quiet: - stderr.write("couldn't find 0x%x in g0=%s g1=%s\n", - (d, self.g0, self.g1)) - uni = ord(' ') - cflag = False - - if cflag: - combinings.append (unichr (uni)) - else: - uni_list.append (unichr (uni)) - if len (combinings) > 0: - uni_list += combinings - combinings = [] - - # what to do if combining chars left over? - uni_str = u"".join (uni_list) - - # unicodedata.normalize not available until Python 2.3 - if hasattr (unicodedata, 'normalize'): - uni_str = unicodedata.normalize ('NFC', uni_str) - - return uni_str diff --git a/tags/rel-1.7/pymarc/marc8_mapping.py b/tags/rel-1.7/pymarc/marc8_mapping.py deleted file mode 100644 index e69de29..0000000 diff --git a/tags/rel-1.7/pymarc/marcxml.py b/tags/rel-1.7/pymarc/marcxml.py deleted file mode 100644 index 157d978..0000000 --- a/tags/rel-1.7/pymarc/marcxml.py +++ /dev/null @@ -1,136 +0,0 @@ -from xml.sax import make_parser -from xml.sax.handler import ContentHandler, feature_namespaces, \ - feature_namespace_prefixes -from pymarc import Record, Field, MARC8_to_Unicode -import elementtree.ElementTree as ET - -class XmlHandler(ContentHandler): - """ - You can subclass XmlHandler and add your own process_record - method that'll be passed a pymarc.Record as it becomes - available. This could be useful if you want to stream the - records elsewhere (like to a rdbms) without having to store - them all in memory. - """ - - def __init__(self): - self.records = [] - self._record = None - self._field = None - self._subfield_code = None - self._text = [] - - def startElementNS(self, name, qname, attrs): - el = name[1] - self._text = [] - - if el == 'record': - self._record = Record() - elif el == 'controlfield': - tag = attrs.getValue((None, u'tag')) - self._field = Field(tag) - elif el == 'datafield': - tag = attrs.getValue((None, u'tag')) - ind1 = attrs.getValue((None, u'ind1')) - ind2 = attrs.getValue((None, u'ind2')) - self._field = Field(tag, [ind1, ind2]) - elif el == 'subfield': - self._subfield_code = attrs[(None, 'code')] - - def endElementNS(self, name, qname): - el = name[1] - text = u''.join(self._text) - - if el == 'record': - self.process_record(self._record) - self._record = None - elif el == 'leader': - self._record.leader = text - elif el == 'controlfield': - self._field.data = text - self._record.addField(self._field) - self._field = None - elif el == 'datafield': - self._record.addField(self._field) - self._field = None - elif el == 'subfield': - self._field.subfields.append(self._subfield_code) - self._field.subfields.append(text) - self._subfield_code = None - - self._text = [] - - def characters(self, chars): - self._text.append(chars) - - def process_record(self, record): - self.records.append(record) - -def parse_xml(file, handler): - """ - parse a file with a given subclass of xml.sax.handler.ContentHandler - """ - parser = make_parser() - parser.setContentHandler(handler) - parser.setFeature(feature_namespaces, 1) - parser.parse(file) - -def map_xml(f, *files): - """ - map a function onto the file, so that for each record that is - parsed the function f will get called with the extracted record - - def do_it(r): - print r - - map_xml(do_it, 'marc.xml') - """ - parser = make_parser() - handler = XmlHandler() - handler.process_record = f - for file in files: - parse_xml(file, handler) - -def parse_xml_to_array(file): - """ - parse an xml file and return the records as an array - """ - handler = XmlHandler() - parse_xml(file, handler) - return handler.records - -def record_to_xml(record): - """ - converts a record object to a chunk of xml - """ - - # helper for converting non-unicode data to unicode - # TODO: maybe should set g0 and g1 appropriately using 066 $a and $b? - marc8 = MARC8_to_Unicode() - def translate(x): - if type(x) == unicode: return x - else: return marc8.translate(x) - - root = ET.Element('record') - leader = ET.SubElement(root, 'leader') - leader.text = record.leader - for field in record: - if field.isControlField(): - f = ET.SubElement(root, 'controlfield') - f.set('tag', field.tag) - f.text = translate(field.data) - else: - f = ET.SubElement(root, 'datafield') - f.set('tag', field.tag) - f.set('ind1', field.indicators[0]) - f.set('ind2', field.indicators[1]) - for subfield in field: - sf = ET.SubElement(f, 'subfield') - sf.set('code', subfield[0]) - sf.text = translate(subfield[1]) - - return ET.tostring(root) - - - - diff --git a/tags/rel-1.7/pymarc/reader.py b/tags/rel-1.7/pymarc/reader.py deleted file mode 100644 index 8258868..0000000 --- a/tags/rel-1.7/pymarc/reader.py +++ /dev/null @@ -1,56 +0,0 @@ -from pymarc import Record, Field -from constants import END_OF_RECORD -from exceptions import * -from types import * -from cStringIO import StringIO - -class Reader( object ): - """ - A base class for all iterating readers in the pymarc package. - """ - def __iter__( self ): - return self - -class MARCReader( Reader ): - """ - An iterator class for reading a file of MARC21 records. - - Simple usage: - - from pymarc import MARCReader - - ## pass in a file object - reader = MARCReader(file('file.dat')) - for record in reader: - ... - - ## pass in marc in transmission format - reader = MARCReader(rawmarc) - for record in reader: - ... - - """ - - def __init__(self, f): - """ - The constructor which you can pass either raw marc or a file object. - """ - if (type(f) == FileType): self.fh = f - else: self.fh = StringIO(f) - - def next( self ): - """ - To support iteration. - """ - first5 = self.fh.read( 5 ) - if not first5: - raise StopIteration - if len( first5 ) < 5: - raise RecordLengthInvalid - - length = int( first5 ) - chunk = self.fh.read( length - 5 ) - chunk = first5 + chunk - r = Record( chunk ) - return r - diff --git a/tags/rel-1.7/pymarc/record.py b/tags/rel-1.7/pymarc/record.py deleted file mode 100644 index 92062bb..0000000 --- a/tags/rel-1.7/pymarc/record.py +++ /dev/null @@ -1,289 +0,0 @@ -from exceptions import * -from constants import * -from field import * -from types import * -import string -import re - - -class Record( object ): - """ - Record - - A class for representing a MARC record. Each Record object is made up of - multiple Field objects. You'll probably want to look at the docs for Field - to see how to fully use a Record object. - - Basic usage: - - field = Field( \ - tag = '245', - indicators = ['0','1'], - subfields = [ \ - 'a', 'The pragmatic programmer : ', - 'b', 'from journeyman to master /', - 'c', 'Andrew Hunt, David Thomas.' ] - - record.addField( field ) - - Or creating a record from a chunk of MARC in transmission format: - - record = Record( data=chunk ) - - Or getting a record as serialized MARC21. - - raw = record.asMARC21() - - You'll normally want to use a MARCReader object to iterate through - MARC records in a file. - """ - - def __init__( self, data='' ): - self.leader = (' '*10) + '22' + (' '*8) + '4500' - self.fields = list() - self.pos = 0 - if len(data) > 0: - ok = self.decodeMARC( data ) - - def __str__( self ): - """ - In a string context a Record object will return a prettified version - of the record in MARCMaker format. See the docstring for Field.__str__ - for more information. - """ - # join is significantly faster than concatenation - text = "=LDR %s\n" % self.leader - text += string.join( map( str, self.fields ), "\n" ) - text += '\n' - return text - - def __getitem__( self, tag ): - """ - Allows a shorthand lookup by tag: - - record["245"] - - """ - fields = self.getFields( tag ) - if len(fields) > 0: return fields[0] - return None - - def __iter__( self ): - self.__pos = 0 - return self - - def next(self): - if self.__pos >= len( self.fields ): - raise StopIteration - self.__pos += 1 - return self.fields[ self.__pos-1 ] - - def addField( self, *fields ): - """ - addField() will add pymarc.Field objects to a Record object. - Optionally you can pass in multiple fields. - """ - self.fields.extend(fields) - - def getFields( self, *args ): - """ - When passed a tag ( '245' ) getFields() will return a list of all the - fields in a record with a given tag. - - title = record.getFields( '245' ) - - If no fields with the specified - tag are found then an empty list is returned. If you are interested - in more than one tag you can pass in a list: - - subjects = record.getFields( '600', '610', '650' ) - - If no tag is passed in to fields() a list of all the fields will be - returned. - """ - if (len(args) == 0): - return self.fields - - return [f for f in self.fields if f.tag in args] - - def decodeMARC( self, marc ): - """ - decodeMARC() accepts a MARC record in transmission format as a - a string argument, and will populate the object based on the data - found. The Record constructor actually uses decodeMARC() behind - the scenes when you pass in a chunk of MARC data to it. - - """ - - # extract record leader - self.leader = marc[ 0 : LEADER_LEN ] - if len( self.leader ) != LEADER_LEN: raise RecordLeaderInvalid - - # extract the byte offset where the record data starts - baseAddress = int( marc[ 12 : 17 ] ) - if baseAddress <= 0: raise BaseAddressNotFound - if baseAddress >= len( marc ): raise BaseAddressInvalid - - # extract directory, baseAddress-1 is used since the - # director ends with an END_OF_FIELD byte - directory = marc[ LEADER_LEN : baseAddress-1 ] - - # determine the number of fields in record - if len(directory) % DIRECTORY_ENTRY_LEN <> 0: - raise RecordDirectoryInvalid - numFields = len( directory ) / DIRECTORY_ENTRY_LEN - - # add fields to our record using directory offsets - fieldNum = 0 - while ( fieldNum < numFields ): - entryStart = fieldNum * DIRECTORY_ENTRY_LEN - entryEnd = entryStart + DIRECTORY_ENTRY_LEN - entry = directory[ entryStart : entryEnd ] - entryTag = entry[ 0 : 3 ] - entryLength = int( entry[ 3 : 7 ] ) - entryOffset = int( entry[ 7 : 12 ] ) - entryData = marc[ baseAddress + entryOffset : - baseAddress + entryOffset + entryLength - 1 ] - - if entryTag < '010': - field = Field( tag=entryTag, data=entryData ) - else: - subfields = list() - subs = entryData.split( SUBFIELD_INDICATOR ) - i1 = subs[0][0] - i2 = subs[0][1] - for subfield in subs[1:]: - if len(subfield) == 0: continue - code = subfield[0] - data = subfield[1:] - subfields.append( code ) - subfields.append( data ) - field = Field( - tag = entryTag, - indicators = [ i1, i2 ], - subfields = subfields ) - - self.addField( field ) - fieldNum += 1 - - if fieldNum == 0: raise NoFieldsFound - - def asMARC21( self ): - """ - returns the record serialized as MARC21 - """ - fields = '' - directory = '' - offset = 0 - - # build the directory - # each element of the directory includes the tag, the byte length of - # the field and the offset from the base address where the field data - # can be found - for field in self.fields: - fieldData = field.asMARC21() - fields += fieldData - directory += "%03d%04d%05d" % (int(field.tag),len(fieldData),offset) - offset += len( fieldData ) - - # directory ends with an end of field - directory += END_OF_FIELD - - # field data ends with an end of record - fields += END_OF_RECORD - - # the base address where the directory ends and the field data begins - baseAddress = LEADER_LEN + len(directory) - - # figure out the length of the record - recordLength = baseAddress + len(fields) - - # update the leader with the current record length and base address - # the lengths are fixed width and zero padded - self.leader = "%05d%s%05d%s" % \ - ( recordLength, self.leader[5:12], baseAddress, self.leader[17:] ) - - # return the encoded record - return self.leader + directory + fields - - def title( self ): - """ - Returns the title of the record (245 $a an $b). - """ - title = None - try: - title = self['245']['a'] - title += self['245']['b'] - except TypeError, e: - pass - return title - - def isbn( self ): - """ - Returns an ISBN if appropriate. If not present None will - be returned. - """ - isbn = None - try: - # if anyone ever cares alot about performance - # this compilation could be moved out and compiled once - isbnPattern = re.compile( '^([0-9A-Za-z]+)' ) - isbn = isbnPattern.match( self["020"]["a"] ).group(1) - except Exception, e: - pass - return isbn - - def author( self ): - if self['100']: - return self['100'].formatField() - elif self['110']: - return self['110'].formatField() - elif self['111']: - return self['111'].formatField() - return None - - def uniformtitle( self ): - if self['130']: - return self['130'].formatField() - elif self['240']: - return self['240'].formatField() - return None - - def subjects( self ): - """ - Note: Fields 690-699 are considered "local" added entry fields but - occur with some frequency in OCLC and RLIN records. - """ - subjlist = self.getFields ( - '600', '610', '611', '630', '648', '650', '651', '653', '654', - '655', '656', '657', '658', '662', '690', '691', '696', '697', - '698', '699' - ) - return subjlist - - def addedentries( self ): - """ - Note: Fields 790-799 are considered "local" added entry fields but - occur with some frequency in OCLC and RLIN records. - """ - aelist = self.getFields ( - '700', '710', '711', '720', '730', '740', '752', '753', '754', - '790', '791', '792', '793', '796', '797', '798', '799' - ) - return aelist - - def location( self ): - loc = self.getFields('852') - return loc - - def notes( self ): - # todo - pass - - def publisher( self ): - # todo - pass - - def pubyear( self ): - # todo - pass diff --git a/tags/rel-1.7/pymarc/writer.py b/tags/rel-1.7/pymarc/writer.py deleted file mode 100644 index 23c32ff..0000000 --- a/tags/rel-1.7/pymarc/writer.py +++ /dev/null @@ -1,49 +0,0 @@ -from pymarc import Record, Field, WriteNeedsRecord, NoActiveFile -from types import * -from cStringIO import StringIO - -class Writer( object ): - - def write( self ): - pass - -class MARCWriter( Writer ): - """ - A class for writing MARC21 records in transmission format. - - Simple usage: - - from pymarc import MARCWriter - - ## pass in a file - writer = MARCWriter(file('file.dat','w')) - writer.write(record) - - ## use StringIO if you want to write to a string - string = StringIO() - writer = MARCWriter(string) - writer.write(record) - print string - """ - - def __init__(self, f): - """ - You need to pass in a file like object. - """ - self.fh = f - - def write(self, record): - """ - Writes a record. - """ - if type(record) != Record: - raise WriteNeedsRecord - self.fh.write(record.asMARC21()) - - def close( self ): - """ - Closes the file. - """ - self.fh.close() - self.fh = None - diff --git a/tags/rel-1.7/setup.py b/tags/rel-1.7/setup.py deleted file mode 100644 index 21eb0a5..0000000 --- a/tags/rel-1.7/setup.py +++ /dev/null @@ -1,28 +0,0 @@ -# bootstrap easy_install -import ez_setup -ez_setup.use_setuptools() - -from setuptools import setup -from sys import version_info - -classifiers = """\ -Intended Audience :: Education -Intended Audience :: Developers -Intended Audience :: Information Technology -License :: OSI Approved :: BSD License -Programming Language :: Python -Topic :: Text Processing :: General -""" - -setup( - name = 'pymarc', - version = '1.7', - url = 'http://cheeseshop.python.org/pypi/pymarc', - author = 'Ed Summers', - author_email = 'ehs@pobox.com', - license = 'http://www.opensource.org/licenses/bsd-license.php', - packages = [ 'pymarc' ], - description = "read, write and modify MARC bibliographic data", - classifiers = filter( None, classifiers.split("\n") ), - test_suite = 'test' -) diff --git a/tags/rel-1.7/test.py b/tags/rel-1.7/test.py deleted file mode 100644 index 8ea1517..0000000 --- a/tags/rel-1.7/test.py +++ /dev/null @@ -1,19 +0,0 @@ -import unittest -import test.record -import test.field -import test.reader -import test.encode -import test.writer - -def suite(): - suite = unittest.TestSuite() - suite.addTest( test.record.suite() ) - suite.addTest( test.field.suite() ) - suite.addTest( test.reader.suite() ) - suite.addTest( test.encode.suite() ) - suite.addTest( test.writer.suite() ) - return suite - -runner = unittest.TextTestRunner() -runner.run( suite() ) - diff --git a/tags/rel-1.7/test/__init__.py b/tags/rel-1.7/test/__init__.py deleted file mode 100644 index 4c41d24..0000000 --- a/tags/rel-1.7/test/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -import record -import field -import reader -import marc8 diff --git a/tags/rel-1.7/test/bad.dat b/tags/rel-1.7/test/bad.dat deleted file mode 100644 index 4800dc9..0000000 --- a/tags/rel-1.7/test/bad.dat +++ /dev/null @@ -1,191 +0,0 @@ - - Date: 03/15/2007 - - When searching the Florida State University Library catalog, - you sent the following records: - - -FMT BK -LDR 00000nam 2200409Ia 4500 -006 m d -007 cr cnu|||unuuu -008 041015s2004 caua sb s000|0 eng d -020 |a 1417545372 (electronic bk.) -035 |a (OCoLC)56733780 -0359 |a AMR9920 |b FS -TKR |a (Source)B0013464- 321 -TKR |a (FTaSU)NETLIBY20050112 -OWN |a FS -040 |a N$T |c N$T -05014 |a PS1303 |b .S25 2004eb -08204 |a 818/.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24510 |a Mark Twain's helpful hints for good living |h [electronic resource] : |b a handbook for the damned human race / |c edited by Lin Salamo, Victor Fischer, and Michael B. Frank of the Mark Twain Project. -260 |a Berkeley : |b University of California Press, |c c2004. -300 |a xiv, 207 p. : |b ill. |c 21 cm. -4901 |a Jumping frogs ; |v 2 -504 |a Includes bibliographical references (p. 203-206). -533 |a Electronic reproduction. |b Boulder, Colo. : |c NetLibrary, |d 2004. |n Available via World Wide Web. |n Access may be limited to NetLibrary affiliated libraries. -650 0 |a Conduct of life |v Quotations, maxims, etc. -650 0 |a Conduct of life |v Literary collections. -60010 |a Twain, Mark, |d 1835-1910 |v Quotations. -655 7 |a Electronic books. |2 local -7001 |a Salamo, Lin. -7001 |a Fischer, Victor, |d 1942- -7001 |a Frank, Michael B. -7102 |a Bancroft Library. |b Mark Twain Project. -7102 |a NetLibrary, Inc. -7761 |c Original |z 0520242459 |w (DLC) 2003024224 |w (OCoLC)53398020 -8001 |a Twain, Mark, |d 1835-1910. |t Jumping frogs ; |v 2. -85640 |3 Bibliographic record display |u http://www.netLibrary.com/urlapi.asp?action=summary&v=1&bookid=119359 |z An electronic book accessible through the World Wide Web; click for information -CAT |a NCRD |b 20 |c 20041222 -NCO |a I -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST8 |0 HOL |1 FSU60-002387996 |n 8 |a FTaSU |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -LOC8 |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -SYS 002249954 - -FMT BK -LDR 00000pam 2200301 a 4500 -008 040820s2004 nyu b 000|0 eng -010 |a 2004057341 -020 |a 0142437751 -035 |a (OCoLC)56413662 -0359 |a AMS5114 |b FS -TKR |a (Source)ONIFS141- 49 -OWN |a FS -040 |a DLC |c DLC |d YDX |d FDA -049 |a FDAA ksm -05000 |a PS1302 |b .Q56 2004 -08200 |a 818/.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24514 |a The portable Mark Twain / |c edited with an introduction by Tom Quirk. -260 |a New York : |b Penguin Books, |c 2004. -300 |a liv, 583 p. ; |c 20 cm. -440 0 |a Penguin classics -504 |a Includes bibliographical references (p. [xli]-xlv). -60010 |a Twain, Mark, |d 1835-1910 |v Correspondence. -650 0 |a Humorous stories, American. -650 0 |a Authors, American |y 19th century |v Correspondence. -7001 |a Quirk, Tom, |d 1946- -CAT |a NCRD |b 20 |c 20050218 -CAT |a NUPD |b 20 |c 20050324 -NCO |a blank -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST0 |0 Z30 |1 002255004000010 |b FSULC |c GEN |o BOOK |d 01 |f N |r FSU60-002393331 |n 0 |h PS1302 |i .Q56 2004 |3 Book Sort |4 STROZIER LIBRARY |6 Regular Loan -LOC0 |b FSULC |c GEN |o BOOK |h PS1302 |i .Q56 2004 |3 Book Sort |4 STROZIER LIBRARY |6 Regular Loan -SYS 002255004 - -FMT BK -LDR 00000nam 2200361Ia 4500 -006 m d -007 cr cnu|||unuuu -008 031127s2003 cau s 000|i eng d -020 |a 0520900995 (electronic bk.) -035 |a (OCoLC)53798433 -0359 |a ALU9407 |b FS -TKR |a (Source)B0011135- 96 -TKR |a (FTaSU)NETLIBY20040302 -OWN |a FS -040 |a N$T |c N$T -05014 |a PS1331 |b .A4 2003eb -08214 |a 818.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24010 |a Correspondence. |k Selections -24510 |a Mark Twain's letters 1876-1880. |n Volume 2, |p 1877 |h [electronic resource] / |c edited by the Mark Twain Project. -250 |a Electronic ed. -260 |a Berkeley, Calif. : |b Published for the University of California Press by the Mark Twain Project of the Bancroft Library, |c 2003. -538 |a Mode of access: World Wide Web. -506 |a Made available through NetLibrary; access may be limited to NetLibrary affiliated libraries. -500 |a Title from ebook title screen. -60010 |a Twain, Mark, |d 1835-1910 |v Correspondence. -650 0 |a Authors, American |y 19th century |v Correspondence. -650 0 |a Humorists, American |y 19th century |v Correspondence. -655 7 |a Electronic books. |2 local -7102 |a Bancroft Library. |b Mark Twain Project. -7102 |a NetLibrary, Inc. -8564 |3 Bibliographic record display |u http://www.netLibrary.com/urlapi.asp?action=summary&v=1&bookid=100194 |z An electronic book accessible through the World Wide Web; click for information -CAT |a NCRD |b 20 |c 20040224 -NCO |a I -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST8 |0 HOL |1 FSU60-002178151 |n 8 |a FTaSU |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -LOC8 |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -SYS 002042593 - -FMT BK -LDR 00000nam 2200373Ia 4500 -006 m d -007 cr cnu|||unuuu -008 031127s2003 cau s 000|i eng d -020 |a 0520900987 (electronic bk.) -035 |a (OCoLC)53798432 -0359 |a ALU9406 |b FS -TKR |a (Source)B0011135- 95 -TKR |a (FTaSU)NETLIBY20040302 -OWN |a FS -040 |a N$T |c N$T -05014 |a PS1331 |b .A4 2003eb -08214 |a 818.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24010 |a Correspondence. |k Selections -24510 |a Mark Twain's letters 1876-1880. |n Volume 1, |p 1876 |h [electronic resource] / |c edited by the Mark Twain Project. -250 |a Electronic ed. -260 |a Berkeley, Calif. : |b Published for the University of California Press by the Mark Twain Project of the Bancroft Library, |c 2003. -538 |a Mode of access: World Wide Web. -506 |a Made available through NetLibrary; access may be limited to NetLibrary affiliated libraries. -500 |a Title from ebook title screen. -60010 |a Twain, Mark, |d 1835-1910 |v Correspondence. -650 0 |a Authors, American |y 19th century |v Correspondence. -650 0 |a Humorists, American |y 19th century |v Correspondence. -655 7 |a Electronic books. |2 local -7102 |a Bancroft Library. |b Mark Twain Project. -7102 |a NetLibrary, Inc. -7102 |a NetLibrary, Inc. -8564 |3 Bibliographic record display |u http://www.netLibrary.com/urlapi.asp?action=summary&v=1&bookid=100193 |z An electronic book accessible through the World Wide Web; click for information -CAT |a NCRD |b 20 |c 20040224 -NCO |a I -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST8 |0 HOL |1 FSU60-002178150 |n 8 |a FTaSU |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -LOC8 |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -SYS 002042592 - -FMT BK -LDR 00000nam 2200361Ia 4500 -006 m d -007 cr cnu|||unuuu -008 031202s2003 cau s 000|i eng d -020 |a 0520901010 (electronic bk.) -035 |a (OCoLC)53817958 -0359 |a ALU9412 |b FS -TKR |a (Source)B0011135- 101 -TKR |a (FTaSU)NETLIBY20040302 -OWN |a FS -040 |a N$T |c N$T -05014 |a PS1331 |b .A4 2003eb -08214 |a 818.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24010 |a Correspondence. |k Selections -24510 |a Mark Twain's letters 1876-1880. |n Volume 4, |p 1879 |h [electronic resource] / |c edited by the Mark Twain Project. -250 |a Electronic ed. -260 |a Berkeley, Calif. : |b Published for the University of California Press by the Mark Twain Project of the Bancroft Library, |c 2003. -538 |a Mode of access: World Wide Web. -506 |a Made available through NetLibrary; access may be limited to NetLibrary affiliated libraries. -500 |a Title from ebook title screen. -60010 |a Twain, Mark, |d 1835-1910 |v Correspondence. -650 0 |a Authors, American |y 19th century |v Correspondence. -650 0 |a Humorists, American |y 19th century |v Correspondence. -655 7 |a Electronic books. |2 local -7102 |a Bancroft Library. |b Mark Twain Project. -7102 |a NetLibrary, Inc. -8564 |3 Bibliographic record display |u http://www.netLibrary.com/urlapi.asp?action=summary&v=1&bookid=100196 |z An electronic book accessible through the World Wide Web; click for information -CAT |a NCRD |b 20 |c 20040224 -NCO |a I -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST8 |0 HOL |1 FSU60-002178156 |n 8 |a FTaSU |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -LOC8 |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -SYS 002042598 - - - - Florida State University - Library Staff diff --git a/tags/rel-1.7/test/batch.xml b/tags/rel-1.7/test/batch.xml deleted file mode 100644 index b09773a..0000000 --- a/tags/rel-1.7/test/batch.xml +++ /dev/null @@ -1,157 +0,0 @@ - - - - - 00925njm 22002777a 4500 - 5637241 - DLC - 19920826084036.0 - sdubumennmplu - 910926s1957 nyuuun eng - - 91758335 - - - 1259 - Atlantic - - - DLC - DLC - - - Atlantic 1259 - - - The Great Ray Charles - [sound recording]. - - - New York, N.Y. : - Atlantic, - [1957?] - - - 1 sound disc : - analog, 33 1/3 rpm ; - 12 in. - - - Ray Charles, piano & celeste. - - - The Ray -- My melancholy baby -- Black coffee -- There's no you -- Doodlin' -- Sweet sixteen bars -- I surrender dear -- Undecided. - - - Brief record. - - - Jazz - 1951-1960. - - - Piano with jazz ensemble. - - - Charles, Ray, - 1930- - prf - - - - 01832cmma 2200349 a 4500 - 12149120 - 20001005175443.0 - cr ||| - 000407m19949999dcu g m eng d - - 0 - ibc - copycat - 1 - ncip - 20 - y-gencompf - - - undetermined - web preservation project (wpp) - - - vb07 (stars done) 08-19-00 to HLCD lk00; AA3s lk29 received for subject Aug 25, 2000; to DEWEY 08-25-00; aa11 08-28-00 - - - 00530046 - - - (OCoLC)ocm44279786 - - - IEU - IEU - N@F - DLC - - - lccopycat - - - n-us-dc - n-us--- - - - F204.W5 - - - 975.3 - 13 - - - The White House - [computer file]. - - - Computer data. - - - Washington, D.C. : - White House Web Team, - 1994- - - - Mode of access: Internet. - - - Title from home page as viewed on Aug. 19, 2000. - - - Features the White House. Highlights the Executive Office of the President, which includes senior policy advisors and offices responsible for the President's correspondence and communications, the Office of the Vice President, and the Office of the First Lady. Posts contact information via mailing address, telephone and fax numbers, and e-mail. Contains the Interactive Citizens' Handbook with information on health, travel and tourism, education and training, and housing. Provides a tour and the history of the White House. Links to White House for Kids. - - - White House (Washington, D.C.) - - - United States. - Executive Office of the President. - - - United States. - Office of the Vice President. - - - United States. - Office of the First Lady. - - - White House Web Team. - - - http://www.whitehouse.gov - - - http://lcweb.loc.gov/staff/wpp/whitehouse.html - Web site archive - - - diff --git a/tags/rel-1.7/test/encode.py b/tags/rel-1.7/test/encode.py deleted file mode 100644 index 27e0c76..0000000 --- a/tags/rel-1.7/test/encode.py +++ /dev/null @@ -1,25 +0,0 @@ -import util -from pymarc import MARCReader, Record, Field -import unittest -import os - -class Encode( unittest.TestCase ): - - def test_encode_decode( self ): - # get raw data from file - original = file( 'test/one.dat' ).read() - # create a record object for the file - reader = MARCReader(file('test/one.dat')) - record = reader.next() - # make sure original data is the same as - # the record encoded as MARC - raw = record.asMARC21() - self.assertEqual( original, raw ) - -def suite(): - suite = unittest.makeSuite( Encode, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - diff --git a/tags/rel-1.7/test/field.py b/tags/rel-1.7/test/field.py deleted file mode 100644 index e82aaee..0000000 --- a/tags/rel-1.7/test/field.py +++ /dev/null @@ -1,103 +0,0 @@ -import util -import unittest -from pymarc.record import Record, Field - -class FieldTest( unittest.TestCase ): - - def setUp( self ): - self.field = Field( - tag = '245', - indicators = [ 0, 1 ], - subfields = [ - 'a', 'Huckleberry Finn: ', - 'b', 'An American Odyssey' - ] - ) - - self.controlfield = Field( - tag = '008', - data = '831227m19799999nyu ||| | ger ' - ) - - self.subjectfield = Field( - tag = '650', - indicators = [' ', '0'], - subfields = [ - 'a', 'Python (Computer program language)', - 'v', 'Poetry.' - ] - ) - - def test_string( self ): - self.assertEquals( str(self.field), - '=245 01$aHuckleberry Finn: $bAn American Odyssey') - - def test_controlfield_string( self ): - self.assertEquals( str(self.controlfield), - r'=008 831227m19799999nyu\\\\\\\\\\\|||\|\ger\\') - - def test_indicators( self ): - assert self.field.indicator1 is 0 - self.assertEqual( self.field.indicator2, 1 ) - - def test_subfields_created( self ): - subfields = self.field.subfields - self.assertEqual( len( subfields ), 4 ) - - def test_subfield_short( self ): - self.assertEqual( self.field['a'], 'Huckleberry Finn: ' ) - self.assertEqual( self.field['z'], None ) - - def test_subfields( self ): - self.assertEqual( self.field.getSubfields( 'a' ), - ['Huckleberry Finn: '] ) - self.assertEqual( self.subjectfield.getSubfields( 'a' ), - ['Python (Computer program language)']) - - def test_subfields_multi( self ): - self.assertEqual( self.field.getSubfields( 'a','b' ), - ['Huckleberry Finn: ', 'An American Odyssey' ] ) - self.assertEqual( self.subjectfield.getSubfields( 'a','v' ), - ['Python (Computer program language)', 'Poetry.' ] ) - - def test_encode( self ): - self.field.asMARC21() - - def test_iterator( self ): - string = "" - for subfield in self.field: - string += subfield[0] - string += subfield[1] - self.assertEquals( string, "aHuckleberry Finn: bAn American Odyssey" ) - - def test_value( self ): - self.assertEquals( self.field.value(), - 'Huckleberry Finn: An American Odyssey' ) - self.assertEquals( self.controlfield.value(), "831227m19799999nyu ||| | ger " ) - - def test_non_integer_tag( self ): - # make sure this doesn't throw an exception - f = Field( tag="3 0", indicators=[0,1], subfields=['a', 'foo'] ) - - def test_add_subfield( self ): - f = Field( tag="245", indicators=[0,1], subfields=['a', 'foo'] ) - f.addSubfield('a','bar') - self.assertEquals( f.__str__(), '=245 01$afoo$abar') - - def test_is_subject_field( self ): - self.assertEqual( self.subjectfield.isSubjectField(), True ) - self.assertEqual( self.field.isSubjectField(), False ) - - def test_format_field( self ): - self.assertEqual( self.subjectfield.formatField(), - 'Python (Computer program language) -- Poetry.' ) - self.assertEqual( self.field.formatField(), 'Huckleberry Finn: An American Odyssey' ) - -def suite(): - suite = unittest.makeSuite( FieldTest, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - - diff --git a/tags/rel-1.7/test/marc.dat b/tags/rel-1.7/test/marc.dat deleted file mode 100644 index 9c52c7d..0000000 --- a/tags/rel-1.7/test/marc.dat +++ /dev/null @@ -1 +0,0 @@ -01060cam 22002894a 45000010009000000050017000090080041000260350021000679060045000889250044001339550160001779550053003370100017003900200015004070400018004220420008004400500023004480820014004711000025004852450088005102600044005983000027006425040041006696500026007107000026007369850008007621177850420040816084925.0990802s2000 mau b 001 0 eng  a(DLC) 99043581 a0bvipcorignewd1eocipf19gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc05 to ja00 08-02-99; jf05 to subj. 08/02/99; jf11 to sl 08-03-99; jf25 08-05-99 to ddc; bk rec'd, to CIP ver. ps07 01-07-00; CIP ver jf05 to sl 04/05/00 aADDED COPIES: another copy to ASCD ps15 01-12-00 a 99043581  a020161622X aDLCcDLCdDLC apcc00aQA76.6b.H857 200000a005.12211 aHunt, Andrew,d1964-14aThe pragmatic programmer :bfrom journeyman to master /cAndrew Hunt, David Thomas. aReading, Mass :bAddison-Wesley,c2000. axxiv, 321 p. ;c24 cm. aIncludes bibliographical references. 0aComputer programming.1 aThomas, David,d1956- eGAP00979cam 2200241 a 45000010009000000050017000090080041000269060045000679250042001129550206001540100017003600200015003770400018003920500026004100820017004361000016004532450037004692500012005062600051005183000078005695040051006476500039006981251588220020923085341.0010827s2001 cc a b 001 0 eng  a7bcbccorigcopd2encipf20gy-gencatlg0 aacquireb2 shelf copyxpolicy default apb07 2001-08-27 to ASCDajf00 2001-08-31ajf00 2001-09-05;cjf03 2001-10-16 to Subj.djf01 2001-10-25 to slejf12 2001-11-23; jf12 to Dewey 11-23-01aaa20 2001-12-07; copy 2 added jf16 to BCCD 09-23-02 a 2001276084 a0596000855 aDLCcDLCdDLC00aQA76.73.P98bL88 200100a005.13/32211 aLutz, Mark.10aProgramming Python /cMark Lutz. a2nd ed. aBeijing :aSebastopol, CA :bO'Reilly,cc2001. axxxvii, 1255 p. :bill. ;c24 cm. +e1 computer optical disc (4 3/4 in.). aIncludes bibliographical references and index. 0aPython (Computer program language)00887cam 2200253 a 45000010009000000050017000090080041000269060045000679250044001129550151001560100017003070200015003240400018003390500027003570820017003841000016004012450051004172500012004682600040004803000035005205040020005556500039005757000019006141361051220040714135238.0040601s2004 caua 001 0 eng  a7bcbccorigcopd2encipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apv17 2004-06-01 Preprocessor to ASCDajf00 2004-06-03;cjf03 2004-06-24 to Subj.djf09 2004-06-28 to slejf12 2004-07-01 to Deweyaaa25 2004-07-14 a 2004273129 a0596002815 aDLCcDLCdDLC00aQA76.73.P98bL877 200400a005.13/32221 aLutz, Mark.10aLearning Python /cMark Lutz and David Ascher. a2nd ed. aSebastopol, CA :bO'Reilly,cc2004. axxvi, 591 p. :bill. ;c24 cm. aIncludes index. 0aPython (Computer program language)1 aAscher, David.01038cam 2200289 a 45000010009000000050017000090080041000269060045000679250042001129550167001540100017003210150015003380200015003530350023003680400023003910420014004140500026004280820017004542450065004712600039005363000027005755000048006025000020006506500039006707000020007097000019007291306994220030606071827.0030127s2002 cau 001 0 eng  a7bcbcccopycatd2encipf20gy-gencatlg0 aacquireb2 shelf copyxpolicy default aps04 2003-01-27 to ASCDajf00 2003-01-30cjf05 2003-01-30 to subj.djf09 2003-01-30 to slejf12 2003-02-03 to Deweyaaa20 2003-03-10ajg07 2003-06-06 copy 2 added a 2003268354 aGBA2-Y6761 a0596001673 a(OCoLC)ocm49044543 aUKMcUKMdCUSdDLC alccopycat00aQA76.73.P98bP95 200200a005.13/322100aPython cookbook /cedited by Alex Martelli and David Ascher. aSebastopol, CA :bO'Reilly,c2002. axxix, 574 p. ;c24 cm. a"Recipes from the Python community"--Cover. aIncludes index. 0aPython (Computer program language)1 aMartelli, Alex.1 aAscher, David.00759nam 22002295a 45000010009000000050017000090080041000260350022000679060045000899250044001349550020001780100017001980200015002150400013002300420008002431000021002512450068002722600084003402630009004243000012004339630084004451312796220030318153335.0030318s2003 inu 000 0 eng  a(DLC) 2003104024 a0bibccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2003-03-18 a 2003104024 a1592000738 aDLCcDLC apcc1 aDawson, Michael.10aPython programming for the absolute beginner /cMichael Dawson. aIndianapolis, IN :bPremier Press Inc., a division of Course Technology,c2003. a0306 ap.ccm. aMargaret Bauer ; phone (812) 273-0561 ; fax null email margaret_bauer@yahoo.com01304cam 22002894a 45000010009000000050017000090080041000269060045000679250044001129550280001560100017004360200015004530400018004680420008004860500024004940820017005181000049005352450150005842460030007342600053007643000036008175040064008536500026009176500023009437000021009667000027009871256551420020718085037.0011016s2002 njua b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2001-10-16 to ASCD;cjf03 2001-10-17 to Subj.djf01 2001-10-25 to slejf25 2001-10-25 to Deweyaaa20 2001-10-26aps16 2002-01-11 bk rec'd, to CIP ver.ajf00 2002-01-16fjf04 2002-01-18 to S.L.gjf12 2002-01-18 to bccdajf00 2002-03-26; copy 2 added jf16 to BCCD 07-18-02 a 2001055410 a0130410659 aDLCcDLCdDLC apcc00aQA76.625b.T48 200200a005.2/762211 aThiruvathukal, George K.q(George Kuriakose)10aWeb programming :btechniques for integrating Python, Linux, Apache, and MySQL /cGeorge K. Thiruvathukal, John P. Shafaee, Thomas W. Christoper.14aWeb programming in Python aUpper Saddle River, NJ :bPrentice Hall,cc2002. axviii, 745 p. :bill. ;c24 cm. aIncludes bibliographical references (p. 723-725) and index. 0aInternet programming. 0aWeb sitesxDesign.1 aShafaee, John P.1 aChristopher, Thomas W.01023cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550168001560100017003240200035003410400018003760420008003940500026004020820016004281000029004442450067004732500012005402600051005523000035006035000020006386500039006586300021006977000027007181187737320010105091546.0991228s2000 cc a 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc01 12-28-99; jf03 01-04-00 ; jf11 to sl 1-4-00; jf12 to Dewey 01-06-00; aa05 01-10-00; CIP ver. pv08 to BCCD 05-01-00; copy 2 added jf16 to BCCD 01-05-01 a 99085714  a1565926218 (pbk. : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P98bH36 200000a005.2652211 aHammond, Markq(Mark J.)10aPython programming on Win32 /cMark Hammond and Andy Robinson. a1st ed. aBeijing ;aSebastopol, CA :bO'Reilly,cc2000. axvii, 652 p. :bill. ;c24 cm. aIncludes index. 0aPython (Computer program language)00aMicrosoft Win32.1 aRobinson, Andy,d1967-00867cam 22002538a 45000010009000000050017000090080041000269060045000679250044001129550127001560100017002830200015003000400013003150420008003280500026003360820017003621000019003792450080003982600047004782630009005253000011005346500039005459630029005841343237720031222144424.0031211s2003 oru 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc27 2003-12-11 RUSH to ASCDcjf07 2003-12-17 to subjectdjf09 2003-12-17 to slejp05 2003-12-18 to Deweyaaa20 2003-12-22 a 2003064366 a1887902996 aDLCcDLC apcc00aQA76.73.P98bZ45 200300a005.13/32221 aZelle, John M.10aPython programming :ban introduction to computer science /cJohn M. Zelle. aWilsonville, OR :bFranklin, Beedlec2003. a0312 ap. cm. 0aPython (Computer program language) aTom Sumner, 503-682-766801008cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550171001560100017003270200015003440400018003590420008003770500026003850820018004111000026004292450065004552600046005203000034005665000020006006500039006206500026006596500023006857000022007081222727720030509151148.0001109s2002 inua 001 0 eng  a7bcbccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 11-09-00apv11 2002-04-12 2 copies to ASCDajf00 2002-04-18;cjf03 2002-08-20 to Subj.djf09 2002-08-21 to slejf25 2002-09-10 2 copies to Deweyaaa05 2002-10-04 a 00110884  a0735710902 aDLCcDLCdDLC apcc00aQA76.73.P98bH65 200200a005.2/7622211 aHolden, Steve,d1950-10aPython Web programming /cSteve Holden [with David Beazley]. aIndianapolis, Ind. :bNew Riders,cc2002. axxi, 691 p. :bill. ;c23 cm. aIncludes index. 0aPython (Computer program language) 0aInternet programming. 0aWeb sitesxDesign.1 aBeazley, David M.01049cam 22002534a 45000010009000000050017000090080041000269060045000679250044001129550148001560100017003040200015003210400018003360420008003540500026003620820017003881000018004052450047004232600052004703000066005225040051005885380117006396500039007561216916820010522141328.0000911s2000 nju b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc16 09-11-00; jf02 09-12-00 ; jf11 to sl 9-12-00; jf12 to Dewey 09-14-00; aa05 09-14-00; CIP Ver. jf02 05-11-01; jf12 to BCCD 05-22-01 a 00047856  a0130260363 aDLCcDLCdDLC apcc00aQA76.73.P98bC48 200100a005.13/32211 aChun, Wesley.10aCore python programming /cWesley J. Chun. aUpper Saddle River, NJ :bPrentice Hall,c2001. axxix, 771 p. ;c24 cm. +e1 computer optical disc (4 3/4 in.) aIncludes bibliographical references and index. aSystem requirements for accompanying computer disc: Windows 9x/Me/NT/2000; a Web brouser; Macintosh; UNIX/Linux. 0aPython (Computer program language)00948cam 22002654a 45000010009000000050017000090080041000269060045000679250044001129550133001560100017002890200015003060400018003210420008003390500026003470820017003731000021003902450055004112600038004663000036005045040051005406500039005916500036006306300016006661213218820010817152505.0000804s2000 ctua b 001 0 eng  a7bcbccorignewd2encipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pb05 08-04-00;jfoo 08-08-00;cjf03 2001-07-18 to Subj.djf02 2001-07-19 to slejf25 2001-07-31 to Deweyaaa20 2001-08-17 a 00697831  a1884777813 aDLCcDLCdDLC apcc00aQA76.73.P98bG73 200000a005.13/32211 aGrayson, John E.10aPython and Tkinter programming /cJohn E. Grayson. aGreenwich, CT :bManning,cc2000. axxiii, 658 p. :bill. ;c24 cm. aIncludes bibliographical references and index. 0aPython (Computer program language) 0aTcl (Computer program language)00aTk toolkit.00767nam 22002295a 45000010009000000050017000090080041000260350022000679060045000899250044001349550020001780100017001980200015002150400013002300420008002432450081002512600079003322630009004113000012004204400021004329630084004531337832520031020153106.0031020s2003 inu 000 0 eng  a(DLC) 2003114351 a0bibccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc10 2003-10-20 a 2003114351 a1592000770 aDLCcDLC apcc00aGame programming with Python, Lua, and Ruby /c[edited by] Estelle Manticas. aIndianapolis, IN :bPremier Press, a Division of Course Technology,c2003. a0311 ap.ccm. aGame development aMargaret Bauer ; phone (812) 273-0561 ; fax null email margaret_bauer@yahoo.com01121cam 22002414a 45000010009000000050017000090080041000269060045000679250044001129550362001560100017005180200015005350400018005500420008005680500026005760820017006021000027006192450058006462600052007043000033007565040051007896500039008401256552920030227150222.0011016s2002 njua b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2001-10-16 to ASCD;cjf05 2001-10-17 to subj.djf04 2001-10-17 to S.L.ejf25 2001-10-25 to Deweyaaa20 2001-10-26aps11 2002-01-15 bk rec'd, to CIP ver.fjp07 2002-02-13ajp00 2002-03-08gjp85 2002-03-08 to BCCD; copy 2 added jf16 to BCCD 07-18-02ajf00 2003-01-29ajf07 2003-02-27 somehow copy 1 got back into the CIP ver. stream (handed to acting TL) a 2001055411 a0130409561 aDLCcDLCdDLC apcc00aQA76.73.P98bC47 200200a005.13/32211 aChristopher, Thomas W.10aPython programming patterns /cThomas W. Christopher. aUpper Saddle River, NJ :bPrentice Hall,c2002. axix 538 p. :bill. ;c24 cm. aIncludes bibliographical references and index. 0aPython (Computer program language)01062cam 22002778a 45000010009000000050017000090080041000269060045000679250044001129550120001560100017002760200028002930400013003210420008003340500026003420820018003681000024003862450134004102600041005442630009005853000011005946500039006056500037006446500039006819630064007201275256420020426115101.0020424s2002 mau 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc21 2002-04-24 to ASCDcjf05 2002-04-25 to subj.djf09 2002-04-25 to slejf25 2002-04-26 to Deweyaaa20 2002-04-26 a 2002066565 a0201616165 (alk. paper) aDLCcDLC apcc00aQA76.73.P98bH54 200200a005.2/7622211 aHightower, Richard.10aPython programming with the Java class libraries :ba tutorial for building Web and Enterprise applications /cRichard Hightower. aBoston, MA :bAddison-Wesley,c2002. a0207 ap. cm. 0aPython (Computer program language) 0aJava (Computer program language) 0aApplication softwarexDevelopment. aMarilyn Rash, 617-848-6509; email: timothy.nicholls@awl.com01012cam 22002294a 45000010009000000050017000090080041000269060045000679250044001129550192001560100017003480200028003650400018003930420008004110500026004190820017004451000017004622450151004792600042006303000071006726500039007431216723920010608101527.0000908s2001 mau b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc21 09-08-00;jf05 (desc) 09/08/00 ; jf11 to sl 9-11-00; jf12 to Dewey 09-12-00;aa03 9-12-00;CIP ver jf05 to sl 01/11/01; jf12 to BCCD 02-01-01; copy 2 added jf16 to BCCD 04-24-01 a 00046921  a0201709384 (alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P48bG38 200100a005.13/32211 aGauld, Alan.10aLearn to program using Python :ba tutorial for hobbyists, self-starters, and all who want to learn the art of computer programming /cAlan Gauld. aReading, MA :bAddison-Wesley,c2001. axii, 270 p. ;c24 cm.e+ 1 computer laser optical disc (4 3/4 in.) 0aPython (Computer program language)00935cam 22002534a 450000100070000000500170000700800410002403500210006590600450008692500440013195501480017501000170032302000220034004000180036204200080038005000260038808200170041410000160043124500610044726000390050830000750054765000390062270000200066120525620000830103214.0990629s2000 caua 001 0 eng  9(DLC) 99065006 a7bcbccorignewd2eopcnf19gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apn08/e-pcn 06-29-99; to ASCD pb02 06-10-00; jf00 06-13-00; jf03 08-17-00 ; jf11 to sl 8-22-00; jf25 2 copies to Dewey 08-24-00; aa19 08-30-2000 a 99065006  a0761523340 (pbk.) aDLCcDLCdDLC apcc00aQA76.73.P98bA48 199900a005.13/32211 aAltom, Tim.10aProgramming with Python /cTim Altom with Mitch Chapman. aRocklin, CA :bPrima Tech,cc1999. axxxiv, 372 p. :bill. ;c24 cm. +e1 computer optical disc (4 3/4 in.) 0aPython (Computer program language)1 aChapman, Mitch.01214cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550202001560100017003580200047003750400018004220420008004400500024004480820017004721000019004892450079005082600051005873000058006386500026006966500048007226500040007706500049008108560077008591328439520040226131230.0030722s2004 maua 001 0 eng  a7bcbccorignewd1eecipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ajf05 2003-07-22cjf05 2003-07-22 to subj.djf09 2003-07-22 to slejf12 2003-07-23 to Deweyaaa20 2003-07-29ajf00 2004-01-29fjf07 2004-02-02ejf12 2004-02-03 to BCCDajf16 2004-02-26 copy2 to BCCD a 2003016400 a1584502681 (Pbk. with CD-ROM : alk. paper) aDLCcDLCdDLC apcc00aQA76.625b.J66 200400a005.2/762221 aJones, M. Tim.10aBSD Sockets programming from a multi-language perspective /cM. Tim Jones. aHingham, Mass. :bCharles River Media,cc2004. axix, 444 p. :bill. ;c24 cm. +e1 CD-ROM (4 3/4 in.) 0aInternet programming. 0aComputer networksxDesign and construction. 0aInternetworking (Telecommunication) 0aProgramming languages (Electronic computers)413Table of contentsuhttp://www.loc.gov/catdir/toc/ecip047/2003016400.html01113cam 2200277 a 4500001000800000005001700008008004100025035002100066906004500087955011600132010001700248020003300265040001800298050002300316082001600339245009800355260004600453300003300499440004900532504006400581650005100645650003600696650002300732700001800755991006200773159816719981112152315.2940902s1995 maua b 001 0 eng  9(DLC) 94034264 a7bcbccorignewd1eocipf19gy-gencatlg apc18 to ja00 09-02-94; jf06 to subj 09-06-94; jf11 to sl 09-06-94; jf12 09-06-94 to ddc; CIP ver. jc03 11-23-94 a 94034264  a0201633612 (acid-free paper) aDLCcDLCdDLC00aQA76.64b.D47 199500a005.1/222000aDesign patterns :belements of reusable object-oriented software /cErich Gamma ... [et al.]. aReading, Mass. :bAddison-Wesley,cc1995. axv, 395 p. :bill. ;c25 cm. 0aAddison-Wesley professional computing series aIncludes bibliographical references (p. 375-381) and index. 0aObject-oriented programming (Computer science) 0aComputer softwarexReusability. 0aSoftware patterns.1 aGamma, Erich. bc-GenCollhQA76.64i.D47 1995p00011185514tCopy 1wBOOKS01233cam 2200289 a 45000010009000000050017000090080041000269060045000679250044001129550226001560100017003820200034003990400013004330500024004460820014004702450065004842460015005492500012005642600043005763000021006195000111006405040068007516500026008196500025008457000022008707000051008921237004420020812080859.0010405s2001 mau b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc20 to ja00 04-05-01; jp07 04-11-01 sent to sl;jp85 to Dewey 04-19-01; aa20 04-20-01aps13 2001-08-16 bk rec'd, to CIP ver.fjf07 2001-08-20ajf00 2001-08-20gjf12 2001-08-23 to bccdajf01 2001-09-13 copy 2 added to BCCD a 2001031277 a0262032937 (hc. : alk. paper) aDLCcDLC00aQA76.6b.I5858 200100a005.122100aIntroduction to algorithms /cThomas H. Cormen ... [et al.].30aAlgorithms a2nd ed. aCambridge, Mass. :bMIT Press,cc2001. axxi, 1180 p. cm. aRev. ed. of: Introduction to algorithms / Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest. c1990. aIncludes bibliographical references (p. [1127]-1130) and index. 0aComputer programming. 0aComputer algorithms.1 aCormen, Thomas H.1 aCormen, Thomas H.tIntroduction to algorithms.01009pam 2200265 a 4500001000800000005001700008008004100025035002100066906004500087955011600132010001700248020002200265040001800287050002600305082001700331100001800348245003700366260005300403300003500456440005200491500002700543504006400570650004400634991006500678303540919960425075058.2951006s1996 njua b 001 0 eng  9(DLC) 95045017 a7bcbccorignewd1eocipf19gy-gencatlg apc17 RUSH to ja00 10-06-95;jf05 to subj. 10/06/95; jf04 to S.L. 10-06-95; jf14 10-10-95; CIP ver. jk14 04-22-96 a 95045017  a0133708756 (pbk.) aDLCcDLCdDLC00aQA76.73.C28bG69 199600a005.13/32201 aGraham, Paul.10aANSI Common Lisp /cPaul Graham. aEnglewood Cliffs, N.J. :bPrentice Hall,cc1996. axiii, 432 p. :bill. ;c23 cm. 0aPrentice Hall series in artificial intelligence a"An Alan R. Apt book." aIncludes bibliographical references (p. 401-414) and index. 0aCOMMON LISP (Computer program language) bc-GenCollhQA76.73.C28iG69 1996p00034751468tCopy 1wBOOKS \ No newline at end of file diff --git a/tags/rel-1.7/test/marc8.py b/tags/rel-1.7/test/marc8.py deleted file mode 100644 index ed09748..0000000 --- a/tags/rel-1.7/test/marc8.py +++ /dev/null @@ -1,20 +0,0 @@ -from pymarc import marc8_to_unicode -from unittest import TestCase - -class MARC8Test(TestCase): - - def test_marc8_to_unicode(self): - marc8_file = file('test/test_marc8.txt') - utf8_file = file('test/test_utf8.txt') - count = 0 - - while True: - marc8 = marc8_file.readline().strip("\n") - utf8 = utf8_file.readline().strip("\n") - if marc8 == '' or utf8 == '': - break - count += 1 - self.assertEquals(marc8_to_unicode(marc8).encode('utf8'), utf8) - - self.assertEquals(count, 1514) - diff --git a/tags/rel-1.7/test/one.dat b/tags/rel-1.7/test/one.dat deleted file mode 100644 index a43cf54..0000000 --- a/tags/rel-1.7/test/one.dat +++ /dev/null @@ -1 +0,0 @@ -00755cam 22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500fol05731351 IMchF20000613133448.0000107s2000 nyua 001 0 eng  a 00020737  a0471383147 (paper/cd-rom : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P22bM33 200000a005.13/32211 aMartinsson, Tobias,d1976-10aActivePerl with ASP and ADO /cTobias Martinsson. aNew York :bJohn Wiley & Sons,c2000. axxi, 289 p. :bill. ;c23 cm. +e1 computer laser disc (4 3/4 in.) a"Wiley Computer Publishing." 0aPerl (Computer program language)00aActive server pages.00aActiveX. \ No newline at end of file diff --git a/tags/rel-1.7/test/reader.py b/tags/rel-1.7/test/reader.py deleted file mode 100644 index 52bf586..0000000 --- a/tags/rel-1.7/test/reader.py +++ /dev/null @@ -1,45 +0,0 @@ -import util -import unittest -import pymarc -import re - -class MARCReaderFileTest( unittest.TestCase ): - """ - Tests for the pymarc.MARCReader class which provides iterator - based access to a MARC file. - """ - - def setUp( self ): - self.reader = pymarc.MARCReader(file('test/test.dat')) - - def test_iterator( self ): - count = 0 - for record in self.reader: - count += 1 - self.assertEquals(count, 10, 'found expected amt of MARC21 records') - - def test_string( self ): - ## basic test of stringification - startsWithLeader = re.compile( "^=LDR" ) - hasNumericTag = re.compile( "\n=\d\d\d " ) - for record in self.reader: - text = str(record) - self.failUnless( startsWithLeader.search(text), 'got leader') - self.failUnless(hasNumericTag.search(text), 'got a tag') - -class MARCReaderStringTest(MARCReaderFileTest): - - def setUp(self): - raw = file('test/test.dat').read() - self.reader = pymarc.reader.MARCReader(raw) - - # inherit same tests from MARCReaderTestFile - -def suite(): - fileSuite = unittest.makeSuite(MARCReaderFileTest, 'test') - stringSuite = unittest.makeSuite(MARCReaderStringTest, 'test') - suite = unittest.TestSuite((fileSuite, stringSuite)) - return suite - -if __name__ == "__main__": - unittest.main() diff --git a/tags/rel-1.7/test/record.py b/tags/rel-1.7/test/record.py deleted file mode 100644 index 331e1a1..0000000 --- a/tags/rel-1.7/test/record.py +++ /dev/null @@ -1,178 +0,0 @@ -import util -import unittest - -from pymarc import Record, Field -from pymarc.exceptions import * - -class RecordTest( unittest.TestCase ): - - def test_add_field( self ): - record = Record() - field = Field( - tag = '245', - indicators = [ '1', '0' ], - data = [ 'a', 'Python', 'c', 'Guido' ] ) - record.addField( field ) - self.failUnless( field in record.fields, msg='found field' ) - - def test_quick_access( self ): - record = Record() - title = Field( - tag = '245', - indicators = [ '1', '0' ], - data = [ 'a', 'Python', 'c', 'Guido' ] ) - record.addField( title ) - self.assertEqual( record['245'], title, 'short access' ) - self.assertEqual( record['999'], None, 'short access with no field' ) - - def test_field_not_found( self ): - record = Record() - self.assertEquals( len( record.fields ), 0 ) - - def test_find( self ): - record = Record() - subject1 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Programming Language' ] ) - record.addField( subject1 ) - subject2 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Object Oriented' ] ) - record.addField( subject2 ) - found = record.getFields( '650' ) - self.assertEqual( found[0], subject1, 'getFields() item 1' ) - self.assertEqual( found[0], subject1, 'getFields() item 2' ) - found = record.getFields() - self.assertEqual(len(found), 2, 'getFields() with no tag') - - def test_multi_find( self ): - record = Record() - subject1 = Field( - tag = '650', - indicators = [ '', '0' ], - data = [ 'a', 'Programming Language' ] ) - record.addField( subject1 ) - subject2 = Field( - tag = '651', - indicators = [ '', '0' ], - data = [ 'a', 'Object Oriented' ] ) - record.addField( subject2 ) - found = record.getFields( '650', '651' ) - self.assertEquals( len(found), 2 ) - - def test_bad_leader( self ): - record = Record() - self.failUnlessRaises( RecordLeaderInvalid, - record.decodeMARC, 'foo' ) - - def test_bad_base_address( self ): - record = Record() - self.failUnlessRaises( BaseAddressInvalid, - record.decodeMARC, '00695cam 2200241Ia 45x00' ) - - def test_title( self ): - record = Record() - self.assertEquals( record.title(), None ) - record.addField( Field( '245', [0,1], - subfields=[ 'a', "Foo :", 'b', 'bar' ] ) ) - self.assertEquals( record.title(), 'Foo :bar' ) - - record = Record() - record.addField( Field( '245', [0,1], - subfields=[ 'a', "Farghin" ] ) ) - self.assertEquals( record.title(), "Farghin" ) - - def test_isbn( self ): - record = Record() - self.assertEquals( record.isbn(), None ) - record.addField( Field( '020', [0,1], subfields=['a', '123456789' ] ) ) - self.assertEquals( record.isbn(), '123456789' ) - - def test_author( self ): - record = Record() - self.assertEquals( record.author(), None) - record.addField( Field( '100', [1,0], subfields=['a', 'Bletch, Foobie,', 'd', '1979-1981.'] ) ) - self.assertEquals( record.author(), 'Bletch, Foobie, 1979-1981.') - - record = Record() - record.addField( Field( '130', [0,' '], subfields=['a', 'Bible.', 'l', 'Python.'] ) ) - self.assertEquals( record.author(), None) - - def test_uniformtitle( self ): - record = Record() - self.assertEquals( record.uniformtitle(), None ) - record.addField( Field( '130', [0,' '], - subfields=[ 'a', "Tosefta.", 'l', "English.", 'f', "1977." ] ) ) - self.assertEquals( record.uniformtitle(), "Tosefta. English. 1977." ) - - record = Record() - record.addField( Field( '240', [1,4], - subfields=[ 'a', "The Pickwick papers.", 'l', "French." ] ) ) - self.assertEquals( record.uniformtitle(), "The Pickwick papers. French." ) - - def test_subjects( self ): - record = Record() - r1 = '=630 0\\$aTosefta.$lEnglish.$f1977.' - r2 = '=600 10$aLe Peu, Pepe.' - shlist = [r1, r2] - self.assertEquals( record.subjects(), [] ) - record.addField( Field( '630', [0,' '], - subfields=[ 'a', "Tosefta.", 'l', "English.", 'f', "1977." ] ) ) - record.addField( Field( '730', [0,' '], - subfields=[ 'a', "Tosefta.", 'l', "English.", 'f', "1977." ] ) ) - record.addField( Field( '600', [1,0], - subfields=[ 'a', "Le Peu, Pepe." ] ) ) - self.assertEquals( len( record.subjects() ), 2 ) - self.assertEquals( record.subjects()[0].__str__(), r1 ) - self.assertEquals( record.subjects()[1].__str__(), r2 ) - rshlist = [rsh.__str__() for rsh in record.subjects()] - self.assertEquals( shlist, rshlist ) - - def test_added_entries( self ): - record = Record() - ae1 = '=730 0\\$aTosefta.$lEnglish.$f1977.' - ae2 = '=700 10$aLe Peu, Pepe.' - aelist = [ae1, ae2] - self.assertEquals( record.addedentries(), [] ) - record.addField( Field( '730', [0,' '], - subfields=[ 'a', "Tosefta.", 'l', "English.", 'f', "1977." ] ) ) - record.addField( Field( '700', [1,0], - subfields=[ 'a', "Le Peu, Pepe." ] ) ) - record.addField( Field( '245', [0,0], - subfields=[ 'a', "Le Peu's Tosefa." ] ) ) - self.assertEquals( len( record.addedentries() ), 2 ) - self.assertEquals( record.addedentries()[0].__str__(), ae1 ) - self.assertEquals( record.addedentries()[1].__str__(), ae2 ) - raelist = [rae.__str__() for rae in record.addedentries()] - self.assertEquals( aelist, raelist ) - - def test_location( self ): - record = Record() - loc1 = '=852 \\\\$aAmerican Institute of Physics.$bNiels Bohr Library and Archives.$eCollege Park, MD' - loc2 = '=852 01$aCtY$bMain$hLB201$i.M63' - loclist = [loc1, loc2] - self.assertEquals( record.location(), [] ) - record.addField( Field('040', [' ',' '], - subfields=[ 'a', 'DLC', 'c', 'DLC' ] ) ) - record.addField( Field('852', [' ',' '], - subfields=[ 'a', 'American Institute of Physics.', - 'b', 'Niels Bohr Library and Archives.', - 'e', 'College Park, MD' ] ) ) - record.addField( Field('852', [0,1], - subfields=['a', 'CtY', 'b', 'Main', 'h', 'LB201', 'i', '.M63'] ) ) - self.assertEquals( len( record.location() ), 2 ) - self.assertEquals( record.location()[0].__str__(), loc1 ) - self.assertEquals( record.location()[1].__str__(), loc2 ) - rloclist = [rloc.__str__() for rloc in record.location()] - self.assertEquals( loclist, rloclist ) - -def suite(): - suite = unittest.makeSuite( RecordTest, 'test' ) - return suite - -if __name__ == "__main__": - unittest.main() - - diff --git a/tags/rel-1.7/test/test.dat b/tags/rel-1.7/test/test.dat deleted file mode 100644 index 68d6dad..0000000 --- a/tags/rel-1.7/test/test.dat +++ /dev/null @@ -1 +0,0 @@ -00755cam 22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500fol05731351 IMchF20000613133448.0000107s2000 nyua 001 0 eng  a 00020737  a0471383147 (paper/cd-rom : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P22bM33 200000a005.13/32211 aMartinsson, Tobias,d1976-10aActivePerl with ASP and ADO /cTobias Martinsson. aNew York :bJohn Wiley & Sons,c2000. axxi, 289 p. :bill. ;c23 cm. +e1 computer laser disc (4 3/4 in.) a"Wiley Computer Publishing." 0aPerl (Computer program language)00aActive server pages.00aActiveX.00647pam 2200241 a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001500161100002600176245006700202260003800269263000900307300001100316650003700327650002500364700001600389fol05754809 IMchF20000601115601.0000203s2000 mau 001 0 eng  a 00022023  a1565926994 aDLCcDLCdDLC apcc00aQA76.73.P22bD47 200000a005.742211 aDescartes, Alligator.10aProgramming the Perl DBI /cAlligator Descartes and Tim Bunce. aCmabridge, MA :bO'Reilly,c2000. a1111 ap. cm. 0aPerl (Computer program language) 0aDatabase management.1 aBunce, Tim.00605cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077040001800094042000800112050002700120082001700147100002100164245005500185260004500240300002600285504005100311650003700362fol05843555 IMchF20000525142739.0000318s1999 cau b 001 0 eng  a 00501349  aDLCcDLCdDLC apcc00aQA76.73.P22bB763 199900a005.13/32211 aBrown, Martin C.10aPerl :bprogrammer's reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axix, 380 p. ;c22 cm. aIncludes bibliographical references and index. 0aPerl (Computer program language)00579cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002700135082001700162100002100179245005500200260004500255300003600300650003700336fol05843579 IMchF20000525142716.0000318s1999 caua 001 0 eng  a 00502116  a0072120002 aDLCcDLCdDLC apcc00aQA76.73.P22bB762 199900a005.13/32211 aBrown, Martin C.10aPerl :bthe complete reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axxxv, 1179 p. :bill. ;c24 cm. 0aPerl (Computer program language)00801nam 22002778a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001800156100002000174245008800194250003200282260004100314263000900355300001100364650003700375650003600412650002600448700002500474700002400499fol05848297 IMchF20000524125727.0000518s2000 mau 001 0 eng  a 00041664  a1565924193 aDLCcDLC apcc00aQA76.73.P22bG84 200000a005.2/7622211 aGuelich, Scott.10aCGI programming with Perl /cScott Guelich, Shishir Gundavaram & Gunther Birznieks. a2nd ed., expanded & updated aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language) 0aCGI (Computer network protocol) 0aInternet programming.1 aGundavaram, Shishir.1 aBirznieks, Gunther.00665nam 22002298a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002700130082001700157111005200174245008600226250001200312260004100324263000900365300001100374650005000385fol05865950 IMchF20000615103017.0000612s2000 mau 100 0 eng  a 00055759  a0596000138 aDLCcDLC apcc00aQA76.73.P22bP475 200000a005.13/32212 aPerl Conference 4.0d(2000 :cMonterey, Calif.)10aProceedings of the Perl Conference 4.0 :bJuly 17-20, 2000, Monterey, California. a1st ed. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)vCongresses.00579nam 22002178a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100002800173245006200201260004100263263000900304300001100313650003700324fol05865956 IMchF20000615102948.0000612s2000 mau 000 0 eng  a 00055770  a1565926099 aDLCcDLC apcc00aQA76.73.P22bB43 200000a005.13/32211 aBlank-Edelman, David N.10aPerl for system administration /cDavid N. Blank-Edelman. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)00661nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100001700173245006700190250001200257260004100269263000900310300001100319650003700330700002300367700001700390fol05865967 IMchF20000615102611.0000614s2000 mau 000 0 eng  a 00055799  a0596000278 aDLCcDLC apcc00aQA76.73.P22bW35 200000a005.13/32211 aWall, Larry.10aProgramming Perl /cLarry Wall, Tom Christiansen & Jon Orwant. a3rd ed. aCambridge, Mass. :bO'Reilly,c2000. a0007 ap. cm. 0aPerl (Computer program language)1 aChristiansen, Tom.1 aOrwant, Jon.00603cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001700161100003200178245006000210260005700270300003300327650003700360fol05872355 IMchF20000706095105.0000315s1999 njua 001 0 eng  a 00500678  a013020868X aDLCcDLCdDLC apcc00aQA76.73.P22bL69 199900a005.13/32211 aLowe, Vincentq(Vincent D.)10aPerl programmer's interactive workbook /cVincent Lowe. aUpper Saddle River, NJ :bPrentice Hall PTP,cc1999. axx, 633 p. :bill. ;c23 cm. 0aPerl (Computer program language)00696nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020002800094040001300122042000800135050002600143082001700169100002600186245004400212260005100256263000900307300001100316500002000327650003700347650001700384650004100401fol05882032 IMchF20000707091904.0000630s2000 cau 001 0 eng  a 00058174  a0764547291 (alk. paper) aDLCcDLC apcc00aQA76.73.P22bF64 200000a005.13/32212 aFoster-Johnson, Eric.10aCross-platform Perl /cEric F. Johnson. aFoster City, CA :bIDG Books Worldwide,c2000. a0009 ap. cm. aIncludes index. 0aPerl (Computer program language) 0aWeb servers. 0aCross-platform software development. \ No newline at end of file diff --git a/tags/rel-1.7/test/test_marc8.txt b/tags/rel-1.7/test/test_marc8.txt deleted file mode 100644 index d656f3f..0000000 --- a/tags/rel-1.7/test/test_marc8.txt +++ /dev/null @@ -1,1514 +0,0 @@ -(3YhOI,(B (3eMeO(B. -(3cja(B (3SbWJ(B (3GdedcjI(B (3aj(B (3eUQ?(B : -(3GdWHYI(B 1. -(3GdbGgQI(B : -$1!S+!#!'`X!_s(B. -$1!Os!0!!#!!A3'44(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!!!!m(B $1i$N(B $1!X$-SD(B $1!`;!0$!\g(B / -$1!D&!0a(B : -$1!X$-SD(B $1!`;!0$!\g(B, -$1!:g!D&(B $1!1:!0m(B, -$1!X$-SD(B $1!`;!0$!\g(B, -$1i%$i%.i%ji%9(B $1!BX!:`!5=(B : -$1!D&!0a(B : -$1!Tk!Xl(B $1!Tk!BX!:`(B $1!Y4!!L$(B $1!=>(B, -$1!Bk!0d(B $1i$Di$Ri$K(B $1i$+i$Xi$ii$:(B : -$1!WN!JH(B. -$1!D&!0a(B : -$1!X$-SD(B $1!`;!0$!\g(B, -$1!0-!L,(B $1i$N(B $1!X\(B : -$1!D&!0a(B : -$1!05!L$(B $1!:[!0!(B, -$1!X$-SD(B $1!`;!0$!\g(B, -$1!GzK\[(B $1!0!!9'(B, -$1!X$-SD(B $1!`;!0$!\g(B, -$1!TX!U}i!&i%7i%'i%$i%/i%9i%Ti%"i!&i%(i%ji%*i%Ci%H(B / -$1!Os(B 1$1!JH(B. -$1!D&!0a(B : -$1!D-!;S(B $1!TX!U}(B, -$1!]y'O@(B $1-1w!1W(B, -$1!D-!;S(B $1!TX!U}(B, -$1!15!0;!^U(B $1!_0!5=(B, -$1!X$-SD(B $1!`;!0$!\g(B $1!Y$(B : -$1!D&!0a(B : -$1!KG!0s(B $1!X\!0d!Y$(B $1!5+!CU(B ; -$1!X$-SD(B $1!`;!0$!\g(B, -(3THjdj,(B (3YHO(B (3GdQMef(B. -(3GdcdeI(B (3GdYQHjI(B : -[Saudi Arabia] : -(3cJGH(B (3GdTQb(B (3GdGhSW(B -(3ecGfI(B (3GdEHGVjI(B (3aj(B (3GdMVGQI(B (3GdESdGejI(B / -(3GdWHYI(B 1. -[(3GdbGgQI(B] : -$1!X$-SD(B $1!`;!0$!\g(B, -$1!:m!Ci(B $1!X$-SD(B $1!`;!0$!\g(B $1!3"!_A(B. -$1!WN!JH(B. -$1!D&!0a(B : -$1!X$-SD(B $1!`;!0$!\g(B $1!3"!_A(B. -$1!<7!V3(B $1!R;!0s!:M(B, -$1!;%i$7i$$(B $1'Rt(B : -$1!D&!0a(B : -$1!X$-SD(B $1!`;!0$!\g(B, -$1!X$-SD(B $1!`;!0$!\g(B, -$1!(B $1!RA!Tk(B $1'5+'CU(B ; -(3aQRGO,(B (3YHO(B (3GdMSjf(B. -(3GdefgL(B (3aj(B (3JGQjN(B (3GdCOH(B (3GdYQHj(B : -Tehran : -$1!8x(B $1!D3!Bu(B. -$1!G[!`[(B $1!C\!1W(B / -Kuala Lumpur : -$1!08!WX(B $1!3K!JH(B $1!Pn!3W(B ; -$1!:M!Cg(B, -$1!C{!<5(B $1!Bs'X<(B / -[Singapore] : -$1!:M!Cg(B, -(3LGFRI(B (3SdWGf(B (3GdYhjS(B (3GdKbGajI(B : -(3GdTGQbI(B : -(3efThQGJ(B (3GJMGO(B (3cJGH(B (3hGOHGA(B (3GdGeGQGJ(B -(3eDSSI(B (3SdWGf(B (3Hf(B (3Ydj(B (3GdYhjS(B (3GdKbGajI(B. -(3GJMGO(B (3cJGH(B (3hCOHGA(B (3GdEeGQGJ(B. -$1!By'4U!#!!F\!#!!7u!#!!1?!JU!#!'^i!Pn!#!!5#!#!!3*!#!!35'2f!#!'X}!@z!#!!4x!KH(B : -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -$1!5t(B $1!1a!04(B $1';@'[4(B $1!5w(B $1!0q(B $1!M"(B $1!@&'Rw(B $1'?n!5"(B / -[$1'^L!C%(B] : -$1!5t(B $1!1a!04(B, -$1!04!3((B $1!5@!D$(B $1!MI!9f(B. -$1!4c';2!(B $1!O2'43!;P(B. -$1'=*!X$(B $1'8t!Bo(B $1!T&!G4'4U(B $1!4c';2!.!Hu(B $1'T2(B $1!Na'CZ(B $1'YK!_z(B -$1!Os(B1$1!JH(B. -$1!4I!0a!!#!!7t!CU!`y(B $1!V+!#!!BK!It!#!!\S!CU!#!KN7!ON!#!!Y$!UN!#!!MB!]t!#!!P{!=<(B / -$1!BK!It!#!!\S!CU!#!KN7!ON!#!!Y$!UN!#!!MB!]t!#!!P{!=<(B -$1!7o'2>!#!!7t!CU!`y(B $1!V+!#!!BK!It!#!!\S!CU!#!KN7!ON!#!!Y$!UN!#!!MB!]t!#!!P{!=<(B -$1!Os(B1$1!JH(B. -$1!4I!0a!!#!!7t!CU!`y(B -$1!\l(B $1!F]!O$(B, -$1'`v#Nl(B : -$1!\l(B $1!F]!O$(B $1!`1'EN(B $1'XN'Y$!_A(B -$1!WN!JH(B. -[Singapore] : -1950$1oL(oL}!#!o]OoPpoJ6!#!oVi!#!o\eoIo!#!oR_o]J!#!oU~!#!oVj!#!oT"oOh!#!oW=oQX!#!oVi!#!oQaoIg!#!(B/ -$1oS!oV>!#!o[ZoQ=oT#!#!(B: -$1o\eoIo!#!o].oL}oR_!#!oVi!#!oW'!#!oVloT$(B ; -$1o].oL}oR_!#!oUaoInoS?!#!oJ6o]K!#!oUaoIn(B -$1o\e!#!o]soS[(B. -$1o\eoIo!#!oW=oT%!#!oPJo]?!#!oUaoInoVG(B. -$1!BK!It!#!!?V!G:!#!!C[!0n!#!!XR!Dc(B / -$1!C[!0n!#!!XR!Dc(B -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -"$1!Ci!CU!#!!B=!]t!#!!BK!It!#!!?V!G:!R0!#!!\S!8!!#!!3K!7u!#!!M"!#!i!T!1J!R_!#!!5w!#!!04!?u!#!!M^!;3!#!!XR!CU!#!!7e!C-!#!!C[!0n!#!!0T!4W!Dci!U!#!(B($1!PA!O(B $1!Df!:M(B, -$1!0!'_N(B $1!T5!Tx!`"(B / -[s.l.] : -$1!4l'U<(B $1!1?'4`(B $1!BX'5+(B. -$1!3i!E[!V0(B $1!D-!(B $1!X(B $1';7!1?(B $1'X8'3|(B $1':`'6>(B $1!1?!6-!_A(B -$1!WN!JH(B. -[Singapore] : -$1!Bg(B $1!DG!a)(B. - $1!;I(B $1!0e(B. -$1'R{(B $1K_p!C%(B $1!7z(B $1!6@!G!(B : -$1!;I(B $1!0e(B $1!N%!P.(B $1!;E'Xi(B -$1!WN!JH(B. -Singapore : -$1!=x'CU(B ; -$1!L}(B $1!U1(B. -$1!L}(B $1!U1(B $1!BM!BX'\O(B / -$1!WN!JH(B. -Singapore : -$1!Be!4&!8+(B $1!Be'U<(B $1!1?'2>(B $1'5+'CU(B -$1!Be!4&!8+(B $1!Be'U<(B $1!1?'2>(B $1!1?!6-!_A(B ; -$1'E*(B $1!>0(B, -$1!db(B $1!Be'U<(B $1!BX'8d(B $1'Y$(B $1!5#(B $1!4l'U<(B $1!BX':`(B / -$1!WN!JH(B. -Singapore : -$1!Be!4&!8+(B $1!Be'U<(B $1!1?'2>(B $1!1?!6-!_A(B ; -$1!5t(B $1!GE!<&(B. -$1'9$E7h(B $1!0d!Ky(B / -$1!WN!JH(B. -Singapore : -$1!5t(B $1!GE!<&(B $1!1?!6-(B ; -$1'_#(B $1!0;!_`(B, -$1!Nk!<5(B $1!9%!7y(B $1!6F'E](B $1'If!^v(B : -$1!04K7o(B $1!6F'E-(B $1'Kg!8W(B $1!5w(B $1!BX!4H(B $1!M"'YK'\Q(B -$1!WN!JH(B. -[Singapore] : -$1!T9!87'Qd(B $1!BX!JU'Xm(B / -[$1!T9!87'Qd(B. -$1!T9!87'Qd(B (China). -$1!T9!87'Qd(B (China). -$1!T9!87'Qd(B (China). -$1!04!7o(B $1!5.!0s(B $1!=3!P:(B $1!F*!5=(B $1!7t!Xi(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!(B : -$1!04!9*(B $1!FM!Bo(B $1!9%':`(B $1!04K7o(B $1!;F'BT(B $1!FM!Bo(B $1KN7!ON(B $1!04!=x(B $1'5+'CU(B -$1!\o-HE'3k!Bo(B $1!T&!G4!Bp(B (China) -$1'Kg(B $1!GB!(B $1!Bg!X7(B $1'Xl!`1(B $1!N7!ON(B / -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -$1!A)!P{(B $1!0=(B $1!D((B : -$1'_T!4c(B $1'Yl'Y~(B $1':`!^z(B $1!=3!DC(B 50$1!5t!'CZ(B. -$1!;&!43(B $1!U4!DU(B : -$1'7F!0s(B $1!N#'Y<(B $13BD!S,(B $1!M"(B $1'YK!_z(B -$1!Os(B1$1!JH(B. -$1!F''HW(B : -$1!3'!3((B $1-Fm!O|(B $1KN7!ON(B : -$1!Os(B1$1!JH(B. -$1'^L!Fw(B : -$1!3'!3((B $1!P'!KH(B $1'Y$'5+(B -$1'`N(B $1!1I'U<(B, -$1'\V'7U(B $1!Be!0-'Pp(B : -$1'=*!<5!E(B $1!Pn'Q1(B $1!M"(B $1!KH'Y$(B $1'T2(B $1';1'Zh(B -$1!Os(B1$1!JH(B. -$1'=*!<5(B : -$1'=*!<5(B (China) -$1!?p(B $1!\+(B -$1'V$(B $1!;{!G=(B. -$1!0"(B $1!=3'23(B. -$1'`.(B $1!@m'\D(B. -$1!;e!X$(B $1!5.!Nh!8@(B : -$1!M{!Oe(B $1!7z(B $1!0d(B $1!Nk(B $1!0=(B $1'^U(B -$1!Os(B1$1!JH(B. -$1'I1'_.!(B $1!CU!Pn(B -$1!K3(B $1K7o'QN(B, -$1!Cs(B $1!4&'E7(B. -$1'[4!K}(B $1!Ky!JU(B $1!@,EWF(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!!BX(B $1!N7!ON(B $1!Y$!BX(B; -$1!UZ!F#!1W(B, -$1'V5'(B $1o[loWloT#(B : -$1oT%(B $1o].oWn(B. -$1!F'(B $1!Bw!;x(B. -$1!Gn!2~(B $1!bb!;e(B $1!M"(B $1!S8'=e(B : -$1!@0';B(B $1!=w!<5(B -$1!Os(B2$1!JH(B. -$1'=*!<5(B : -$1'a_'KG(B $1!0=!Bk(B = -$1!=w!<5(B $1!7y'4U(B(China) -$1!=w!<5(B $1!7y'4U(B(China) -$1!4c(B $1'bV'[4(B. -$1!FF'[=(B $1!BA!G4(B $1'Wl!!.!>m(B $1'T2(B $1';1'Zh(B / -$1!Os(B1$1!JH(B. -$1'I&!4c(B : -$1!FH(B $1'I!'D&(B, -$1!0R(B $1'_T(sm(B. -$1'ZO(B $1'Xm!>#(B. -$1!FM!Bo(B $1!BX':`(B $1'Y$!O>(B / -$1!Os(B1$1!JH(B. -$1'I1'_.!!DN!Tx(B : -$1!87!!Y?(B $1!R!(B / -$1!Os(B1$1!JH(B. -$1!^L!C%(B : -$1!4"(B $1!BX!Gb(B, -Confucius. -$1!<:!0/(B $1!C!(B. -$1!4"(B $1!BX!Gb(B, -$1!UW(B $1!G@'\4(B, -$1!Rr!Ih(B $1!7y!!W&(B $1!G6!G%(B $1!M"(B $1!=Q!?b(B, $1'\4!WD(B $1'T2(B $1!@z'Wl(B $1KN7!ON(B / -$1!Os(B1$1!JH(B. -$1!0&!GW!#!FH(B. -$1!123BD(B $1!Ci'X0(B $1!>.!>m(B $1'Y$-J;(B $1!M"(B $1'KG!0s!>4(B $1!R]!;3(B / -$1!Os(B1$1!JH(B. -$1!0&!GW(B : -$1!04K7o(B $1!M"(B $1'KG!0s!>4(B $1'T2(B $1!0d!BX(B $1':`EWF(B $1'5+'CU(B -$1!7y!KH(B $1!1W!>E(B $1'T2(B $1'X)'3|(B $1!B(B, -$1'b^';C(B $1!TP!HG!LG(B, 2004 = -$1!Os(B1$1!JH(B. -$1!4I!0a!.!Hu(B $1!5='Y$(B / -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -"$1)JD!X$(B $1'(B $1'Z"!4)(B $1!3K!JH(B"--P. facing t.p. -$1!:j!0s(B $1!2F!X<(B $1!Z"!B\(B $1!5+!3U(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!4(B $1!<7!O5(B $1'T2(B $1!P'!KH(B = -$1!Os(B1$1!JH(B. -$1!4I!0a!(B / -$1!Os(B1$1!JH(B. -$1'^S!;(B $1!BX!4H(B $1KN7!ON(B $1'5+'CU(B -$1!04K7o(B $1'Yl!;'(B $1!Be'Yx(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!w!FM(B. -$1!a\!59'bV(B $1'4{!5=(B $1'T2(B $1!BX!4H(B $1':`EWF(B $1KN7'X='CZ(B -$1!a\!59'bV!5=(B $1!Be(B $1KN7!ON(B / -$1!a\!59'bV(B $1'4{!5=(B $1'T2(B $1!BX!4H(B $1':`EWF(B $1KN7'X='CZ(B $1'Y$!BX!_A(B -$1!Os(B1$1!JH(B. -$1!=2!5@!.!>m(B $1'T2(B $1'Wl!!_z(B / -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -$1!04!4c(B $1'Yl'Q<(B $1!9%':`(B $1'Yl!BA':`(B $1!4d!8r'bj(B $1';D'F(B, -$1!]>!C!!`y(B $1!5+!O>(B $1!WN!Q[(B / -$1!4I!0a(B $1!Os(B1$1!JH(B. -$1!4I!0a(B : -$1!_#(B $1!;#!>F(B $1!_A(B -$1'D&!4I(B $1!R\!<7'E-(B $1!8(B $1!1?!6-(B $1!Pa'\O(B -$1!Fw(B $1'^='U<(B. -$1!C[(B $1'U<(B. -$1!9%!7q(B $1!'CZ(B . -$1!4c!0a!(B, -$1!Tk!PV(B $1!_"!;6(B $1'Wl!(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1oJ;(B $1oMSoX+(B, -$1oIUoW=(B $1oI!oNnoQ,(B $1oRl(B $1oIDoW?oO/(B $1oX0oWt(B $1oJ(oW?(B $1oUaoIn(B / -$1oS!oV>(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1oYQ(B $1oS/oJ.(B. -OECD $1oJ6oUN(B $1oX)oPz(B $1oInoWI(B $1oVGoYe(B $1oVi(B $1oIooK_oQ,(B $1oS[oV9(B $1oUV(B $1oIZo\e(B $1oUaoIn(B / -$1oS!oV>(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1oJ;(B $1oW=oS](B. -$1o\voW=oQ,(B $1oRl(B $1oW'o[o(B $1oV-(B $1oQZoW/(B $1o\noI?(B $1oQ,oW?(B $1oUaoIn(B / -$1oS!oV>(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1oJ;(B $1oS[oX+(B, -$1oIUoPGoVG(B $1oI{oVk(B $1o\xoRl(B $1oVd(B $1oVSo\e(B $1o\voW=(B $1oInoW?(B $1oQ,oW?(B $1oUaoIn(B / -$1oS!oV>(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1!2?(B $1!1T!E7(B, -$1!2?(B $1!1T!E7(B $1!X4!YJ(B $1!:W!:M(B : -$1!WN!JH(B. -$1(;}!4I!Qd(B $1!Be!k(B $1!A&!88(B $1!M"(B $1!P.!`2(B -$1!Os(B1$1!JH(B. -$1!a)!H$(B : -$1!04!7o(B $1!3(!Kz!bo(B -$1!04!7o(B $1!7o!FM!bo(B -$1!5\(B $1!Hm!Ky(B. -$1!D$(B $1!VF(B $1!T2(B $1!BX!4H(B $1!9%!_z!5y(B / -$1!Os(B2$1!JH(B. -Carle Place, N.Y. : -$1i!T!MO!MHi!U!Pn!3W(B ; -$1!D$(B $1!VF(B, -$1!5t(B $1!@*!0d(B. -$1!Bu!Cd(B $1!a)!H$(B $1!_U!=Y!5=(B (1897-1945) / -$1!a)!H$(B : -$1!Cs(B $1!0w-U-(B. -$1!aq(B $1!?b!>.(B. -$1!3#!;l(B $1!;!!1J(B 50 $1!(B $1'Z=!4)(B $1!3K!JH(B." -$1!\s(B $1!RB(B, -$1!^L'=v(B : -$1!Os(B1$1!JH(B. -$1!a)!H$(B : -$1!04!7o(B $1!3(!Kz!bo(B -$1!04!7o(B $1!7o!FM!bo(B -$1!a)!H$i!&!BX!4Hi!&KN7!ON(B / -$1!a)!H$(B : -$1!5\(B $1!1e!_B(B. -$1!a,(B $1!2A!23(B. -$1!5d(B $1!9%!EN(B. -$1!0}(B $1!?n(B $1!BO!N_!]t(B / -$1!WN!JH(B. -Singapore : -$1!K3(B $1#6j!F'(B. -$1!:|(B $1!;F!C^(B. -$1!04!Bs(B $1'^i!Pn(B $1!8}'QN(B $1!\*!X+(B : -$1!5.:(L(B $1!>#!9'(B $13BD!A,(B $1'\W'CI(B $1'Pp!>'(B $1'Y$!BX!_A(B -$1!a)!H$(B $1!WN!JH(B. -$1!a)!H$(B : -$1!5.:(L(B $1!>#!9'(B, -$1!5.:(L(B $1!>#!9'(B $13BD!A,(B $1'\W'CI(B $1'Pp!>'(B $1'Y$!BX!_A(B $1'Q['[M(B $1!9f'6>'CZ(B. -$1KGa!:|(B $1!T+!IC(B $1![i!Aq(B $1!5=!B\(B / -$1!WN!JH!+4(B -$1!T+!4I!%(B $1!GW!J((B. -$1!04!U<(B $1!CZ!`y(B (Kobe-shi, Japan) -$1!K3(B $1!bt!]L(B. -$1!UV!UH(B $1!Iz'Ms(B / -1$1!JH(B. -$1!T+!4I!4!3[(B $1!04!7o(B / -$1!WN!JH(B. -$1(;}!4I!oS,(B. -$1oWIoS$(B $1oVi(B $1o]8oQ\(B $1oZpoM*(B $1oPu(B $1oUV(B : -$1oYHo[o(B. -$1oS!oV>oT#(B : -$1oV\(B $1oMGoWl(B, -(3Hdabjg,(B (3YHO(B (3Gddg(B (3Hf(B (3MSjf(B (3Hf(B (3YHO(B (3Gddg(B. -(3bhJ(B (3GdCdHGH(B (3ef(B (3eLGfj(B (3Lfj(B (3GdCdHGH(B / -(3JQje,(B (3MVQehJ(B : -(3Rcj,(B (3QeVGf(B (3NejS(B. -(3eaghe(B (3GdSff(B (3GdQHGfjI(B : -(3GdWHYI(B 1. -(3GdbGgQI(B : -(3gPG(B (3gh(B (3GdESdGe(B (3;(B -(3YeGQI,(B (3eMeO(B. -(3bQGAI(B (3GdfU(B (3GdOjfj(B : -(3GdWHYI(B 1. -(3GdbGgQI(B : -(3gPG(B (3gh(B (3GdESdGe(B (3;(B -(3fOhI(B (3GdSjQI(B (3GdfHhjI(B : -(3GdWHYI(B 1. -[Omdurman] : -(3efThQGJ(B (3GdeQcR(B (3;(B -(3EeGe,(B (3MeGOI(B. -(3eHGQc(B (3hGdENhGf(B / -(3GdWHYI(B (3GdYQHjI(B 1. -(3GdegfOSjf(B [Giza] : -$1!Be!YF(B $1!5.!BX(B $1![`!`S!Q|(B / -$1!WN!JH(B. -$1!T+!4I!'7q(B $1!5w(B $1'C-'^U(B -$1!Os(B1$1!JH(B. -$1!4I!0a!!X%(B = -$1!Os(B1$1!JH(B. -$1!4I!0a!!X%i!U'Q[!Q|(B $1!9f'6>'CZ(B. -$1!04K7o(B $1!Os!0Q(B $1'CI!5=(B $1'E_!DB'`y(B. -$1'`y!V+(B $1!FMK7o(B $1(;}'IC(B $1'E_!DB(B $1'4Q'Q[(B / -$1!FMK7o(B $1(;}'IC(B $1'E_!DB(B $1'4Q'Q[(B -$1(;}'IC(B $1'E_!DB(B $1'4Q'Q[(B -$1!Os(B1$1!JH(B. -$1!4I!0a!w(B, - $1!8{!Cr(B $1!9%(B,1966- -$1!?b!L$(B $1!c+!0!(B. -$1KF*!5=':`(B $1i$N(B $1i%]i%8i%7i%gi%Ji%ji%Fi%#(B : -$1!D&!0a(B : -$1!;e!'(B $1i$H(B $1i%+i%ji%-i%ei%ii%`(B $1!E9!\)(B / -$1!WN!JH(B. -$1!D&!0a(B : -$1!v3(B $1-1w!_B(B, -$1!35!Be(B $1!52!RW(B $1'[`!3,(B / -$1!52!RW(B $1'[`!3,(B -$1!D&!0a(B : -$1!0;!1a!L$(B $1!GZ(B, -$1i$3i$Hi$P!+5i$3i$Hi$P!+5i$3i$Hi$P(B / -$1!WN!JH(B. -$1!D&!0a(B : -$1!;E!D$(B $1!0!!T{(B, -$1i$@i$s!WZ(B : -$1!0!!T{(B $1!T&!Oy(B $1!59!_A(B -$1!D&!0a(B : -$1!GzK\[(B $1!4a!\g(B. -$1!;n!Ci(B $1!6<'Xm(B, -$1!]Z!!N_(B $1i$N(B $1!BX':`!+5!bu!T=i$9i$k(B $1!;*!Xf(B -$1!D&!0a(B : -$1!;E!;y(B $1!1W!9'(B, -$1KEa9Y?(B $1K7o'2>(B $1-?n!L5i$Ji$-(B $1!Bs!Ci(B / -$1!D&!0a(B : -$1KYJ9Z/(B $1!Be!Rq!Na(B. -$1!5@!L$(B $1!6a!]:(B, -$1!5@!L$(B $1!6a!]:(B : -$1KYK!Yf(B $1i$N(B $1!2-!KH(B -$1!D&!0a(B : -$1!Ul!;1(B $1!]:E=S(B, -$1!Cs(B $1!J((B, -$1!_'(B $1!WD!N#(B $1i$N(B $1KV1!WF(B $13BD!S,!Y$(B : -$1!WN!JH(B. -$1!D&!0a(B : -$1!_'(B $1!WD!N#(B, -$1!;;!.!>m(B $1i$G(B $1KYKi$oi$k(B : -$1!WN!JH(B. -$1!D&!0a(B : -$1!FF!L$!0S(B $1'3k!0f(B, -$192F!Xi(B $1i$H(B $1!5=K;1(B $1i$N(B $1i$Oi$6i$^(B : -$1!D&!0a(B : -$1!Y"(B $1i$G(B $1i$b(B $1KYJi$ai$k(B $1!Bs!Ci(B $1!5.!0s!5=(B $1!!BX!`y(B. -$1!1a!^q(B $1!F#!(B $1!Na'CZ(B $1i$H(B $1!9%':`(B $1i$N(B $1!@d-?n(B : -$1!WN!JH(B. -$1!D&!0a(B : -$1!Ci!8}(B $1!4d!0=(B, -$1-?nK7o(B $1!Qq3YX!Cd(B $1i$N(B $1!Yo!<^(B $1i$H(B $1!N(!a\'Wl(B / -$1!D&!0a(B : -$1!Z"!B\(B $1!_A!?b(B $1-?n-J;(B $1i$H(B $1!_6!:~!R_(B / -$1!D&!0a(B : -$1!4W!0T!.!>m(B $1i$H(B $1!WD!44(B $1i$r(B $1!R]i$(i$k(B : -$1!0a!\n!>!0!(B. -$13=u!<4(B $1!<]!!0=(B, -$1'b~!V3(B $1!2'(B, -$1!L$!^U(B $1!G"!:M(B, -$1!+%![k!0s(B $1'2>!Bo!+&i$H(B $1i%\i%Gi%#i!&i%]i%ji%Fi%#i%/i%9(B / -$1!0a!\n!(B. -$1!3K'1L"]M(B $1!9(!K3!Nr(B $1!bS!:M!Nk![2i!&!G(!F\![2(B / -$1!bS!:M!Nk![2i!&!G(!F\![2(B -$1!5E!5.!;X!'CZ(B. -$1!04K7o(B $1K;C!8{(B $1!Y~!C"(B $1!Q1!X8(B / -2005$1!!_A(B. -$1!5E!5.!;X!`!9&(B. -$1!FtKQv(B $1!G6-I:(B $1'0L"Mc(B $1i$r(B $1!1N(B $1i$H(B $1i$7i$?(B $1!G7!;l(B $1'HD!7y(B $1i$N(B $1KQm'^]!M"(B $1!Kg!8W(B $1!XN32](B $1i$N(B $1!X[i$_(B / -$1KEV!`(B $1i$H(B $1'CZ!G>(B $1!D-!(B : -$1'CZ!G>!Tg!D-!!V0(B (Japan) -$1!Nv!;y(B $1KQd!Oe(B $1!4d!JU!`y(B. -$1!Tg!D-!87(B $1!9(!:f!^[(B (Museum) -(3TjN(B (3GdCQV,(B (3eMeO(B. -(3aTI(B (3Ndb(B / -(3GHh(B (3XHj(B : -(3GHf(B (3NdOhf(B. -(3ebOeg(B (3GHf(B (3NdOhf(B / -(31G(B) 2. -(3JgQGf(B : -(3GfJTGQGJ(B (3HfjGO(B (3JQLeg(B (3h(B (3fTQ(B (3cJGH(B (3;(B -(3fGHGOi,(B (3eMeO(B )(3Qhjf(B. -(3TgQGfi,(B (3YfGjJ(B (3Gddg(B. -(3VQH(B (3GdeKdgGi(B (3OQi(B (3GaZGfSJGf(B : -(3cdQi,(B (3GdHQJG(B [Calgary, Alberta, Canada]: -(3chTGf,(B (3eMeO(B (3Wg(B. -(3jYbhHj,(B (3CMeO(B (3Hf(B (3CHj(B (3jYbhH(B. -(3JGQjN(B (3jYbhHi(B / -(3JgQGf(B : -(3GfJTGQGJ(B (3HfGg(B (3JQLeg(B (3h(B (3fTQ(B (3cJGH(B (3;(B -(3BjJi,(B (3GHQGgje(B. -(3ZjQJ(B (3cQeGfTGgi,(B (3YHO(B (3GdcQje(B. -(3cdjGJ(B (3BKGQ(B (3SjO(B (3YHO(B (3GdcQje(B (3ZjQJ(B (3cQeGfTGgi(B / -[(3JgQGf(B : -(3ZjQJ,(B (3eMeO(B (3SYjO(B. diff --git a/tags/rel-1.7/test/test_utf8.txt b/tags/rel-1.7/test/test_utf8.txt deleted file mode 100644 index 83f58f2..0000000 --- a/tags/rel-1.7/test/test_utf8.txt +++ /dev/null @@ -1,1514 +0,0 @@ -عودة، محمد. -كيف سقطت الملكية في مصر؟ : -الطبعة 1. -القاهرة : -肖 显靜. -第一 推动 / -第1版. -北京市 : -与 2049年 的 中国 对话 -吴 国林, -芋生 裕信, -西脇 順三郎 の 研究 : -東京 : -新典社 選書 ; -西脇 順三郎, - 交通 运输 管理志 / -第1版. -天津市 : -天津市 西青区 系列 分志 ; -天津市 地方志 丛书 -Transportation -西青区 (Tianjing, China). -鎌倉 近世 史料 / -[鎌倉市] : -鎌倉市 (Japan) -澤 壽郎, -片桐 一男, -鎌倉市 中央 図書舘. -نعيم، عبدالعزيز العلى. -نظام الضرائب فى الإسلام ومدى تطبيقه فى المملكة العربية السعودية : -[Cairo : -回想 の 西脇 順三郎 / -東京 : -西脇 順三郎, -安東 伸介, -西脇 順三郎, -イギリス 文學史 : -東京 : -英語 英文學 講座 -١ا) 4. -تهران : -صفا، ذبيح الله. -金田 弘, -旅人 つひに かへらず : -初版. -東京 : -西脇 順三郎, -世界 の 詩 : -東京 : -串田 孫一, -西脇 順三郎, -渡辺 一夫, -西脇 順三郎, -芭蕉・シェイクスピア・エリオット / -第 1版. -東京 : -松尾 芭蕉, -鍵谷 幸信, -松尾 芭蕉, -佐久間 隆史, -西脇 順三郎 論 : -東京 : -現代 詩人論 叢書 ; -西脇 順三郎, -شبيلي، عبد الرحمن. -الكلمة العربية : -[Saudi Arabia] : -كتاب الشرق الاوسط -مكانة الإباضية في الحضارة الإسلامية / -الطبعة 1. -[القاهرة] : -西脇 順三郎, -定本 西脇 順三郎 全集. -初版. -東京 : -西脇 順三郎 全集. -工藤 美代子, -寂しい 声 : -東京 : -西脇 順三郎, -西脇 順三郎, -幻影 の 人 西脇 順三郎 を 語る / -西脇 順三郎 を 語る -第 1版. -東京 : -西脇 順三郎, -西脇 順三郎 を 偲ぶ 会. -双鸭山 林业局 志 / -第1版. -[双鸭山? : -黑龙江省 (China). -伊 蝉. -非常 误会/ -Singapore : -狮城 作家 群英 丛书 ; -فرزاد، عبد الحسين. -المنهج في تاريخ الأدب العربي : -Tehran : -夏 枯早. -涼風 有信 / -Kuala Lumpur : -丹袖 出版 系列 ; -子木, -杭州 日记 / -[Singapore] : -子木, -جائزة سلطان العويس الثقافية : -الشارقة : -منشورات اتحاد كتاب وادباء الامارات -مؤسسة سلطان بن علي العويس الثقافية. -اتحاد كتاب وأدباء الإمارات. -旱区 水 土 作物 关系 及 其 最优 调控 原理 : -第1版. -北京 : -周 保中 将军 和 他 的 抗联 战友 / -[长春] : -周 保中, -中共 吉林 省委. -南宁市 稅务誌 / -稅务誌 -第1版. -[南宁市 : -南宁 (China) -广西 壮族 自治区 南宁市 国家 稅务局. -广西 壮族 自治区 南宁市 地方 稅务局. -中国 副食品 市场 需求 与 "菜篮子 工程" 布局 / -第1版. -北京 : -رياض، محمد. -رحله في زمان النوبة : -[القاهرة] : -عبد الرسول، كوثر. -جياني، الحسين بن محمد. -تسمية شيوخ أبي داود السجستاني / -الطبعة 1. -بيروت : -أبو داود سليمان بن الأشعث السجستاني. -فجي، جاسم بن محمد بن حمود. -ابن الدباغ، يوسف بن عبد العزيز. -جابري، رياض. -سعد الله الجابري وحوار مع التاريخ : -الطبعة 1. -حمص : -جابري، سعد الله. -إبراهيم، أيمن. -الإسلام والسلطان والملك : -الطبعة 1. -دمشق : -سليطين، وفيق. -الزمن الأبدي : -الطبعة 1. -اللاذقية : -وقائع حلقة النقاش الأولى حول تطوير أساليب تعليم اللغة العربية لغير الناطقين بها : -الطبعة العربية 1. -عمان : -مصطلحات ميكانيك السيارات. -الطبعة 1. -[Amman] : -خصاونة، عوني محمد. -التطبيقات الفلكية في الشريعة الإسلامية / -تطبيقات علم الفلك في الشريعة الإسلامية -بدر، عبد الرحيم. -موسوعة أسماء النجوم عند العرب في الفلك القديم والحديث / -عمان : -تكريتي، شاكر علي. -مذكراتي وذكرياتي-- هذه / -الطبعة 1. -بغداد : -تكريتي، شاكر علي. -يحيى، حسب الله. -فنارات في القصة والرواية / -الطبعة 1. -بغداد : -عاني، يوسف. -المسرح، الوجود، الحلم / -الطبعة 1. -بغداد : -راوي، نوري. -متحف الحقيقة، متحف الخيال : -الطبعة 1. -بغداد : -حديثي، بهجت عبد الغفور. -الروح الايماني في الشعر العربي : -الطبعة 1. -بغداد : -نفحات الهند واليمن بأسانيد الشيخ أبي الحسن : -الطبعة 1. -الرياض : -قاضي، النعمان. -شعر الفتوح الإسلامية في صدر الإسلام / -الطبعة 1. -جدة : -من أدب الجهاد -حسن، حسن مصطفى. -الحيوان في الشعر العربي / -الطبعة 1. -الرياض : -زهراني، علي بن صالح السلوك. -بلاد غامد وزهران / -الطبعة 3.، وقد أضيفت اليها فصول جديدة وزيادات مهمة. -جدة : -معجم الجغرافي للبلاد العربية السعودية -عبدلي، عبد الله منسي. -المسجد الحرام في قلب الملك عبد العزيز / -مكة : -رومي، عدنان سالم. -علماء الكويت وأعلامها خلال ثلاثة قرون / -الطبعة 1. -الكويت : -سلسلة تاريخ ما أهمله التاريخ ؛ -أغبري، أكرم عبد الملك. -أهمية البحر الأحمر في علاقة الجمهورية اليمنية بدول مجلس التعاون الخليجي / -الطبعة 1. -صنعاء : -كتاب الثوابت ؛ -بلو، محمد. -إنفاق الميسور في تاريخ بلاد التكرور / -الرباط : -منشورات معهد الدراسات الإفريقية. سلسلة نصوص ووثائق ؛ -شاذلي، بهيجة. -ذاكر، عبد النبي. -الواقعي والمتخيل في الرحلة الأوروبية إلي المغرب / -أكادير : -ذنون، عبد الحكيم. -تاريخ الشام القديم / -الطبعة 1. -دمشق : -العلاقات المصرية-اليابانية / -الجيزة : -مدني، إسماعيل محمد. -بيئة البحرين البحرية / -البحرين : -سلسلة كتب حول الحياة الفطرية ؛ -실크 로드 와 韓國 文化 의 探究 / -대전 광역시 : -人文 硏究 學術 叢書 ; -史 在東, -红盾 耕耘录 : -第1版. -[厦门] : -龙海市 (China) -بدر، عزة. -أم الدنيا : -كتاب الجمهورية -خلايلي، خليل. -تاريخ جسكالا : -الطبعة 1. -دمشق ؛ -راوى، صلاح. -فلسفة الوعى الشعبى : -الطبعة 1. -القاهرة : -刘 宏. -百年 梦寻 : -20世纪 中国 经济 思潮 与 社会 变革 -第1版. -北京市 : -世纪 回眸. -沈 山. -石 淑华, -趋势 与 策略 / -Kuala Lumpur : -林 水〓. -陈 友信. -西脇 順三郎, -西脇 順三郎・パイオニア の 仕事 / -パイオニア の 仕事 -第 1版. -東京 : -コレクション・日本 シュ-ルレアリスム ; -和田 桂子, -申 國美. -1900-2001 國家 圖書館 藏 敦煌 遺書 研究 論著 目錄 索引 / -敦煌 遺書 研究 論著 目錄 索引 -國家 圖書館 藏 敦煌 遺書 研究 論著 目錄 索引 -第1版. -北京市 : -敦煌縣 (China) -中國 國家 圖書館 -郭 永秀, -余韵 : -郭 永秀 音乐 评论集 -初版. -[Singapore] : -1950년대 후반기 의 한국 사회 와 이 승만 정부 의 붕괴 / -서울 특별시 : -한국 현대사 의 재 인식 ; -현대사 연구소 기획 연구 -한 흥수. -한국 정신 문화 연구원. -敦煌 懸泉 月令 詔條 / -月令 詔條 -第1版. -北京 : -"本書 收錄 敦煌 懸泉置 遺址 出土 的 《使者 和 中所 督察 詔書 四時 月令 五十條》 (簡稱 「月令 詔條」)". -懸泉置 Sites (China) -中國 文物 硏究所. -甘肅省 文物 考古 硏究所. -刘 星, -文化界 人士 / -Singapore : -新加坡 文艺 协会 丛书 ; -金 梅子, -一双 舊草鞋 / -[s.l.] : -印华 作协 文丛. -前橋藩 松平家 記錄 / -[Tokyo] : -前橋 市立 図書館. -長崎県 水 調查書 : -[長崎市] : -長崎県 (Japan). -許 保由, -不枉此生 : -許 保由 回憶錄 -Sibu, Sarawak : -許 保由, -吴 木炎. -前路 亮红灯 / -第1版. -K. L., Malaysia : -大将 观点 ; -薛 嘉元, -猫城 猫语 / -第1版. -K.L. [i.e. Kuala Lumpur], Malaysia : -大将 fuse ; -晨露, -鱼說 / -初版. -Miri, Sarawak : -美里 笔会 丛书 ; -梁 菊庵, -飄逝 的 年華 : -菊庵 文集 -[Jakarta : -青春 是 一首歌 : -驻校 作家 写作 计划 学员 作品集 -初版. -[Singapore] : -方 桂香. - 尤 今. -听 青春 在 哭泣 : -尤 今 短篇 小说 -初版. -Singapore : -心书 ; -白 荷. -白 荷 散文选 / -初版. -Singapore : -新加坡 新华 作家 丛书 -新加坡 新华 作家 作品集 ; -杨 怡, -从 新华 文坛 论 及 印华 文学 / -初版. -Singapore : -新加坡 新华 作家 作品集 ; -周 洛崙. -梦廻 人生 / -初版. -Singapore : -周 洛崙 作品 ; -陈 久霖, -神州 大地 商机 无限 : -中国 商业 环境 和 文化 的变迁 -初版. -[Singapore] : -舒城县 文物志 / -[舒城县. -舒城县 (China). -舒城县 (China). -舒城县 (China). -中國 古代 建築 歷史 圖說 / -第1版. -北京市 : -侯 幼彬. -李 婉貞. -孔 繁志. -敖鲁古雅 鄂温克人 的 文化 变迁 = -第1版. -天津 : -中央 民族 大学 中国 少数 民族 研究 中心 丛书 -鄂温克族 自治旗 (China) -环 洞庭湖 经济圈 建设 硏究 / -第1版. -长沙市 : -湖南省 (China) -朱 翔. -谢 留文. -客家 方言 语音 硏究 / -第1版. -北京 : -探索 之 果 : -云南 财贸 学院 建校 50周年 论文选 -第1版. -北京 : -云南 财贸 学院 学术 委员会. -宿務 華人 的 經濟--社會史 (附 從 糖業 看 菲律濱 華人) / -糖業 看 菲律濱 華人 -初版. -菲律濱 : -Go, Bon Juan. -珠江 三角洲 公共 管理 模式 硏究 / -第1版. -北京 : -教育部 人文 社会 科学 重点 硏究 基地 中山大学 行政 管理 硏究 中心 学术 文库 -"地方 政府 与 区域 公共 管理 研究" 系列 -陈 瑞莲. -蔡 立辉. -黎 军, -甘 靑 宁 民族 地区 现代 远程 敎育 / -第1版. -北京市 : -مجدلاني، أحمد. -دراسة تحليلية حول أثر النظام الانتخابي على تركيبة المجلس التشريعي القادم / -رام الله : -سلسلة تقارير دورية -شاكري، حسين. -ذكرياتي / -الطبعة 1. -قم : -ميردامادي، عبد المجيد. -زيارة الرسول المصطفى وآله : -الطبعة 2. -تهران : -موسوعة الرسول المصطفى ؛ -حلاق، حسان. -مناهج تحقيق التراث والمخطوطات العربية / -الطبعة 1. -بيروت : -حسين، قصي. -في الحضارة العربية : -الطبعة 1. -طرابلس، لبنان : -عباس، محمد. -ثوار ... عظماء / -بوزريعة، الجزائر : -تطاوي، عبد الله. -اللغة والمتغير الثقافي : -الطبعة 1. -القاهرة : -غوادره، فيصل حسين. -التمرد في شعر العصر العباسي الأول / -الطبعة 1. -عمان : -黑 岩, -各舉 門神 的 風采 / -Sibu, Sarawak : -漳泉 之聲 叢書 ; -陆 力军. -市场 义乌 : -第1版. -杭州 : -义乌市 (China) -义乌市 (China) -白 小虎. -王 祖強. -靖 国平. -教育 的 智慧 性格 : -当代 知识 教育 的 变革 -第1版. -武汉 : -公共 决策 研究 : -第1版. -长沙 : -公共 管理 论丛 -颜 佳华, -迈向 新世纪 : -广州市城市 规划 信息 系统 的 理论 与 实践 -第1版. -广州 : -广州 (China) -戴 逢 -姜 崇洲. -丁 建伟. -韩 振远. -山西 古祠堂 : -矗立 在 人 神 之 间 -第1版. -沈阳市 : -中国 文化 遗珍 丛书. 山西 -潘 知常, -王 国维 : -第1版. -北京 : -跨文化 沟通 个案 研究 丛书 -文津 書系 -王 国维, -李 加荣. -军用 生物 技术 / -第1版. -北京市 : -庄 力霞. -邱 德修. -商周 用鼎 制度 之 理論 基礎 / -限定版. -臺北市 : -商周 金文 硏究 論文; -蒲正信, -药师经注释 / -第1版. -成都市 : -佛典丛书. -زاهي، فريد. -العين والمرآة : -[Rabat] : -دواليبي، محمد معروف. -مذكرات الدكتور معروف الدواليبي / - الطبعة 1. -الرياض : -أبو الخير، محمود عبد الله. -شعر رثاء النفس : -عمان : -黎平 剿匪 斗争 / -第1版. -[黎平 : -中共 黎平 县委. -鬼谷子 学术 研讨会 -第一届 鬼谷子 学术 研讨会 论文集 / -鬼谷子 学术 研讨会 论文集 -第1届 鬼谷子 学术 研讨会 论文集 -北京 第1版. -北京 : -鬼谷子, -鬼谷子 学术 研究会. -فقير، بدر بن عادل. -تغير الأنماط السكنية في مدينة الدرعية : -الرياض : -إصدارات دارة الملك عبد العزيز ؛ -سمحي، علي حمود. -داخل آزال خارج صنعاء : -صنعاء : -شمري، محمد علي. -شعراء الخليج : -الطبعة 1. -عمان : -الشعر النبطي : -الطبعة 1. -عمان : -حنداين، محمد. -المخزن وسوس، 1672-1822 : -الطبعة 1. -الرباط : -عبيدات، داود عمر سلامة. -الموحدون في الأندلس : -إربد، الأردن : -مدني، إسماعيل محمد. -رحلتي مع البيئة / -الطبعة 1. -[?Manama] : -حميد الدين، عبد الله بن محمد. -الهوية في بنية النظام الدولي / -الطبعة 1. -عمان : -سيد، محمد عبد الرحمن. -تجرية دولة قطر في مجال ذوي الاحتياجات الخاصة / -[الدوحة] : -فاضل لنكراني، محمد. -كتاب الطهارة : -الطبعة 1. -[Tehran] : -نجمآبادي، أبو الفضل. -حاشية المكاسب : -الطبعة 1. -قم : -مجموعة آثار آية الله الميرزا أبو الفضل النجمآبادي ؛ -انصاري، مرتضى بن محمد أمين، -مؤسسة آية الله العظمى البروجردي. -东北亚 区域 经济 社会 合作 与 发展 国际 学术 研讨会 -东北亚 自由 贸易区 : -2004年 东北亚 区域 经济 社会 合作 与 发展 国际 学术 研讨会 论文选 -第1版. -沈阳 : -李 向平. -李 勇辉, -城镇 居民 住宅 消费 保障 制度 / -第1版. -北京市 : -陈 相灵. -《武经 七书》 与 当代 战争 战略 / -第1版. -北京 : -武经 七书. -社会 保障 社会 福祉 大事典 = -初版. -東京 : -労働 旬報社. -한국 팝 의 고고학 1970 : -제1판. -경기도 파주시 : -신 현준. -武 旭峰. -深入 黃山 的 背后 : -找寻 徽州 -第2版. -广州 : -发现 之旅 = -徽州 地区(China) -徽州 地区(China) -南 丽军. -比较 政治 制度 / -第1版. -哈尔滨 : -向 俊杰. -孔 兆政. -贾 少华. -民办 大学 的 战略 / -第1版. -杭州 : -浙江省 教育 科学 规划 2005 年 重点 研究 课题 -刘 晓琴. -中国 近代 留英 教育史 / -第1版. -天津市 : -近代 中国 研究 丛书 -Rev. ed. of author's doctoral thesis under title: 中国 近代 留英 教育 研究. -刘 晓琴. -党 崇民, -论 邓小平 战役 指导 特色 = -第1版. -北京 : -中国 军事学 博士 文库 -邓 小平, -建立 农村 劳动力 平等 就业 制度 / -第1版. -北京市 : -陈 晓华. -张 红宇. -胡 小林. -毛 泽东 的 学习 思想 与 实践 / -第1版. -济南 : -毛 泽东, -于 云才. -赵 志忠. -民族 文学 论稿 / -第1版. -沈阳市 : -至尊 宗喀巴 大师传 / -第3版, 修订本. -西宁 : -郭 和卿. -威慑 人类 / -第1版. -北京 : -沈 晓阳. -傅 国涌, -主角 与 配角 : -近代 中国 大转型 的 台前 幕后 -第1版. -武汉市 : -白 友涛. -盘根草 : -城市 现代化 背景下 的 回族 社区 -第1版. -银川市 : -邬 大光. -危机 与 转机 : -第1版. -[厦门] : -厦门 大学 WTO 硏究 中心 系列 丛书 ; -林 莉. -刘 学杰. -新疆 旧事 = -第1版. -乌魯木齐市 : -居上 图书 -新疆 维吾尔自治区 (China) -吴 静安, -春秋 左氏傳 舊注 疏證 續 / -第1版. -長春 : -劉 文淇, -Confucius. -左丘 明. -劉 文淇, -董 洪运, -聚焦 地平线下 : -漫谈 新时期 人民 防空 -北京 第1版. -北京市 : -皇甫 宜川. -中国 战争 电影史 / -第1版. -北京 : -百年 中国 电影 研究 书系 -高等 教育 发展 与 财政 政策 国际 研讨会 -高等 教育 发展 的 财政 政策 : -OECD 与 中国 -第1版. -北京 : -"根据 中国 教育部 和 经济 合作 与 发展 组织(OECD) 的 协商, 2004年月11--14日, 双方 在 北京 共同 召开了 '高等 教育 发展 与 财政 政策 国际 研讨会'" -- Foreword. -范 文曜. -闫 国华. -中国 当代 文学史 / -第1版. -海口 : -21世纪 高等 敎育 系列 敎材. 汉语言 文学类 -田 中阳. -赵 树勤. -王 中江. -进化 主义 在 中国 = -第1版. -北京 : -20世纪 西方 哲学 东渐史 -董 贵昕. -金融 泡沫 的 形成, 运行 与 控制 研究 / -第1版. -上海市 : -黄皮书 系列 -周 到. -周 到 藝術 考古 文集 / -第1版. -郑州市 : -河南 博物院 学术 文库 -河南 博物院. -唐 忠毛. -佛教 本觉 思想 论争 的 现代性 考察 / -第1版. -上海 : -中国 的 现代性 与 人文 学术 丛书 -地理 信息 与 规划 支持 系统 / -第1版. -北京 : -李 楯, -面对 艾滋病, 2004 = -第1版. -北京市 : -李 丹. -中国 上市 公司 发展 规模 研究 = -第1版. -武汉 : -管理 新干线 -卢 洪涛, -中国 现代 文学 思潮 史论 / -第1版. -北京 : -"陕西 师范 大学 优秀 著作 出版 基金 资助 出版"--P. facing t.p. -宋代 傳記 資料 叢刊 / -第1版. -北京市 : -宋元明清 傳記 資料 叢刊 系列 - Vol. 49 called "索引" with added title page: 四十七種 宋代 傳記 綜合 引得 / 洪 業 ... [et al.] 編纂. -洪 業. -北京 圖書館 出版社. -四十七種 宋代 傳記 綜合 引得. -作战 指挥学 / -北京 第1版. -北京 : -丁 邦宇. -装备 保障性 工程 与 管理 = -第1版. -北京市 : -徐 宗昌, -黄 益嘉. -杨 宏伟. -刘 佐泉. -太平 天国 与 客家 / -第1版. -开封市 : -客家 文化 研究 丛书 -中国 财富 新贵 / -第1版. -北京市 : -范 爱民. -高句丽 厉史 与 文化 学术 研讨会 -高句丽史 新 研究 / -高句丽 厉史 与 文化 学术 研讨会 论文集 -第1版. -延吉市 : -高句丽 (Kingdom) -李 国强. -李 宗勋. -中国 小额 信贷 发展 研究 = -第1版. -北京 : -曹 子娟. -陶 江. -陶姓 史话 = -第1版. -南昌市 : -中华 姓氏 文化 丛书 系列. 中华 姓氏 史话 丛书 -陈 光焱. -中国 财政 思想 与 制度 改革 / -第1版. -北京 : -中南 财经 大学 财政学 博士点 导师 文集 -郑 永振. -渤海 墓葬 研究 / -第1版. -长春市 : -严 长录. -陳 寅恪, -金明館 叢稿 初編 / -北京 第1版. -北京 : -陳 寅恪 集 -东北 老工业 基地 振兴 与 管理 现代化 / -第1版. -北京 : -中国 企业 管理 研究会. -中国 社会 科学院. -寒 布. -故宮 = -第1版. -北京 : -北京 的 世界 文化 遗产 = -故宮 博务院 (China) -北京 (China) -北京 (China) -閆 修篆. -易經 的 圖 與 卦 / -臺北市 : -易經. -浪尖 逐梦 : -余 柱业 口述 历史 档案 -初版. -Petaling Jaya, Selangor, Malaysia : -风云 丛书 ; -陈 剑, -郴州市 2000年 人口 普查 资料 / -郴州市 人口 普查 资料 -2000年 人口 普查 资料 -[郴州市 : -向 曽榆. -郴州市 第五次 人口 普查 领导 小组. -רוזנמן, מרדכי. -שמחת מרדכי. -ספר שמחת מרדכי / -ניו יורק : -חלק ב׳ : בראשית, שמות, ענינים שונים ־־ -徐 宗幹, -斯未 信齋 文編 -斯未 信齋 文編 ; -斯未 信齋 文編 ; 斯未 信齋 雜錄 -初版. -南投市 : -臺灣 歷史 文獻 叢刊 -徐 宗幹, -臺戰 實紀. -臺戰 演義 / -初版. -南投市 : -臺灣 歷史 文獻 叢刊 -劉永福, -臺灣 銀行. -冯 文炳. -废名 作品 精选 / -第1版. -武汉市 : -现代 文学 名家 作品 精选 -沙 铁华. -月 华. -大園 市藏. -臺灣 事蹟 綜覽 / -台北市 : -幕府山 胜迹 寻踪 / -南京市 : -下关文史 ; -政协 南京市下关区文史 资料 委员会 . -南京市 幕府山 地区 保护 开发领导 小组 办公室. -赵 淑敏, -京梦 / -第1版. -广州市 : -吴 兢 -贞观 政要 / -第1版. -合肥市 : -中华 古典 智慧 珍品 -唐 太宗, -范 勇胜. -העיירה שלי : -תל־אביב : -גרנצרסקי־קדרי, בינה. -科学 发展观 与 新一轮 经济 增长 / -第1版. -上海 : -厉 无畏. - 王 振. -熊谷 弘, -英米 陪審 制度 の 運用 と 其の 批判 / -[Tokyo] : -司法 研究 報告書 ; -이 준우, -국, 공유지 신탁 법제 개선 방안 연구 / -서울 특별시 : -연구 보고 ; -김 두진, -공정 거래법 상 경제력 집중 규제 연구 / -서울 특별시 : -연구 보고 ; -최 성근. -OECD 기업 지배 구조 원칙 의 국내법 수용 에 관한 연구 / -서울 특별시 : -연구 보고 ; -김 정순. -행정법 상 재판 외 분쟁 해결 법제 연구 / -서울 특별시 : -연구 보고 ; -김 수진, -공무원 권익 향상 을 위한 행정 구제 법제 연구 / -서울 특별시 : -연구 보고 ; -傅 佩榮, -傅 佩榮 解讀 孟子 : -初版. -台北縣 新店市 : -世界 公民 叢書 ; -Mencius. -Mencius. -平 可夫. -中國 軍事 與 國際 戰略 / -第1版. -香港 : -黑白講 李 敖 : -第1版. -[香港] : -富達 文庫 ; -李 敖, -齊 以正. -吳 小攀. -孟 庆顺. -"一国 两制" 与 香港 回归后 的政治 发展 / -香港 回归后 的政治 发展 -香港 初版. -香港 : -鄭 義, -中共 十大 敗仗 : -中共官方戰史上 被刻意 掩埋 的 篇章 -第1版. -香港 : -中國 共產黨 -中國 國民黨 -吳 潤生. -林 彪 與 文化 大革命 / -第2版. -Carle Place, N.Y. : -《眞相》系列 ; -林 彪, -周 承人. -早期 香港 電影史 (1897-1945) / -香港 : -李 以荘. -魏 成思. -兩岸 密使 50 年 / -香港 : -記憶 歷史 叢書 -程 希, -当代 中囯 留学生 硏究 / -初版. -香港 : -北京 大学 华侨 华人 硏究 中心 丛书 ; -"北京 大学 龚 诗贮 基金 赞助 出版." -鄭 義, -長征 : -第1版. -香港 : -中國 共產黨 -中國 國民黨 -香港・文化・研究 / -香港 : -吳 俊雄. -馬 傑偉. -呂 大樂. -伊 戰 啓示錄 / -初版. -Singapore : -王 賡武. -宮 少朋. -中日 关系 多维 透視 : -古厩 忠夫 教授 还历 纪念 论文集 -香港 初版. -香港 : -古厩 忠夫, -古厩 忠夫 教授 还历 纪念 论文集 编辑 委员会. -清宮 臺灣 巡撫 史料 / -初版. -臺北市 : -國立 故宮 博物院 院藏 清代 臺灣 文獻 叢編 -洪 安全, -馮 明珠. -落地 生根. -落地 生根 : -神戶 華僑 與 神阪 中華 會館 百年史 -香港 初版. -香港 : -北京 大學 華僑 華人 研究 中心 叢書 ; -Translation of: 落地 生根 : 神戶 華僑 と 神阪 中華 会館 の 百年. -中華 会館 (Kobe-shi, Japan) -忽 海燕. -中華 會館 (Kobe-shi, Japan) -王 鼎鈞. -葡萄 熟了 / -1版. -臺北市 : -大地 叢書 ; -戴 錦華, -性別 中國 / -初版. -台北市 : -麥田 人文 -附 參考 文獻. -盧 增. -柬埔寨 企业 纳稅 指南, 2004 / -中文 版. -[Phnom Penh?] : -הלר חדד, הילה. -התכלית של ועדות מייעצות ציבוריות לעניין מסוים־ נוסח אד הוקת בישראל : תוך התמקדות בשלוש הועדות הבאות: ועדת וילנאי (1999), ועדת טל (2000), ועדת בן בסט (2000) / -[Israel : -פרג׳, רג׳א סעיד. -הקשרים בין הדרוזים והיהודים עד הקמת מדינת ישראל (1948) / -ינוח : -חלפין, יגאל. -הטיהורים הסטליניסטיים : -תל אביב : -פטיש -קרליץ, שמריהו יוסף נסים. -חוט שני (הלכות רבית) -ספר חוט שני : -בני ברק : -הוכמן, חיים אריה, -안 도섭. -조선 의 혼불 타던 밤 에 : -초판. -서울시 : -윤 동주, -بلفقيه، عبد الله بن حسين بن عبد الله. -قوت الألباب من مجاني جني الألباب / -تريم، حضرموت : -زكي، رمضان خميس. -مفهوم السنن الربانية : -الطبعة 1. -القاهرة : -هذا هو الإسلام ؛ -عمارة، محمد. -قراءة النص الديني : -الطبعة 1. -القاهرة : -هذا هو الإسلام ؛ -ندوة السيرة النبوية : -الطبعة 1. -[Omdurman] : -منشورات المركز ؛ -إمام، حمادة. -مبارك والإخوان / -الطبعة العربية 1. -المهندسين [Giza] : -新譯 古文 辭類纂 / -初版. -臺北市 : -古籍 今注 新譯 叢書 -姚 鼐, -黃 鈞. -刘 文锁, -尼雅 : -静止 的 家园 和 时间 -第1版. -北京市 : -神秘 中国 -民丰县 (China) -民丰县 (China) -中国 新编 地方志 总目 提要 = -第1版. -北京市 : -《中国 新编 地方志 总目 提要》编纂 委员会. -中国 第二 历史 档案馆. -馆藏 民国 台湾 档案 汇编 / -民国 台湾 档案 汇编 -台湾 档案 汇编 -第1版. -北京市 : -台湾 文献 史料 出版 工程 -陈 云林. -海峡 两岸 出版 交流 中心. -黃 俊傑, -德川 日本 《論語》詮釋 史論 / -初版. -臺北市 : -東亞 文明 研究 叢書 ; -Confucius. -東亞 視域中 的 國籍、移民 與 認同 學術 研討會 -東亞 視域中 的 國籍、移民 與 認同 / -初版. -臺北市 : -東亞 文明 研究 叢書 ; -甘 懷真, -貴志 俊彦, -川島 真, -בסן, צדוק. -יתומות : -ירושלים : -רז, גאי. -בית האמנים. -שלו, אריה. -כישלון והצלחה בהתרעה : -תל אביב : -אריאלי, שאול. -תפסת מרובה לא תפסת : -ירושלים : -תמונת מצב -שביט, יעקב. -אירופה המהוללת והמקוללת : -תל אביב : -ריינהרץ, יהודה. -שי, דב. -15 מכל 100 שרדו : -חמישה עשר מכל מאה שרדו -מהד׳ 2. -[ת״א ז״א תל אביב : -שי, דב. -עדווי, ג׳מאל, -פעילות הקוויקרים האמריקנים בפלישתינה 1948-1869 / -Haifa] : -חסקין, גילי. -שבוי בקסמה : -הוד השרון : -טאוב, גדי. -המתנחילים והמאבק על משמעותה של הציונות / -מתנחלים -תל אביב : -פרוזה (ידיעות אחרונות). -日本軍 「慰安婦」 関係 資料 集成 / -初版. -東京 : -鈴木 裕子, -山下 英愛, - 外村 大,1966- -成田 龍一. -歴史学 の ポジショナリティ : -東京 : -山崎 一穎, -森 鷗外 論攷 / -東京 : -森 鷗外, -木村 博一, -日本 社会科 の 成立 理念 と カリキュラム 構造 / -初版. -東京 : -堀 幸雄, -最新 右翼 辞典 / -右翼 辞典 -東京 : -久保田 淳, -ことば、ことば、ことば / -初版. -東京 : -小林 一茶, -だん袋 : -一茶 自筆 句集 -東京 : -渡辺 卓郎. -岡本 哲志, -銀座 四百年 : -東京 : -講談社 選書 メチエ ; -銀座 (Tokyo, Japan) -千石 英世, -小島 信夫 : -暗示 の 文学、鼓舞する 寓話 -東京 : -小島 信夫, -検証 国家 戦略なき 日本 / -東京 : -読売 新聞社. -吉田 喜重, -吉田 喜重 : -変貌 の 倫理 -東京 : -蓮實 重彦, -李 燕, -陶 行知 の 芸術 教育論 : -初版. -東京 : -陶 行知, -寺崎 昌男, -大学 は 歴史 の 思想 で 変わる : -初版. -東京 : -比田井 克仁, -伝說 と 史実 の はざま : -東京 : -誰 で も 読める 日本 古代史 年表 : -日本 古代史 年表 -東京 : -吉川 弘文館. -保阪 正康, -松本 清張 と 昭和 史 / -初版. -東京 : -平凡社 新書 ; -松本 清張, -松本 清張, -松本 清張, -東京 大学. -戦争 の 表象 : -東京 : -東京 大学. -吉見 俊哉, -人口 減少 時代 の 日本 経済 / -東京 : -人口学 ライブラリー ; -大淵 寬, -森岡 仁, -日本 の 所得 分配 : -初版. -東京 : -小塩 隆士, -田近 栄治. -府川 哲夫, -佐々木 毅, -知識 基盤 社会 と 大学 の 挑戦 : -初版. -東京 : -本多 博之, -戦国 織豊期 の 貨幣 と 石高制 / -東京 : -資料 集成 戦争 と 障害者 / -東京 : -十五年 戦争 極秘 資料集. 補卷 ; -橋本 雅之, -古風土記 の 研究 / -初版. -大阪市 : -研究 叢書 ; -古風土記 -常陸国 風土記. -八代 斌助 の 思想 と 行動 を 考える : -京都市 : -神戶 国際 大学 経済 文化 研究所 叢書 ; -八代 斌助, -日本 聖公会 -桑田 優, -平尾 武之, -山本 祐策, -小川 恭一. -徳川 幕府 の 昇進 制度 : -寬政 十年末 旗本 昇進表 -東京 : -ジャーナリズム と 権力 / -京都市 : -大石 裕, -日本 の 地方 民鉄 と 地域 社会 / -初版. -東京 : -青木 栄一, -少子化 の 経済 分析 / -東京 : -高山 憲之, -斎藤 修, -田間 泰子, -「近代 家族」と ボディ・ポリティクス / -京都市 : -四川省 潼南县 地名录 / -潼南县 地名录 -[潼南县 : -四川省 地名录 丛书 ; -潼南县 (China) -四川省 潼南县 地名 领导 小组. -四川省 武隆县 地名录 = -武隆县 地名录 -[武隆县 : -四川省 地名录 丛书 ; -武隆县 (China) -武隆县 地名 领导 小组. -四川省 新都县 地名录 / -新都县 地名录 -[新都县 : -四川省 地名录 丛书 ; -新都县 (China) -新都县 地名 领导 小组. -مالح، محمد رياض. -الشيخ الأكبر محيي الدين بن العربي سلطان العارفين / -أبو ظبي : -حميري، جمال الدين عبد الله. -النسبة إلى المواضع والبلدان / -الطبعة 1. -أبو ظبي : -مزروعي، فاطمة حمد. -تمثيلات الآخر في أدب قبل الإسلام / -أبو ظبي : -يوميات زايد / -الطبعة 1. -أبو ظبي : -المأمورة : -الطبعة 1. -Abu Dhabi : -العاديات : -الطبعة 1. -Abu Dhabi : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1997 حتى عام 2006 بشأن الأراضي الممنوحة للمواطنين / -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1996 حتى عام 2006 في العلامات التجاربة / -[?Dubai] : -قانون اتحادي رقم 24 لسنة 2006 م في شأن حماية المستهلك. -[?Dubai] : -قانون مكافحة التستر التجاري رقم 17 لسنة 2004 م. -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1999 حتى عام 2006 في المنازعات بين الؤجرين والمستأجرين : -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1990 حتى عام 2005 في الإبعاد / -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1988 حتى عام 2005 م في أحكام بطاقة الإئتمان. -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1991 حتى عام 2005 في بطلان الإعلان / -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1997 حتى عام 2005 في الملكية التجارية والصناعية / -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1991 حتى عام 2006 في التسهيلات المصرفية / -[?Dubai] : -حجي، عبد الرحمن. -دراسة الظاهرة العلمية في المجتمع الأندلسي / -أبو ظبي : -مري، سعيد. -ديوان الغواص / -أبو ظبي : -نجمآبادي، أبو الفضل. -كتاب القضاء : -الطبعة 1. -قم : -مجموعة ىثار آية الله الميرزا أبو الفضل النجم آبادي ؛ -نجمآبادي، أبو الفضل. -الرسائل الفقهية : -الطبعة 1. -قم : -مجموعة آثار آية الله الميرزا أبو الفضل النجمآبادي ؛ -한국 의 민주 정부. -한국 의 민주 정부. -חיים ביהודה. -[Jerusalem] : -松村 潤, -米國 議會 圖書館 所藏 滿洲語 文獻 目錄 / -滿洲語 文獻 目錄 -東京 : -東北 アジア 文獻 硏究 叢刊 ; -פוגל, דוד. -חרא של פרסום / -מהד׳ 1. -[Israel] : -פוגל, דוד. -ישראל. -אזורי עדיפות לאומית : -ירושלים : -دارا شكوه. -منتخبات آثار : -[تهران] : -جلالى نائينى، محمد رضا. -صادق عنقا. -١نته : -١ا) 22. -Verdugo City, Ca : -בר־עם שחל, ליאורה. -הנחיות לסקר ותיעוד אתרים לשימור / -[Israel] : -ארן, זלמן. -דברים על החינוך בדור הדעת / -חינוך בדור הדעת -אבא אבן -ירושלים : -סדרת ״השרים״ / יוסף יונאי -יונאי, יוסף. -הגדה של פסח : -ירושלים : -אלישיב, יוסף שלו׳. -קהלות יעקב. -ישראלזון, משה. -ורנר, שלמה י. -ליל שמורים. -ספר ליל שמורים : -ליל שמורים -ברוקלין, נ.י. : -ברוודה, שלמה. -חד גדיא. -הגדה של פסח : -ירושלים : -קניבסקי, יעקב ישראל. -ברונשטיין, ישראל יוסף בן משה אליעזר. -מוסקאוויטש, נפתלי אשר ישעי׳. -פירות האילן (ארבעה המינים) -ספר פירות האילן : -פירות האילן -אשדוד : -ספר יהושע. -ספר יהושעץ -יהושע -[ירושלים : -ספר יהושע. -ספר שופטים. -וילהלם, אהרן אליהו בן יחזקאל. -ספר שופטים. -אילה שלוחה. -דיקמאן, אברהם ש. -ספר שלשים יום קודם החג : -שלשים יום קודם החג -זכרון משה -מהד׳ 2. מתוקנת. -ליקוואוד, נ. דז. : -אורנשטיין, יעקב משולם. -ישועות יעקב -ספר ישועות יעקב : -נדפס ונסדר מחדש. -אשדוד : -תורה. -באום, אברהם. -לילה כיום יאיר : -ירושלים : -אוצר מפרשי קהלת / -ירושלם : -קהלת. -ואנונו, שמעון. -קהלת. -דיין, נסים. -ספר יעלת חן : -יעלת חן -בני ברק : -תורה. -מרגליות התורה : -ספר מרגליות התורה -ירושלים : -תורה. -ואנונו, שמעון. -רבינוביץ־תאומים, בנימין בן יעקב. -ספר יחלק שלל : -יחלק שלל -ירושלים : -תורה. -ספורנו ורבינו בחיי. -ספר פניני ספורנו ורבינו בחיי : -לונדון : -תורה. -רוזנבוים, יעקב מאיר. -ספורנו, עובדיה בן יעקב, -בחיי בן אשר בן חלבא, -ראבד, רם משה. -הגדה של פסח מהדורת טנן : -פתח תקוה : -הגדה של פסח. -東京 大学. -東京 大学 総合 研究 博物館 所蔵 渡辺 武男 収集 広島・長崎 被爆 関連 資料 目錄 / -渡辺 武男 収集 広島・長崎 被爆 関連 資料 目錄 -広島・長崎 被爆 関連 資料 目錄 -東京 : -東京 大学 総合 研究 博物館 標本 資料 報告, - 渡辺 武男, -東京大学. -田賀井 篤平, -シルク ロード 草原 の 道 に おける アルジャィ 石窟 の 歴史 と 文化・国際 シンポジウム, 2007年 3月 27日 : -静岡市 : -楊 海英, -報告書 日系 アメリカ人 リーダーシップ シンポジウム 「芸術 から ビジネス まで: 多様 な 職業 を 通じた 日系 アメリカ人 の 貢献」/ -日系 アメリカ人 リーダーシップ シンポジウム 「芸術 から ビジネス まで: 多様 な 職業 を 通じた 日系 アメリカ人 の 貢献」 -東京 : -武田 興欣, -国際 交流 基金. -出来町 天王祭 鹿子神車・河水車 / -鹿子神車・河水車 -名古屋市 : -名古屋市 山車 調查 報告書 ; -名古屋市 文化財 調查 報告 ; -名古屋市 教育 委員会. -中国 対外 貿易 統計 / -2005年版. -東京 : -海外 調查 シリーズ ; -日本 貿易 振興 機構. -専門 用語 分野 の 国際 規格 共同 開発 調查 研究 成果 報告書. -東京 : -Japan. -日本 規格 協会. -群杭 基礎 の 大型 振動台 実験 / -[つくば市] : -土木 研究所 資料, -土木 研究所 (Japan). -マテリアル フロー データ ブック : -第 3版. -つくば市 : -森口 祐一. -橋本 征二, -産総研 レア メタル シンポジウム, 平成 18年 10月 2日. -「産総研 レア メタル シンポジウム」講演 予稿集. -名古屋市 : -産業 技術 総合 研究所. -古川 恵太. -沖縄 泡瀬 干潟 を 例 と した 沿岸 湿地 の 総合的 環境 評価 の 試み / -横須賀市 : -国土 技術 政策 総合 研究所 資料 = -徳川 将軍家 と 会津 松平家 : -会津若松市 : -会津藩 (Japan) -福島 県立 博物館. -若松城 天守閣 (Museum) -شيخ الأرض، محمد. -فشة خلق / -ابو ظبي : -ابن خلدون. -مقدمه ابن خلدون / -١ا) 2. -تهران : -انتشارات بنياد ترجمه و نشر كتاب ؛ -نابادى، محمد )روين. -شهرانى، عنايت الله. -ضرب المثلهاى درى افغانستان : -كلرى، البرتا [Calgary, Alberta, Canada]: -كوشان، محمد طه. -يعقوبي، أحمد بن أبي يعقوب. -تاريخ يعقوبى / -تهران : -انتشارات بناه ترجمه و نشر كتاب ؛ -آيتى، ابراهيم. -غيرت كرمانشاهى، عبد الكريم. -كليات آثار سيد عبد الكريم غيرت كرمانشاهى / -[تهران : -غيرت، محمد سعيد. diff --git a/tags/rel-1.7/test/util.py b/tags/rel-1.7/test/util.py deleted file mode 100644 index 7ade343..0000000 --- a/tags/rel-1.7/test/util.py +++ /dev/null @@ -1,4 +0,0 @@ -import sys -sys.path.append( '../pymarc' ); - - diff --git a/tags/rel-1.7/test/writer.py b/tags/rel-1.7/test/writer.py deleted file mode 100644 index 5e5e284..0000000 --- a/tags/rel-1.7/test/writer.py +++ /dev/null @@ -1,31 +0,0 @@ -import util -import unittest -import pymarc -import re -import os - -class MARCWriterTest(unittest.TestCase): - - def test_write(self): - - # write a record off to a file - writer = pymarc.MARCWriter(file('test/writer-test.dat','w')) - record = pymarc.Record() - field = pymarc.Field('245', ['0','0'], ['a', 'foo']) - record.addField(field) - writer.write(record) - writer.close() - - # read it back in - reader = pymarc.MARCReader(file('test/writer-test.dat')) - record = reader.next() - - # remove it - os.remove('test/writer-test.dat') - -def suite(): - suite = unittest.makeSuite(MARCWriterTest, 'test') - return suite - -if __name__ == "__main__": - unittest.main() diff --git a/tags/rel-1.7/test/xml_test.py b/tags/rel-1.7/test/xml_test.py deleted file mode 100644 index 4f7ed8d..0000000 --- a/tags/rel-1.7/test/xml_test.py +++ /dev/null @@ -1,66 +0,0 @@ -from unittest import TestCase -from pymarc import map_xml, parse_xml_to_array, record_to_xml, Record -from cStringIO import StringIO - -class XmlTest(TestCase): - - def test_map_xml(self): - self.seen = 0 - def count(r): self.seen += 1 - map_xml(count, 'test/batch.xml') - self.assertEqual(2, self.seen) - - def test_multi_map_xml(self): - self.seen = 0 - def count(r): self.seen += 1 - map_xml(count, 'test/batch.xml', 'test/batch.xml') - self.assertEqual(4, self.seen) - - def test_parse_to_array(self): - records = parse_xml_to_array('test/batch.xml') - self.assertEqual(len(records), 2) - - # should've got two records - self.assertEqual(type(records[0]), Record) - self.assertEqual(type(records[1]), Record) - - # first record should have 18 fields - r = records[0] - self.assertEqual(len(r.getFields()), 18) - - # check the content of a control field - self.assertEqual(r['008'].data, - u'910926s1957 nyuuun eng ') - - # check a data field with subfields - f = r['245'] - self.assertEqual(f.indicator1, '0') - self.assertEqual(f.indicator2, '4') - self.assertEqual(f['a'], u'The Great Ray Charles') - self.assertEqual(f['h'], u'[sound recording].') - - def test_xml(self): - # read in xml to a record - r1 = parse_xml_to_array('test/batch.xml')[0] - # generate xml - xml = record_to_xml(r1) - # parse generated xml - r2 = parse_xml_to_array(StringIO(xml))[0] - - # compare original and resulting record - self.assertEqual(r1.leader, r2.leader) - - f1 = r1.getFields() - f2 = r2.getFields() - self.assertEqual(len(f1), len(f2)) - - pos = 0 - while pos < len(f1): - self.assertEqual(f1[pos].tag, f2[pos].tag) - if f1[pos].isControlField(): - self.assertEqual(f1[pos].data, f2[pos].data) - else: - self.assertEqual(f1[pos].getSubfields(), f2[pos].getSubfields()) - self.assertEqual(f1[pos].indicators, f2[pos].indicators) - pos += 1 - diff --git a/trunk/test.py b/test.py similarity index 100% rename from trunk/test.py rename to test.py diff --git a/tags/rel-1.1/test/__init__.py b/test/__init__.py similarity index 100% rename from tags/rel-1.1/test/__init__.py rename to test/__init__.py diff --git a/tags/rel-0.9/test/bad.dat b/test/bad.dat similarity index 100% rename from tags/rel-0.9/test/bad.dat rename to test/bad.dat diff --git a/tags/rel-1.2/test/batch.xml b/test/batch.xml similarity index 100% rename from tags/rel-1.2/test/batch.xml rename to test/batch.xml diff --git a/trunk/test/encode.py b/test/encode.py similarity index 100% rename from trunk/test/encode.py rename to test/encode.py diff --git a/trunk/test/field.py b/test/field.py similarity index 100% rename from trunk/test/field.py rename to test/field.py diff --git a/tags/rel-0.6/test/marc.dat b/test/marc.dat similarity index 100% rename from tags/rel-0.6/test/marc.dat rename to test/marc.dat diff --git a/trunk/test/marc8.py b/test/marc8.py similarity index 100% rename from trunk/test/marc8.py rename to test/marc8.py diff --git a/tags/rel-0.6/test/one.dat b/test/one.dat similarity index 100% rename from tags/rel-0.6/test/one.dat rename to test/one.dat diff --git a/trunk/test/reader.py b/test/reader.py similarity index 100% rename from trunk/test/reader.py rename to test/reader.py diff --git a/trunk/test/record.py b/test/record.py similarity index 100% rename from trunk/test/record.py rename to test/record.py diff --git a/tags/rel-0.6/test/test.dat b/test/test.dat similarity index 100% rename from tags/rel-0.6/test/test.dat rename to test/test.dat diff --git a/tags/rel-1.1/test/test_marc8.txt b/test/test_marc8.txt similarity index 100% rename from tags/rel-1.1/test/test_marc8.txt rename to test/test_marc8.txt diff --git a/tags/rel-1.1/test/test_utf8.txt b/test/test_utf8.txt similarity index 100% rename from tags/rel-1.1/test/test_utf8.txt rename to test/test_utf8.txt diff --git a/trunk/test/util.py b/test/util.py similarity index 100% rename from trunk/test/util.py rename to test/util.py diff --git a/trunk/test/writer.py b/test/writer.py similarity index 100% rename from trunk/test/writer.py rename to test/writer.py diff --git a/trunk/test/xml_test.py b/test/xml_test.py similarity index 100% rename from trunk/test/xml_test.py rename to test/xml_test.py diff --git a/trunk/MANIFEST.in b/trunk/MANIFEST.in deleted file mode 100644 index 591cc6d..0000000 --- a/trunk/MANIFEST.in +++ /dev/null @@ -1,3 +0,0 @@ -global-include *.py *.dat -include README MANIFEST.in - diff --git a/trunk/README b/trunk/README deleted file mode 100644 index a917d56..0000000 --- a/trunk/README +++ /dev/null @@ -1,30 +0,0 @@ -DESCRIPTION ------------ - -pymarc is a python library for working with MARC21 bibliographic data -loosely based on the MARC/Perl suite of modules (http://marcpm.sf.net). -More about pymarc can be found at: http://www.textualize.com/pymarc - -INSTALLATION ------------- - -Run the pymarc test suite to make sure things are in order with the -distribution: - - python test.py - -And then install: - - python setup.py install - -For typical usage of this library look at the documentation in -pymarc/__init__.py or at the unittests found in the test directory. - -TODO ----- - -- marcxml writing support -- cleanup with respect to PEP 8 and PEP 257 - -LICENSE: BSD -AUTHOR: Ed Summers diff --git a/trunk/ez_setup.py b/trunk/ez_setup.py deleted file mode 100644 index 38c09c6..0000000 --- a/trunk/ez_setup.py +++ /dev/null @@ -1,228 +0,0 @@ -#!python -"""Bootstrap setuptools installation - -If you want to use setuptools in your package's setup.py, just include this -file in the same directory with it, and add this to the top of your setup.py:: - - from ez_setup import use_setuptools - use_setuptools() - -If you want to require a specific version of setuptools, set a download -mirror, or use an alternate download directory, you can do so by supplying -the appropriate options to ``use_setuptools()``. - -This file can also be run as a script to install or upgrade setuptools. -""" -import sys -DEFAULT_VERSION = "0.6c5" -DEFAULT_URL = "http://cheeseshop.python.org/packages/%s/s/setuptools/" % sys.version[:3] - -md5_data = { - 'setuptools-0.6b1-py2.3.egg': '8822caf901250d848b996b7f25c6e6ca', - 'setuptools-0.6b1-py2.4.egg': 'b79a8a403e4502fbb85ee3f1941735cb', - 'setuptools-0.6b2-py2.3.egg': '5657759d8a6d8fc44070a9d07272d99b', - 'setuptools-0.6b2-py2.4.egg': '4996a8d169d2be661fa32a6e52e4f82a', - 'setuptools-0.6b3-py2.3.egg': 'bb31c0fc7399a63579975cad9f5a0618', - 'setuptools-0.6b3-py2.4.egg': '38a8c6b3d6ecd22247f179f7da669fac', - 'setuptools-0.6b4-py2.3.egg': '62045a24ed4e1ebc77fe039aa4e6f7e5', - 'setuptools-0.6b4-py2.4.egg': '4cb2a185d228dacffb2d17f103b3b1c4', - 'setuptools-0.6c1-py2.3.egg': 'b3f2b5539d65cb7f74ad79127f1a908c', - 'setuptools-0.6c1-py2.4.egg': 'b45adeda0667d2d2ffe14009364f2a4b', - 'setuptools-0.6c2-py2.3.egg': 'f0064bf6aa2b7d0f3ba0b43f20817c27', - 'setuptools-0.6c2-py2.4.egg': '616192eec35f47e8ea16cd6a122b7277', - 'setuptools-0.6c3-py2.3.egg': 'f181fa125dfe85a259c9cd6f1d7b78fa', - 'setuptools-0.6c3-py2.4.egg': 'e0ed74682c998bfb73bf803a50e7b71e', - 'setuptools-0.6c3-py2.5.egg': 'abef16fdd61955514841c7c6bd98965e', - 'setuptools-0.6c4-py2.3.egg': 'b0b9131acab32022bfac7f44c5d7971f', - 'setuptools-0.6c4-py2.4.egg': '2a1f9656d4fbf3c97bf946c0a124e6e2', - 'setuptools-0.6c4-py2.5.egg': '8f5a052e32cdb9c72bcf4b5526f28afc', - 'setuptools-0.6c5-py2.3.egg': 'ee9fd80965da04f2f3e6b3576e9d8167', - 'setuptools-0.6c5-py2.4.egg': 'afe2adf1c01701ee841761f5bcd8aa64', - 'setuptools-0.6c5-py2.5.egg': 'a8d3f61494ccaa8714dfed37bccd3d5d', -} - -import sys, os - -def _validate_md5(egg_name, data): - if egg_name in md5_data: - from md5 import md5 - digest = md5(data).hexdigest() - if digest != md5_data[egg_name]: - print >>sys.stderr, ( - "md5 validation of %s failed! (Possible download problem?)" - % egg_name - ) - sys.exit(2) - return data - - -def use_setuptools( - version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, - download_delay=15 -): - """Automatically find/download setuptools and make it available on sys.path - - `version` should be a valid setuptools version number that is available - as an egg for download under the `download_base` URL (which should end with - a '/'). `to_dir` is the directory where setuptools will be downloaded, if - it is not already available. If `download_delay` is specified, it should - be the number of seconds that will be paused before initiating a download, - should one be required. If an older version of setuptools is installed, - this routine will print a message to ``sys.stderr`` and raise SystemExit in - an attempt to abort the calling script. - """ - try: - import setuptools - if setuptools.__version__ == '0.0.1': - print >>sys.stderr, ( - "You have an obsolete version of setuptools installed. Please\n" - "remove it from your system entirely before rerunning this script." - ) - sys.exit(2) - except ImportError: - egg = download_setuptools(version, download_base, to_dir, download_delay) - sys.path.insert(0, egg) - import setuptools; setuptools.bootstrap_install_from = egg - - import pkg_resources - try: - pkg_resources.require("setuptools>="+version) - - except pkg_resources.VersionConflict, e: - # XXX could we install in a subprocess here? - print >>sys.stderr, ( - "The required version of setuptools (>=%s) is not available, and\n" - "can't be installed while this script is running. Please install\n" - " a more recent version first.\n\n(Currently using %r)" - ) % (version, e.args[0]) - sys.exit(2) - -def download_setuptools( - version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, - delay = 15 -): - """Download setuptools from a specified location and return its filename - - `version` should be a valid setuptools version number that is available - as an egg for download under the `download_base` URL (which should end - with a '/'). `to_dir` is the directory where the egg will be downloaded. - `delay` is the number of seconds to pause before an actual download attempt. - """ - import urllib2, shutil - egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3]) - url = download_base + egg_name - saveto = os.path.join(to_dir, egg_name) - src = dst = None - if not os.path.exists(saveto): # Avoid repeated downloads - try: - from distutils import log - if delay: - log.warn(""" ---------------------------------------------------------------------------- -This script requires setuptools version %s to run (even to display -help). I will attempt to download it for you (from -%s), but -you may need to enable firewall access for this script first. -I will start the download in %d seconds. - -(Note: if this machine does not have network access, please obtain the file - - %s - -and place it in this directory before rerunning this script.) ----------------------------------------------------------------------------""", - version, download_base, delay, url - ); from time import sleep; sleep(delay) - log.warn("Downloading %s", url) - src = urllib2.urlopen(url) - # Read/write all in one block, so we don't create a corrupt file - # if the download is interrupted. - data = _validate_md5(egg_name, src.read()) - dst = open(saveto,"wb"); dst.write(data) - finally: - if src: src.close() - if dst: dst.close() - return os.path.realpath(saveto) - -def main(argv, version=DEFAULT_VERSION): - """Install or upgrade setuptools and EasyInstall""" - - try: - import setuptools - except ImportError: - egg = None - try: - egg = download_setuptools(version, delay=0) - sys.path.insert(0,egg) - from setuptools.command.easy_install import main - return main(list(argv)+[egg]) # we're done here - finally: - if egg and os.path.exists(egg): - os.unlink(egg) - else: - if setuptools.__version__ == '0.0.1': - # tell the user to uninstall obsolete version - use_setuptools(version) - - req = "setuptools>="+version - import pkg_resources - try: - pkg_resources.require(req) - except pkg_resources.VersionConflict: - try: - from setuptools.command.easy_install import main - except ImportError: - from easy_install import main - main(list(argv)+[download_setuptools(delay=0)]) - sys.exit(0) # try to force an exit - else: - if argv: - from setuptools.command.easy_install import main - main(argv) - else: - print "Setuptools version",version,"or greater has been installed." - print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)' - - - -def update_md5(filenames): - """Update our built-in md5 registry""" - - import re - from md5 import md5 - - for name in filenames: - base = os.path.basename(name) - f = open(name,'rb') - md5_data[base] = md5(f.read()).hexdigest() - f.close() - - data = [" %r: %r,\n" % it for it in md5_data.items()] - data.sort() - repl = "".join(data) - - import inspect - srcfile = inspect.getsourcefile(sys.modules[__name__]) - f = open(srcfile, 'rb'); src = f.read(); f.close() - - match = re.search("\nmd5_data = {\n([^}]+)}", src) - if not match: - print >>sys.stderr, "Internal error!" - sys.exit(2) - - src = src[:match.start(1)] + repl + src[match.end(1):] - f = open(srcfile,'w') - f.write(src) - f.close() - - -if __name__=='__main__': - if len(sys.argv)>2 and sys.argv[1]=='--md5update': - update_md5(sys.argv[2:]) - else: - main(sys.argv[1:]) - - - - - diff --git a/trunk/test/__init__.py b/trunk/test/__init__.py deleted file mode 100644 index 4c41d24..0000000 --- a/trunk/test/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -import record -import field -import reader -import marc8 diff --git a/trunk/test/bad.dat b/trunk/test/bad.dat deleted file mode 100644 index 4800dc9..0000000 --- a/trunk/test/bad.dat +++ /dev/null @@ -1,191 +0,0 @@ - - Date: 03/15/2007 - - When searching the Florida State University Library catalog, - you sent the following records: - - -FMT BK -LDR 00000nam 2200409Ia 4500 -006 m d -007 cr cnu|||unuuu -008 041015s2004 caua sb s000|0 eng d -020 |a 1417545372 (electronic bk.) -035 |a (OCoLC)56733780 -0359 |a AMR9920 |b FS -TKR |a (Source)B0013464- 321 -TKR |a (FTaSU)NETLIBY20050112 -OWN |a FS -040 |a N$T |c N$T -05014 |a PS1303 |b .S25 2004eb -08204 |a 818/.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24510 |a Mark Twain's helpful hints for good living |h [electronic resource] : |b a handbook for the damned human race / |c edited by Lin Salamo, Victor Fischer, and Michael B. Frank of the Mark Twain Project. -260 |a Berkeley : |b University of California Press, |c c2004. -300 |a xiv, 207 p. : |b ill. |c 21 cm. -4901 |a Jumping frogs ; |v 2 -504 |a Includes bibliographical references (p. 203-206). -533 |a Electronic reproduction. |b Boulder, Colo. : |c NetLibrary, |d 2004. |n Available via World Wide Web. |n Access may be limited to NetLibrary affiliated libraries. -650 0 |a Conduct of life |v Quotations, maxims, etc. -650 0 |a Conduct of life |v Literary collections. -60010 |a Twain, Mark, |d 1835-1910 |v Quotations. -655 7 |a Electronic books. |2 local -7001 |a Salamo, Lin. -7001 |a Fischer, Victor, |d 1942- -7001 |a Frank, Michael B. -7102 |a Bancroft Library. |b Mark Twain Project. -7102 |a NetLibrary, Inc. -7761 |c Original |z 0520242459 |w (DLC) 2003024224 |w (OCoLC)53398020 -8001 |a Twain, Mark, |d 1835-1910. |t Jumping frogs ; |v 2. -85640 |3 Bibliographic record display |u http://www.netLibrary.com/urlapi.asp?action=summary&v=1&bookid=119359 |z An electronic book accessible through the World Wide Web; click for information -CAT |a NCRD |b 20 |c 20041222 -NCO |a I -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST8 |0 HOL |1 FSU60-002387996 |n 8 |a FTaSU |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -LOC8 |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -SYS 002249954 - -FMT BK -LDR 00000pam 2200301 a 4500 -008 040820s2004 nyu b 000|0 eng -010 |a 2004057341 -020 |a 0142437751 -035 |a (OCoLC)56413662 -0359 |a AMS5114 |b FS -TKR |a (Source)ONIFS141- 49 -OWN |a FS -040 |a DLC |c DLC |d YDX |d FDA -049 |a FDAA ksm -05000 |a PS1302 |b .Q56 2004 -08200 |a 818/.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24514 |a The portable Mark Twain / |c edited with an introduction by Tom Quirk. -260 |a New York : |b Penguin Books, |c 2004. -300 |a liv, 583 p. ; |c 20 cm. -440 0 |a Penguin classics -504 |a Includes bibliographical references (p. [xli]-xlv). -60010 |a Twain, Mark, |d 1835-1910 |v Correspondence. -650 0 |a Humorous stories, American. -650 0 |a Authors, American |y 19th century |v Correspondence. -7001 |a Quirk, Tom, |d 1946- -CAT |a NCRD |b 20 |c 20050218 -CAT |a NUPD |b 20 |c 20050324 -NCO |a blank -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST0 |0 Z30 |1 002255004000010 |b FSULC |c GEN |o BOOK |d 01 |f N |r FSU60-002393331 |n 0 |h PS1302 |i .Q56 2004 |3 Book Sort |4 STROZIER LIBRARY |6 Regular Loan -LOC0 |b FSULC |c GEN |o BOOK |h PS1302 |i .Q56 2004 |3 Book Sort |4 STROZIER LIBRARY |6 Regular Loan -SYS 002255004 - -FMT BK -LDR 00000nam 2200361Ia 4500 -006 m d -007 cr cnu|||unuuu -008 031127s2003 cau s 000|i eng d -020 |a 0520900995 (electronic bk.) -035 |a (OCoLC)53798433 -0359 |a ALU9407 |b FS -TKR |a (Source)B0011135- 96 -TKR |a (FTaSU)NETLIBY20040302 -OWN |a FS -040 |a N$T |c N$T -05014 |a PS1331 |b .A4 2003eb -08214 |a 818.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24010 |a Correspondence. |k Selections -24510 |a Mark Twain's letters 1876-1880. |n Volume 2, |p 1877 |h [electronic resource] / |c edited by the Mark Twain Project. -250 |a Electronic ed. -260 |a Berkeley, Calif. : |b Published for the University of California Press by the Mark Twain Project of the Bancroft Library, |c 2003. -538 |a Mode of access: World Wide Web. -506 |a Made available through NetLibrary; access may be limited to NetLibrary affiliated libraries. -500 |a Title from ebook title screen. -60010 |a Twain, Mark, |d 1835-1910 |v Correspondence. -650 0 |a Authors, American |y 19th century |v Correspondence. -650 0 |a Humorists, American |y 19th century |v Correspondence. -655 7 |a Electronic books. |2 local -7102 |a Bancroft Library. |b Mark Twain Project. -7102 |a NetLibrary, Inc. -8564 |3 Bibliographic record display |u http://www.netLibrary.com/urlapi.asp?action=summary&v=1&bookid=100194 |z An electronic book accessible through the World Wide Web; click for information -CAT |a NCRD |b 20 |c 20040224 -NCO |a I -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST8 |0 HOL |1 FSU60-002178151 |n 8 |a FTaSU |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -LOC8 |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -SYS 002042593 - -FMT BK -LDR 00000nam 2200373Ia 4500 -006 m d -007 cr cnu|||unuuu -008 031127s2003 cau s 000|i eng d -020 |a 0520900987 (electronic bk.) -035 |a (OCoLC)53798432 -0359 |a ALU9406 |b FS -TKR |a (Source)B0011135- 95 -TKR |a (FTaSU)NETLIBY20040302 -OWN |a FS -040 |a N$T |c N$T -05014 |a PS1331 |b .A4 2003eb -08214 |a 818.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24010 |a Correspondence. |k Selections -24510 |a Mark Twain's letters 1876-1880. |n Volume 1, |p 1876 |h [electronic resource] / |c edited by the Mark Twain Project. -250 |a Electronic ed. -260 |a Berkeley, Calif. : |b Published for the University of California Press by the Mark Twain Project of the Bancroft Library, |c 2003. -538 |a Mode of access: World Wide Web. -506 |a Made available through NetLibrary; access may be limited to NetLibrary affiliated libraries. -500 |a Title from ebook title screen. -60010 |a Twain, Mark, |d 1835-1910 |v Correspondence. -650 0 |a Authors, American |y 19th century |v Correspondence. -650 0 |a Humorists, American |y 19th century |v Correspondence. -655 7 |a Electronic books. |2 local -7102 |a Bancroft Library. |b Mark Twain Project. -7102 |a NetLibrary, Inc. -7102 |a NetLibrary, Inc. -8564 |3 Bibliographic record display |u http://www.netLibrary.com/urlapi.asp?action=summary&v=1&bookid=100193 |z An electronic book accessible through the World Wide Web; click for information -CAT |a NCRD |b 20 |c 20040224 -NCO |a I -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST8 |0 HOL |1 FSU60-002178150 |n 8 |a FTaSU |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -LOC8 |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -SYS 002042592 - -FMT BK -LDR 00000nam 2200361Ia 4500 -006 m d -007 cr cnu|||unuuu -008 031202s2003 cau s 000|i eng d -020 |a 0520901010 (electronic bk.) -035 |a (OCoLC)53817958 -0359 |a ALU9412 |b FS -TKR |a (Source)B0011135- 101 -TKR |a (FTaSU)NETLIBY20040302 -OWN |a FS -040 |a N$T |c N$T -05014 |a PS1331 |b .A4 2003eb -08214 |a 818.409 |2 22 -1001 |a Twain, Mark, |d 1835-1910. -24010 |a Correspondence. |k Selections -24510 |a Mark Twain's letters 1876-1880. |n Volume 4, |p 1879 |h [electronic resource] / |c edited by the Mark Twain Project. -250 |a Electronic ed. -260 |a Berkeley, Calif. : |b Published for the University of California Press by the Mark Twain Project of the Bancroft Library, |c 2003. -538 |a Mode of access: World Wide Web. -506 |a Made available through NetLibrary; access may be limited to NetLibrary affiliated libraries. -500 |a Title from ebook title screen. -60010 |a Twain, Mark, |d 1835-1910 |v Correspondence. -650 0 |a Authors, American |y 19th century |v Correspondence. -650 0 |a Humorists, American |y 19th century |v Correspondence. -655 7 |a Electronic books. |2 local -7102 |a Bancroft Library. |b Mark Twain Project. -7102 |a NetLibrary, Inc. -8564 |3 Bibliographic record display |u http://www.netLibrary.com/urlapi.asp?action=summary&v=1&bookid=100196 |z An electronic book accessible through the World Wide Web; click for information -CAT |a NCRD |b 20 |c 20040224 -NCO |a I -CAT |a CONV |b 20 |c 20050401 |l FSU01 |h -PST8 |0 HOL |1 FSU60-002178156 |n 8 |a FTaSU |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -LOC8 |b FSUER |c ERES |4 Electronic Resource |5 See Link to Connect -SYS 002042598 - - - - Florida State University - Library Staff diff --git a/trunk/test/batch.xml b/trunk/test/batch.xml deleted file mode 100644 index b09773a..0000000 --- a/trunk/test/batch.xml +++ /dev/null @@ -1,157 +0,0 @@ - - - - - 00925njm 22002777a 4500 - 5637241 - DLC - 19920826084036.0 - sdubumennmplu - 910926s1957 nyuuun eng - - 91758335 - - - 1259 - Atlantic - - - DLC - DLC - - - Atlantic 1259 - - - The Great Ray Charles - [sound recording]. - - - New York, N.Y. : - Atlantic, - [1957?] - - - 1 sound disc : - analog, 33 1/3 rpm ; - 12 in. - - - Ray Charles, piano & celeste. - - - The Ray -- My melancholy baby -- Black coffee -- There's no you -- Doodlin' -- Sweet sixteen bars -- I surrender dear -- Undecided. - - - Brief record. - - - Jazz - 1951-1960. - - - Piano with jazz ensemble. - - - Charles, Ray, - 1930- - prf - - - - 01832cmma 2200349 a 4500 - 12149120 - 20001005175443.0 - cr ||| - 000407m19949999dcu g m eng d - - 0 - ibc - copycat - 1 - ncip - 20 - y-gencompf - - - undetermined - web preservation project (wpp) - - - vb07 (stars done) 08-19-00 to HLCD lk00; AA3s lk29 received for subject Aug 25, 2000; to DEWEY 08-25-00; aa11 08-28-00 - - - 00530046 - - - (OCoLC)ocm44279786 - - - IEU - IEU - N@F - DLC - - - lccopycat - - - n-us-dc - n-us--- - - - F204.W5 - - - 975.3 - 13 - - - The White House - [computer file]. - - - Computer data. - - - Washington, D.C. : - White House Web Team, - 1994- - - - Mode of access: Internet. - - - Title from home page as viewed on Aug. 19, 2000. - - - Features the White House. Highlights the Executive Office of the President, which includes senior policy advisors and offices responsible for the President's correspondence and communications, the Office of the Vice President, and the Office of the First Lady. Posts contact information via mailing address, telephone and fax numbers, and e-mail. Contains the Interactive Citizens' Handbook with information on health, travel and tourism, education and training, and housing. Provides a tour and the history of the White House. Links to White House for Kids. - - - White House (Washington, D.C.) - - - United States. - Executive Office of the President. - - - United States. - Office of the Vice President. - - - United States. - Office of the First Lady. - - - White House Web Team. - - - http://www.whitehouse.gov - - - http://lcweb.loc.gov/staff/wpp/whitehouse.html - Web site archive - - - diff --git a/trunk/test/marc.dat b/trunk/test/marc.dat deleted file mode 100644 index 9c52c7d..0000000 --- a/trunk/test/marc.dat +++ /dev/null @@ -1 +0,0 @@ -01060cam 22002894a 45000010009000000050017000090080041000260350021000679060045000889250044001339550160001779550053003370100017003900200015004070400018004220420008004400500023004480820014004711000025004852450088005102600044005983000027006425040041006696500026007107000026007369850008007621177850420040816084925.0990802s2000 mau b 001 0 eng  a(DLC) 99043581 a0bvipcorignewd1eocipf19gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc05 to ja00 08-02-99; jf05 to subj. 08/02/99; jf11 to sl 08-03-99; jf25 08-05-99 to ddc; bk rec'd, to CIP ver. ps07 01-07-00; CIP ver jf05 to sl 04/05/00 aADDED COPIES: another copy to ASCD ps15 01-12-00 a 99043581  a020161622X aDLCcDLCdDLC apcc00aQA76.6b.H857 200000a005.12211 aHunt, Andrew,d1964-14aThe pragmatic programmer :bfrom journeyman to master /cAndrew Hunt, David Thomas. aReading, Mass :bAddison-Wesley,c2000. axxiv, 321 p. ;c24 cm. aIncludes bibliographical references. 0aComputer programming.1 aThomas, David,d1956- eGAP00979cam 2200241 a 45000010009000000050017000090080041000269060045000679250042001129550206001540100017003600200015003770400018003920500026004100820017004361000016004532450037004692500012005062600051005183000078005695040051006476500039006981251588220020923085341.0010827s2001 cc a b 001 0 eng  a7bcbccorigcopd2encipf20gy-gencatlg0 aacquireb2 shelf copyxpolicy default apb07 2001-08-27 to ASCDajf00 2001-08-31ajf00 2001-09-05;cjf03 2001-10-16 to Subj.djf01 2001-10-25 to slejf12 2001-11-23; jf12 to Dewey 11-23-01aaa20 2001-12-07; copy 2 added jf16 to BCCD 09-23-02 a 2001276084 a0596000855 aDLCcDLCdDLC00aQA76.73.P98bL88 200100a005.13/32211 aLutz, Mark.10aProgramming Python /cMark Lutz. a2nd ed. aBeijing :aSebastopol, CA :bO'Reilly,cc2001. axxxvii, 1255 p. :bill. ;c24 cm. +e1 computer optical disc (4 3/4 in.). aIncludes bibliographical references and index. 0aPython (Computer program language)00887cam 2200253 a 45000010009000000050017000090080041000269060045000679250044001129550151001560100017003070200015003240400018003390500027003570820017003841000016004012450051004172500012004682600040004803000035005205040020005556500039005757000019006141361051220040714135238.0040601s2004 caua 001 0 eng  a7bcbccorigcopd2encipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apv17 2004-06-01 Preprocessor to ASCDajf00 2004-06-03;cjf03 2004-06-24 to Subj.djf09 2004-06-28 to slejf12 2004-07-01 to Deweyaaa25 2004-07-14 a 2004273129 a0596002815 aDLCcDLCdDLC00aQA76.73.P98bL877 200400a005.13/32221 aLutz, Mark.10aLearning Python /cMark Lutz and David Ascher. a2nd ed. aSebastopol, CA :bO'Reilly,cc2004. axxvi, 591 p. :bill. ;c24 cm. aIncludes index. 0aPython (Computer program language)1 aAscher, David.01038cam 2200289 a 45000010009000000050017000090080041000269060045000679250042001129550167001540100017003210150015003380200015003530350023003680400023003910420014004140500026004280820017004542450065004712600039005363000027005755000048006025000020006506500039006707000020007097000019007291306994220030606071827.0030127s2002 cau 001 0 eng  a7bcbcccopycatd2encipf20gy-gencatlg0 aacquireb2 shelf copyxpolicy default aps04 2003-01-27 to ASCDajf00 2003-01-30cjf05 2003-01-30 to subj.djf09 2003-01-30 to slejf12 2003-02-03 to Deweyaaa20 2003-03-10ajg07 2003-06-06 copy 2 added a 2003268354 aGBA2-Y6761 a0596001673 a(OCoLC)ocm49044543 aUKMcUKMdCUSdDLC alccopycat00aQA76.73.P98bP95 200200a005.13/322100aPython cookbook /cedited by Alex Martelli and David Ascher. aSebastopol, CA :bO'Reilly,c2002. axxix, 574 p. ;c24 cm. a"Recipes from the Python community"--Cover. aIncludes index. 0aPython (Computer program language)1 aMartelli, Alex.1 aAscher, David.00759nam 22002295a 45000010009000000050017000090080041000260350022000679060045000899250044001349550020001780100017001980200015002150400013002300420008002431000021002512450068002722600084003402630009004243000012004339630084004451312796220030318153335.0030318s2003 inu 000 0 eng  a(DLC) 2003104024 a0bibccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2003-03-18 a 2003104024 a1592000738 aDLCcDLC apcc1 aDawson, Michael.10aPython programming for the absolute beginner /cMichael Dawson. aIndianapolis, IN :bPremier Press Inc., a division of Course Technology,c2003. a0306 ap.ccm. aMargaret Bauer ; phone (812) 273-0561 ; fax null email margaret_bauer@yahoo.com01304cam 22002894a 45000010009000000050017000090080041000269060045000679250044001129550280001560100017004360200015004530400018004680420008004860500024004940820017005181000049005352450150005842460030007342600053007643000036008175040064008536500026009176500023009437000021009667000027009871256551420020718085037.0011016s2002 njua b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2001-10-16 to ASCD;cjf03 2001-10-17 to Subj.djf01 2001-10-25 to slejf25 2001-10-25 to Deweyaaa20 2001-10-26aps16 2002-01-11 bk rec'd, to CIP ver.ajf00 2002-01-16fjf04 2002-01-18 to S.L.gjf12 2002-01-18 to bccdajf00 2002-03-26; copy 2 added jf16 to BCCD 07-18-02 a 2001055410 a0130410659 aDLCcDLCdDLC apcc00aQA76.625b.T48 200200a005.2/762211 aThiruvathukal, George K.q(George Kuriakose)10aWeb programming :btechniques for integrating Python, Linux, Apache, and MySQL /cGeorge K. Thiruvathukal, John P. Shafaee, Thomas W. Christoper.14aWeb programming in Python aUpper Saddle River, NJ :bPrentice Hall,cc2002. axviii, 745 p. :bill. ;c24 cm. aIncludes bibliographical references (p. 723-725) and index. 0aInternet programming. 0aWeb sitesxDesign.1 aShafaee, John P.1 aChristopher, Thomas W.01023cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550168001560100017003240200035003410400018003760420008003940500026004020820016004281000029004442450067004732500012005402600051005523000035006035000020006386500039006586300021006977000027007181187737320010105091546.0991228s2000 cc a 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc01 12-28-99; jf03 01-04-00 ; jf11 to sl 1-4-00; jf12 to Dewey 01-06-00; aa05 01-10-00; CIP ver. pv08 to BCCD 05-01-00; copy 2 added jf16 to BCCD 01-05-01 a 99085714  a1565926218 (pbk. : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P98bH36 200000a005.2652211 aHammond, Markq(Mark J.)10aPython programming on Win32 /cMark Hammond and Andy Robinson. a1st ed. aBeijing ;aSebastopol, CA :bO'Reilly,cc2000. axvii, 652 p. :bill. ;c24 cm. aIncludes index. 0aPython (Computer program language)00aMicrosoft Win32.1 aRobinson, Andy,d1967-00867cam 22002538a 45000010009000000050017000090080041000269060045000679250044001129550127001560100017002830200015003000400013003150420008003280500026003360820017003621000019003792450080003982600047004782630009005253000011005346500039005459630029005841343237720031222144424.0031211s2003 oru 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc27 2003-12-11 RUSH to ASCDcjf07 2003-12-17 to subjectdjf09 2003-12-17 to slejp05 2003-12-18 to Deweyaaa20 2003-12-22 a 2003064366 a1887902996 aDLCcDLC apcc00aQA76.73.P98bZ45 200300a005.13/32221 aZelle, John M.10aPython programming :ban introduction to computer science /cJohn M. Zelle. aWilsonville, OR :bFranklin, Beedlec2003. a0312 ap. cm. 0aPython (Computer program language) aTom Sumner, 503-682-766801008cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550171001560100017003270200015003440400018003590420008003770500026003850820018004111000026004292450065004552600046005203000034005665000020006006500039006206500026006596500023006857000022007081222727720030509151148.0001109s2002 inua 001 0 eng  a7bcbccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 11-09-00apv11 2002-04-12 2 copies to ASCDajf00 2002-04-18;cjf03 2002-08-20 to Subj.djf09 2002-08-21 to slejf25 2002-09-10 2 copies to Deweyaaa05 2002-10-04 a 00110884  a0735710902 aDLCcDLCdDLC apcc00aQA76.73.P98bH65 200200a005.2/7622211 aHolden, Steve,d1950-10aPython Web programming /cSteve Holden [with David Beazley]. aIndianapolis, Ind. :bNew Riders,cc2002. axxi, 691 p. :bill. ;c23 cm. aIncludes index. 0aPython (Computer program language) 0aInternet programming. 0aWeb sitesxDesign.1 aBeazley, David M.01049cam 22002534a 45000010009000000050017000090080041000269060045000679250044001129550148001560100017003040200015003210400018003360420008003540500026003620820017003881000018004052450047004232600052004703000066005225040051005885380117006396500039007561216916820010522141328.0000911s2000 nju b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc16 09-11-00; jf02 09-12-00 ; jf11 to sl 9-12-00; jf12 to Dewey 09-14-00; aa05 09-14-00; CIP Ver. jf02 05-11-01; jf12 to BCCD 05-22-01 a 00047856  a0130260363 aDLCcDLCdDLC apcc00aQA76.73.P98bC48 200100a005.13/32211 aChun, Wesley.10aCore python programming /cWesley J. Chun. aUpper Saddle River, NJ :bPrentice Hall,c2001. axxix, 771 p. ;c24 cm. +e1 computer optical disc (4 3/4 in.) aIncludes bibliographical references and index. aSystem requirements for accompanying computer disc: Windows 9x/Me/NT/2000; a Web brouser; Macintosh; UNIX/Linux. 0aPython (Computer program language)00948cam 22002654a 45000010009000000050017000090080041000269060045000679250044001129550133001560100017002890200015003060400018003210420008003390500026003470820017003731000021003902450055004112600038004663000036005045040051005406500039005916500036006306300016006661213218820010817152505.0000804s2000 ctua b 001 0 eng  a7bcbccorignewd2encipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pb05 08-04-00;jfoo 08-08-00;cjf03 2001-07-18 to Subj.djf02 2001-07-19 to slejf25 2001-07-31 to Deweyaaa20 2001-08-17 a 00697831  a1884777813 aDLCcDLCdDLC apcc00aQA76.73.P98bG73 200000a005.13/32211 aGrayson, John E.10aPython and Tkinter programming /cJohn E. Grayson. aGreenwich, CT :bManning,cc2000. axxiii, 658 p. :bill. ;c24 cm. aIncludes bibliographical references and index. 0aPython (Computer program language) 0aTcl (Computer program language)00aTk toolkit.00767nam 22002295a 45000010009000000050017000090080041000260350022000679060045000899250044001349550020001780100017001980200015002150400013002300420008002432450081002512600079003322630009004113000012004204400021004329630084004531337832520031020153106.0031020s2003 inu 000 0 eng  a(DLC) 2003114351 a0bibccorignewd2eepcnf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc10 2003-10-20 a 2003114351 a1592000770 aDLCcDLC apcc00aGame programming with Python, Lua, and Ruby /c[edited by] Estelle Manticas. aIndianapolis, IN :bPremier Press, a Division of Course Technology,c2003. a0311 ap.ccm. aGame development aMargaret Bauer ; phone (812) 273-0561 ; fax null email margaret_bauer@yahoo.com01121cam 22002414a 45000010009000000050017000090080041000269060045000679250044001129550362001560100017005180200015005350400018005500420008005680500026005760820017006021000027006192450058006462600052007043000033007565040051007896500039008401256552920030227150222.0011016s2002 njua b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc16 2001-10-16 to ASCD;cjf05 2001-10-17 to subj.djf04 2001-10-17 to S.L.ejf25 2001-10-25 to Deweyaaa20 2001-10-26aps11 2002-01-15 bk rec'd, to CIP ver.fjp07 2002-02-13ajp00 2002-03-08gjp85 2002-03-08 to BCCD; copy 2 added jf16 to BCCD 07-18-02ajf00 2003-01-29ajf07 2003-02-27 somehow copy 1 got back into the CIP ver. stream (handed to acting TL) a 2001055411 a0130409561 aDLCcDLCdDLC apcc00aQA76.73.P98bC47 200200a005.13/32211 aChristopher, Thomas W.10aPython programming patterns /cThomas W. Christopher. aUpper Saddle River, NJ :bPrentice Hall,c2002. axix 538 p. :bill. ;c24 cm. aIncludes bibliographical references and index. 0aPython (Computer program language)01062cam 22002778a 45000010009000000050017000090080041000269060045000679250044001129550120001560100017002760200028002930400013003210420008003340500026003420820018003681000024003862450134004102600041005442630009005853000011005946500039006056500037006446500039006819630064007201275256420020426115101.0020424s2002 mau 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc21 2002-04-24 to ASCDcjf05 2002-04-25 to subj.djf09 2002-04-25 to slejf25 2002-04-26 to Deweyaaa20 2002-04-26 a 2002066565 a0201616165 (alk. paper) aDLCcDLC apcc00aQA76.73.P98bH54 200200a005.2/7622211 aHightower, Richard.10aPython programming with the Java class libraries :ba tutorial for building Web and Enterprise applications /cRichard Hightower. aBoston, MA :bAddison-Wesley,c2002. a0207 ap. cm. 0aPython (Computer program language) 0aJava (Computer program language) 0aApplication softwarexDevelopment. aMarilyn Rash, 617-848-6509; email: timothy.nicholls@awl.com01012cam 22002294a 45000010009000000050017000090080041000269060045000679250044001129550192001560100017003480200028003650400018003930420008004110500026004190820017004451000017004622450151004792600042006303000071006726500039007431216723920010608101527.0000908s2001 mau b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ato ASCD pc21 09-08-00;jf05 (desc) 09/08/00 ; jf11 to sl 9-11-00; jf12 to Dewey 09-12-00;aa03 9-12-00;CIP ver jf05 to sl 01/11/01; jf12 to BCCD 02-01-01; copy 2 added jf16 to BCCD 04-24-01 a 00046921  a0201709384 (alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P48bG38 200100a005.13/32211 aGauld, Alan.10aLearn to program using Python :ba tutorial for hobbyists, self-starters, and all who want to learn the art of computer programming /cAlan Gauld. aReading, MA :bAddison-Wesley,c2001. axii, 270 p. ;c24 cm.e+ 1 computer laser optical disc (4 3/4 in.) 0aPython (Computer program language)00935cam 22002534a 450000100070000000500170000700800410002403500210006590600450008692500440013195501480017501000170032302000220034004000180036204200080038005000260038808200170041410000160043124500610044726000390050830000750054765000390062270000200066120525620000830103214.0990629s2000 caua 001 0 eng  9(DLC) 99065006 a7bcbccorignewd2eopcnf19gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apn08/e-pcn 06-29-99; to ASCD pb02 06-10-00; jf00 06-13-00; jf03 08-17-00 ; jf11 to sl 8-22-00; jf25 2 copies to Dewey 08-24-00; aa19 08-30-2000 a 99065006  a0761523340 (pbk.) aDLCcDLCdDLC apcc00aQA76.73.P98bA48 199900a005.13/32211 aAltom, Tim.10aProgramming with Python /cTim Altom with Mitch Chapman. aRocklin, CA :bPrima Tech,cc1999. axxxiv, 372 p. :bill. ;c24 cm. +e1 computer optical disc (4 3/4 in.) 0aPython (Computer program language)1 aChapman, Mitch.01214cam 22002774a 45000010009000000050017000090080041000269060045000679250044001129550202001560100017003580200047003750400018004220420008004400500024004480820017004721000019004892450079005082600051005873000058006386500026006966500048007226500040007706500049008108560077008591328439520040226131230.0030722s2004 maua 001 0 eng  a7bcbccorignewd1eecipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default ajf05 2003-07-22cjf05 2003-07-22 to subj.djf09 2003-07-22 to slejf12 2003-07-23 to Deweyaaa20 2003-07-29ajf00 2004-01-29fjf07 2004-02-02ejf12 2004-02-03 to BCCDajf16 2004-02-26 copy2 to BCCD a 2003016400 a1584502681 (Pbk. with CD-ROM : alk. paper) aDLCcDLCdDLC apcc00aQA76.625b.J66 200400a005.2/762221 aJones, M. Tim.10aBSD Sockets programming from a multi-language perspective /cM. Tim Jones. aHingham, Mass. :bCharles River Media,cc2004. axix, 444 p. :bill. ;c24 cm. +e1 CD-ROM (4 3/4 in.) 0aInternet programming. 0aComputer networksxDesign and construction. 0aInternetworking (Telecommunication) 0aProgramming languages (Electronic computers)413Table of contentsuhttp://www.loc.gov/catdir/toc/ecip047/2003016400.html01113cam 2200277 a 4500001000800000005001700008008004100025035002100066906004500087955011600132010001700248020003300265040001800298050002300316082001600339245009800355260004600453300003300499440004900532504006400581650005100645650003600696650002300732700001800755991006200773159816719981112152315.2940902s1995 maua b 001 0 eng  9(DLC) 94034264 a7bcbccorignewd1eocipf19gy-gencatlg apc18 to ja00 09-02-94; jf06 to subj 09-06-94; jf11 to sl 09-06-94; jf12 09-06-94 to ddc; CIP ver. jc03 11-23-94 a 94034264  a0201633612 (acid-free paper) aDLCcDLCdDLC00aQA76.64b.D47 199500a005.1/222000aDesign patterns :belements of reusable object-oriented software /cErich Gamma ... [et al.]. aReading, Mass. :bAddison-Wesley,cc1995. axv, 395 p. :bill. ;c25 cm. 0aAddison-Wesley professional computing series aIncludes bibliographical references (p. 375-381) and index. 0aObject-oriented programming (Computer science) 0aComputer softwarexReusability. 0aSoftware patterns.1 aGamma, Erich. bc-GenCollhQA76.64i.D47 1995p00011185514tCopy 1wBOOKS01233cam 2200289 a 45000010009000000050017000090080041000269060045000679250044001129550226001560100017003820200034003990400013004330500024004460820014004702450065004842460015005492500012005642600043005763000021006195000111006405040068007516500026008196500025008457000022008707000051008921237004420020812080859.0010405s2001 mau b 001 0 eng  a7bcbccorignewd1eocipf20gy-gencatlg0 aacquireb2 shelf copiesxpolicy default apc20 to ja00 04-05-01; jp07 04-11-01 sent to sl;jp85 to Dewey 04-19-01; aa20 04-20-01aps13 2001-08-16 bk rec'd, to CIP ver.fjf07 2001-08-20ajf00 2001-08-20gjf12 2001-08-23 to bccdajf01 2001-09-13 copy 2 added to BCCD a 2001031277 a0262032937 (hc. : alk. paper) aDLCcDLC00aQA76.6b.I5858 200100a005.122100aIntroduction to algorithms /cThomas H. Cormen ... [et al.].30aAlgorithms a2nd ed. aCambridge, Mass. :bMIT Press,cc2001. axxi, 1180 p. cm. aRev. ed. of: Introduction to algorithms / Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest. c1990. aIncludes bibliographical references (p. [1127]-1130) and index. 0aComputer programming. 0aComputer algorithms.1 aCormen, Thomas H.1 aCormen, Thomas H.tIntroduction to algorithms.01009pam 2200265 a 4500001000800000005001700008008004100025035002100066906004500087955011600132010001700248020002200265040001800287050002600305082001700331100001800348245003700366260005300403300003500456440005200491500002700543504006400570650004400634991006500678303540919960425075058.2951006s1996 njua b 001 0 eng  9(DLC) 95045017 a7bcbccorignewd1eocipf19gy-gencatlg apc17 RUSH to ja00 10-06-95;jf05 to subj. 10/06/95; jf04 to S.L. 10-06-95; jf14 10-10-95; CIP ver. jk14 04-22-96 a 95045017  a0133708756 (pbk.) aDLCcDLCdDLC00aQA76.73.C28bG69 199600a005.13/32201 aGraham, Paul.10aANSI Common Lisp /cPaul Graham. aEnglewood Cliffs, N.J. :bPrentice Hall,cc1996. axiii, 432 p. :bill. ;c23 cm. 0aPrentice Hall series in artificial intelligence a"An Alan R. Apt book." aIncludes bibliographical references (p. 401-414) and index. 0aCOMMON LISP (Computer program language) bc-GenCollhQA76.73.C28iG69 1996p00034751468tCopy 1wBOOKS \ No newline at end of file diff --git a/trunk/test/one.dat b/trunk/test/one.dat deleted file mode 100644 index a43cf54..0000000 --- a/trunk/test/one.dat +++ /dev/null @@ -1 +0,0 @@ -00755cam 22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500fol05731351 IMchF20000613133448.0000107s2000 nyua 001 0 eng  a 00020737  a0471383147 (paper/cd-rom : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P22bM33 200000a005.13/32211 aMartinsson, Tobias,d1976-10aActivePerl with ASP and ADO /cTobias Martinsson. aNew York :bJohn Wiley & Sons,c2000. axxi, 289 p. :bill. ;c23 cm. +e1 computer laser disc (4 3/4 in.) a"Wiley Computer Publishing." 0aPerl (Computer program language)00aActive server pages.00aActiveX. \ No newline at end of file diff --git a/trunk/test/test.dat b/trunk/test/test.dat deleted file mode 100644 index 68d6dad..0000000 --- a/trunk/test/test.dat +++ /dev/null @@ -1 +0,0 @@ -00755cam 22002414a 4500001001300000003000600013005001700019008004100036010001700077020004300094040001800137042000800155050002600163082001700189100003100206245005400237260004200291300007200333500003300405650003700438630002500475630001300500fol05731351 IMchF20000613133448.0000107s2000 nyua 001 0 eng  a 00020737  a0471383147 (paper/cd-rom : alk. paper) aDLCcDLCdDLC apcc00aQA76.73.P22bM33 200000a005.13/32211 aMartinsson, Tobias,d1976-10aActivePerl with ASP and ADO /cTobias Martinsson. aNew York :bJohn Wiley & Sons,c2000. axxi, 289 p. :bill. ;c23 cm. +e1 computer laser disc (4 3/4 in.) a"Wiley Computer Publishing." 0aPerl (Computer program language)00aActive server pages.00aActiveX.00647pam 2200241 a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001500161100002600176245006700202260003800269263000900307300001100316650003700327650002500364700001600389fol05754809 IMchF20000601115601.0000203s2000 mau 001 0 eng  a 00022023  a1565926994 aDLCcDLCdDLC apcc00aQA76.73.P22bD47 200000a005.742211 aDescartes, Alligator.10aProgramming the Perl DBI /cAlligator Descartes and Tim Bunce. aCmabridge, MA :bO'Reilly,c2000. a1111 ap. cm. 0aPerl (Computer program language) 0aDatabase management.1 aBunce, Tim.00605cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077040001800094042000800112050002700120082001700147100002100164245005500185260004500240300002600285504005100311650003700362fol05843555 IMchF20000525142739.0000318s1999 cau b 001 0 eng  a 00501349  aDLCcDLCdDLC apcc00aQA76.73.P22bB763 199900a005.13/32211 aBrown, Martin C.10aPerl :bprogrammer's reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axix, 380 p. ;c22 cm. aIncludes bibliographical references and index. 0aPerl (Computer program language)00579cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002700135082001700162100002100179245005500200260004500255300003600300650003700336fol05843579 IMchF20000525142716.0000318s1999 caua 001 0 eng  a 00502116  a0072120002 aDLCcDLCdDLC apcc00aQA76.73.P22bB762 199900a005.13/32211 aBrown, Martin C.10aPerl :bthe complete reference /cMartin C. Brown. aBerkeley :bOsborne/McGraw-Hill,cc1999. axxxv, 1179 p. :bill. ;c24 cm. 0aPerl (Computer program language)00801nam 22002778a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001800156100002000174245008800194250003200282260004100314263000900355300001100364650003700375650003600412650002600448700002500474700002400499fol05848297 IMchF20000524125727.0000518s2000 mau 001 0 eng  a 00041664  a1565924193 aDLCcDLC apcc00aQA76.73.P22bG84 200000a005.2/7622211 aGuelich, Scott.10aCGI programming with Perl /cScott Guelich, Shishir Gundavaram & Gunther Birznieks. a2nd ed., expanded & updated aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language) 0aCGI (Computer network protocol) 0aInternet programming.1 aGundavaram, Shishir.1 aBirznieks, Gunther.00665nam 22002298a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002700130082001700157111005200174245008600226250001200312260004100324263000900365300001100374650005000385fol05865950 IMchF20000615103017.0000612s2000 mau 100 0 eng  a 00055759  a0596000138 aDLCcDLC apcc00aQA76.73.P22bP475 200000a005.13/32212 aPerl Conference 4.0d(2000 :cMonterey, Calif.)10aProceedings of the Perl Conference 4.0 :bJuly 17-20, 2000, Monterey, California. a1st ed. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)vCongresses.00579nam 22002178a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100002800173245006200201260004100263263000900304300001100313650003700324fol05865956 IMchF20000615102948.0000612s2000 mau 000 0 eng  a 00055770  a1565926099 aDLCcDLC apcc00aQA76.73.P22bB43 200000a005.13/32211 aBlank-Edelman, David N.10aPerl for system administration /cDavid N. Blank-Edelman. aCambridge, Mass. :bO'Reilly,c2000. a0006 ap. cm. 0aPerl (Computer program language)00661nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001300109042000800122050002600130082001700156100001700173245006700190250001200257260004100269263000900310300001100319650003700330700002300367700001700390fol05865967 IMchF20000615102611.0000614s2000 mau 000 0 eng  a 00055799  a0596000278 aDLCcDLC apcc00aQA76.73.P22bW35 200000a005.13/32211 aWall, Larry.10aProgramming Perl /cLarry Wall, Tom Christiansen & Jon Orwant. a3rd ed. aCambridge, Mass. :bO'Reilly,c2000. a0007 ap. cm. 0aPerl (Computer program language)1 aChristiansen, Tom.1 aOrwant, Jon.00603cam 22002054a 4500001001300000003000600013005001700019008004100036010001700077020001500094040001800109042000800127050002600135082001700161100003200178245006000210260005700270300003300327650003700360fol05872355 IMchF20000706095105.0000315s1999 njua 001 0 eng  a 00500678  a013020868X aDLCcDLCdDLC apcc00aQA76.73.P22bL69 199900a005.13/32211 aLowe, Vincentq(Vincent D.)10aPerl programmer's interactive workbook /cVincent Lowe. aUpper Saddle River, NJ :bPrentice Hall PTP,cc1999. axx, 633 p. :bill. ;c23 cm. 0aPerl (Computer program language)00696nam 22002538a 4500001001300000003000600013005001700019008004100036010001700077020002800094040001300122042000800135050002600143082001700169100002600186245004400212260005100256263000900307300001100316500002000327650003700347650001700384650004100401fol05882032 IMchF20000707091904.0000630s2000 cau 001 0 eng  a 00058174  a0764547291 (alk. paper) aDLCcDLC apcc00aQA76.73.P22bF64 200000a005.13/32212 aFoster-Johnson, Eric.10aCross-platform Perl /cEric F. Johnson. aFoster City, CA :bIDG Books Worldwide,c2000. a0009 ap. cm. aIncludes index. 0aPerl (Computer program language) 0aWeb servers. 0aCross-platform software development. \ No newline at end of file diff --git a/trunk/test/test_marc8.txt b/trunk/test/test_marc8.txt deleted file mode 100644 index d656f3f..0000000 --- a/trunk/test/test_marc8.txt +++ /dev/null @@ -1,1514 +0,0 @@ -(3YhOI,(B (3eMeO(B. -(3cja(B (3SbWJ(B (3GdedcjI(B (3aj(B (3eUQ?(B : -(3GdWHYI(B 1. -(3GdbGgQI(B : -$1!S+!#!'`X!_s(B. -$1!Os!0!!#!!A3'44(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!!!!m(B $1i$N(B $1!X$-SD(B $1!`;!0$!\g(B / -$1!D&!0a(B : -$1!X$-SD(B $1!`;!0$!\g(B, -$1!:g!D&(B $1!1:!0m(B, -$1!X$-SD(B $1!`;!0$!\g(B, -$1i%$i%.i%ji%9(B $1!BX!:`!5=(B : -$1!D&!0a(B : -$1!Tk!Xl(B $1!Tk!BX!:`(B $1!Y4!!L$(B $1!=>(B, -$1!Bk!0d(B $1i$Di$Ri$K(B $1i$+i$Xi$ii$:(B : -$1!WN!JH(B. -$1!D&!0a(B : -$1!X$-SD(B $1!`;!0$!\g(B, -$1!0-!L,(B $1i$N(B $1!X\(B : -$1!D&!0a(B : -$1!05!L$(B $1!:[!0!(B, -$1!X$-SD(B $1!`;!0$!\g(B, -$1!GzK\[(B $1!0!!9'(B, -$1!X$-SD(B $1!`;!0$!\g(B, -$1!TX!U}i!&i%7i%'i%$i%/i%9i%Ti%"i!&i%(i%ji%*i%Ci%H(B / -$1!Os(B 1$1!JH(B. -$1!D&!0a(B : -$1!D-!;S(B $1!TX!U}(B, -$1!]y'O@(B $1-1w!1W(B, -$1!D-!;S(B $1!TX!U}(B, -$1!15!0;!^U(B $1!_0!5=(B, -$1!X$-SD(B $1!`;!0$!\g(B $1!Y$(B : -$1!D&!0a(B : -$1!KG!0s(B $1!X\!0d!Y$(B $1!5+!CU(B ; -$1!X$-SD(B $1!`;!0$!\g(B, -(3THjdj,(B (3YHO(B (3GdQMef(B. -(3GdcdeI(B (3GdYQHjI(B : -[Saudi Arabia] : -(3cJGH(B (3GdTQb(B (3GdGhSW(B -(3ecGfI(B (3GdEHGVjI(B (3aj(B (3GdMVGQI(B (3GdESdGejI(B / -(3GdWHYI(B 1. -[(3GdbGgQI(B] : -$1!X$-SD(B $1!`;!0$!\g(B, -$1!:m!Ci(B $1!X$-SD(B $1!`;!0$!\g(B $1!3"!_A(B. -$1!WN!JH(B. -$1!D&!0a(B : -$1!X$-SD(B $1!`;!0$!\g(B $1!3"!_A(B. -$1!<7!V3(B $1!R;!0s!:M(B, -$1!;%i$7i$$(B $1'Rt(B : -$1!D&!0a(B : -$1!X$-SD(B $1!`;!0$!\g(B, -$1!X$-SD(B $1!`;!0$!\g(B, -$1!(B $1!RA!Tk(B $1'5+'CU(B ; -(3aQRGO,(B (3YHO(B (3GdMSjf(B. -(3GdefgL(B (3aj(B (3JGQjN(B (3GdCOH(B (3GdYQHj(B : -Tehran : -$1!8x(B $1!D3!Bu(B. -$1!G[!`[(B $1!C\!1W(B / -Kuala Lumpur : -$1!08!WX(B $1!3K!JH(B $1!Pn!3W(B ; -$1!:M!Cg(B, -$1!C{!<5(B $1!Bs'X<(B / -[Singapore] : -$1!:M!Cg(B, -(3LGFRI(B (3SdWGf(B (3GdYhjS(B (3GdKbGajI(B : -(3GdTGQbI(B : -(3efThQGJ(B (3GJMGO(B (3cJGH(B (3hGOHGA(B (3GdGeGQGJ(B -(3eDSSI(B (3SdWGf(B (3Hf(B (3Ydj(B (3GdYhjS(B (3GdKbGajI(B. -(3GJMGO(B (3cJGH(B (3hCOHGA(B (3GdEeGQGJ(B. -$1!By'4U!#!!F\!#!!7u!#!!1?!JU!#!'^i!Pn!#!!5#!#!!3*!#!!35'2f!#!'X}!@z!#!!4x!KH(B : -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -$1!5t(B $1!1a!04(B $1';@'[4(B $1!5w(B $1!0q(B $1!M"(B $1!@&'Rw(B $1'?n!5"(B / -[$1'^L!C%(B] : -$1!5t(B $1!1a!04(B, -$1!04!3((B $1!5@!D$(B $1!MI!9f(B. -$1!4c';2!(B $1!O2'43!;P(B. -$1'=*!X$(B $1'8t!Bo(B $1!T&!G4'4U(B $1!4c';2!.!Hu(B $1'T2(B $1!Na'CZ(B $1'YK!_z(B -$1!Os(B1$1!JH(B. -$1!4I!0a!!#!!7t!CU!`y(B $1!V+!#!!BK!It!#!!\S!CU!#!KN7!ON!#!!Y$!UN!#!!MB!]t!#!!P{!=<(B / -$1!BK!It!#!!\S!CU!#!KN7!ON!#!!Y$!UN!#!!MB!]t!#!!P{!=<(B -$1!7o'2>!#!!7t!CU!`y(B $1!V+!#!!BK!It!#!!\S!CU!#!KN7!ON!#!!Y$!UN!#!!MB!]t!#!!P{!=<(B -$1!Os(B1$1!JH(B. -$1!4I!0a!!#!!7t!CU!`y(B -$1!\l(B $1!F]!O$(B, -$1'`v#Nl(B : -$1!\l(B $1!F]!O$(B $1!`1'EN(B $1'XN'Y$!_A(B -$1!WN!JH(B. -[Singapore] : -1950$1oL(oL}!#!o]OoPpoJ6!#!oVi!#!o\eoIo!#!oR_o]J!#!oU~!#!oVj!#!oT"oOh!#!oW=oQX!#!oVi!#!oQaoIg!#!(B/ -$1oS!oV>!#!o[ZoQ=oT#!#!(B: -$1o\eoIo!#!o].oL}oR_!#!oVi!#!oW'!#!oVloT$(B ; -$1o].oL}oR_!#!oUaoInoS?!#!oJ6o]K!#!oUaoIn(B -$1o\e!#!o]soS[(B. -$1o\eoIo!#!oW=oT%!#!oPJo]?!#!oUaoInoVG(B. -$1!BK!It!#!!?V!G:!#!!C[!0n!#!!XR!Dc(B / -$1!C[!0n!#!!XR!Dc(B -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -"$1!Ci!CU!#!!B=!]t!#!!BK!It!#!!?V!G:!R0!#!!\S!8!!#!!3K!7u!#!!M"!#!i!T!1J!R_!#!!5w!#!!04!?u!#!!M^!;3!#!!XR!CU!#!!7e!C-!#!!C[!0n!#!!0T!4W!Dci!U!#!(B($1!PA!O(B $1!Df!:M(B, -$1!0!'_N(B $1!T5!Tx!`"(B / -[s.l.] : -$1!4l'U<(B $1!1?'4`(B $1!BX'5+(B. -$1!3i!E[!V0(B $1!D-!(B $1!X(B $1';7!1?(B $1'X8'3|(B $1':`'6>(B $1!1?!6-!_A(B -$1!WN!JH(B. -[Singapore] : -$1!Bg(B $1!DG!a)(B. - $1!;I(B $1!0e(B. -$1'R{(B $1K_p!C%(B $1!7z(B $1!6@!G!(B : -$1!;I(B $1!0e(B $1!N%!P.(B $1!;E'Xi(B -$1!WN!JH(B. -Singapore : -$1!=x'CU(B ; -$1!L}(B $1!U1(B. -$1!L}(B $1!U1(B $1!BM!BX'\O(B / -$1!WN!JH(B. -Singapore : -$1!Be!4&!8+(B $1!Be'U<(B $1!1?'2>(B $1'5+'CU(B -$1!Be!4&!8+(B $1!Be'U<(B $1!1?'2>(B $1!1?!6-!_A(B ; -$1'E*(B $1!>0(B, -$1!db(B $1!Be'U<(B $1!BX'8d(B $1'Y$(B $1!5#(B $1!4l'U<(B $1!BX':`(B / -$1!WN!JH(B. -Singapore : -$1!Be!4&!8+(B $1!Be'U<(B $1!1?'2>(B $1!1?!6-!_A(B ; -$1!5t(B $1!GE!<&(B. -$1'9$E7h(B $1!0d!Ky(B / -$1!WN!JH(B. -Singapore : -$1!5t(B $1!GE!<&(B $1!1?!6-(B ; -$1'_#(B $1!0;!_`(B, -$1!Nk!<5(B $1!9%!7y(B $1!6F'E](B $1'If!^v(B : -$1!04K7o(B $1!6F'E-(B $1'Kg!8W(B $1!5w(B $1!BX!4H(B $1!M"'YK'\Q(B -$1!WN!JH(B. -[Singapore] : -$1!T9!87'Qd(B $1!BX!JU'Xm(B / -[$1!T9!87'Qd(B. -$1!T9!87'Qd(B (China). -$1!T9!87'Qd(B (China). -$1!T9!87'Qd(B (China). -$1!04!7o(B $1!5.!0s(B $1!=3!P:(B $1!F*!5=(B $1!7t!Xi(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!(B : -$1!04!9*(B $1!FM!Bo(B $1!9%':`(B $1!04K7o(B $1!;F'BT(B $1!FM!Bo(B $1KN7!ON(B $1!04!=x(B $1'5+'CU(B -$1!\o-HE'3k!Bo(B $1!T&!G4!Bp(B (China) -$1'Kg(B $1!GB!(B $1!Bg!X7(B $1'Xl!`1(B $1!N7!ON(B / -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -$1!A)!P{(B $1!0=(B $1!D((B : -$1'_T!4c(B $1'Yl'Y~(B $1':`!^z(B $1!=3!DC(B 50$1!5t!'CZ(B. -$1!;&!43(B $1!U4!DU(B : -$1'7F!0s(B $1!N#'Y<(B $13BD!S,(B $1!M"(B $1'YK!_z(B -$1!Os(B1$1!JH(B. -$1!F''HW(B : -$1!3'!3((B $1-Fm!O|(B $1KN7!ON(B : -$1!Os(B1$1!JH(B. -$1'^L!Fw(B : -$1!3'!3((B $1!P'!KH(B $1'Y$'5+(B -$1'`N(B $1!1I'U<(B, -$1'\V'7U(B $1!Be!0-'Pp(B : -$1'=*!<5!E(B $1!Pn'Q1(B $1!M"(B $1!KH'Y$(B $1'T2(B $1';1'Zh(B -$1!Os(B1$1!JH(B. -$1'=*!<5(B : -$1'=*!<5(B (China) -$1!?p(B $1!\+(B -$1'V$(B $1!;{!G=(B. -$1!0"(B $1!=3'23(B. -$1'`.(B $1!@m'\D(B. -$1!;e!X$(B $1!5.!Nh!8@(B : -$1!M{!Oe(B $1!7z(B $1!0d(B $1!Nk(B $1!0=(B $1'^U(B -$1!Os(B1$1!JH(B. -$1'I1'_.!(B $1!CU!Pn(B -$1!K3(B $1K7o'QN(B, -$1!Cs(B $1!4&'E7(B. -$1'[4!K}(B $1!Ky!JU(B $1!@,EWF(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!!BX(B $1!N7!ON(B $1!Y$!BX(B; -$1!UZ!F#!1W(B, -$1'V5'(B $1o[loWloT#(B : -$1oT%(B $1o].oWn(B. -$1!F'(B $1!Bw!;x(B. -$1!Gn!2~(B $1!bb!;e(B $1!M"(B $1!S8'=e(B : -$1!@0';B(B $1!=w!<5(B -$1!Os(B2$1!JH(B. -$1'=*!<5(B : -$1'a_'KG(B $1!0=!Bk(B = -$1!=w!<5(B $1!7y'4U(B(China) -$1!=w!<5(B $1!7y'4U(B(China) -$1!4c(B $1'bV'[4(B. -$1!FF'[=(B $1!BA!G4(B $1'Wl!!.!>m(B $1'T2(B $1';1'Zh(B / -$1!Os(B1$1!JH(B. -$1'I&!4c(B : -$1!FH(B $1'I!'D&(B, -$1!0R(B $1'_T(sm(B. -$1'ZO(B $1'Xm!>#(B. -$1!FM!Bo(B $1!BX':`(B $1'Y$!O>(B / -$1!Os(B1$1!JH(B. -$1'I1'_.!!DN!Tx(B : -$1!87!!Y?(B $1!R!(B / -$1!Os(B1$1!JH(B. -$1!^L!C%(B : -$1!4"(B $1!BX!Gb(B, -Confucius. -$1!<:!0/(B $1!C!(B. -$1!4"(B $1!BX!Gb(B, -$1!UW(B $1!G@'\4(B, -$1!Rr!Ih(B $1!7y!!W&(B $1!G6!G%(B $1!M"(B $1!=Q!?b(B, $1'\4!WD(B $1'T2(B $1!@z'Wl(B $1KN7!ON(B / -$1!Os(B1$1!JH(B. -$1!0&!GW!#!FH(B. -$1!123BD(B $1!Ci'X0(B $1!>.!>m(B $1'Y$-J;(B $1!M"(B $1'KG!0s!>4(B $1!R]!;3(B / -$1!Os(B1$1!JH(B. -$1!0&!GW(B : -$1!04K7o(B $1!M"(B $1'KG!0s!>4(B $1'T2(B $1!0d!BX(B $1':`EWF(B $1'5+'CU(B -$1!7y!KH(B $1!1W!>E(B $1'T2(B $1'X)'3|(B $1!B(B, -$1'b^';C(B $1!TP!HG!LG(B, 2004 = -$1!Os(B1$1!JH(B. -$1!4I!0a!.!Hu(B $1!5='Y$(B / -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -"$1)JD!X$(B $1'(B $1'Z"!4)(B $1!3K!JH(B"--P. facing t.p. -$1!:j!0s(B $1!2F!X<(B $1!Z"!B\(B $1!5+!3U(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!4(B $1!<7!O5(B $1'T2(B $1!P'!KH(B = -$1!Os(B1$1!JH(B. -$1!4I!0a!(B / -$1!Os(B1$1!JH(B. -$1'^S!;(B $1!BX!4H(B $1KN7!ON(B $1'5+'CU(B -$1!04K7o(B $1'Yl!;'(B $1!Be'Yx(B / -$1!Os(B1$1!JH(B. -$1!4I!0a!w!FM(B. -$1!a\!59'bV(B $1'4{!5=(B $1'T2(B $1!BX!4H(B $1':`EWF(B $1KN7'X='CZ(B -$1!a\!59'bV!5=(B $1!Be(B $1KN7!ON(B / -$1!a\!59'bV(B $1'4{!5=(B $1'T2(B $1!BX!4H(B $1':`EWF(B $1KN7'X='CZ(B $1'Y$!BX!_A(B -$1!Os(B1$1!JH(B. -$1!=2!5@!.!>m(B $1'T2(B $1'Wl!!_z(B / -$1!Os(B1$1!JH(B. -$1!4I!0a(B : -$1!04!4c(B $1'Yl'Q<(B $1!9%':`(B $1'Yl!BA':`(B $1!4d!8r'bj(B $1';D'F(B, -$1!]>!C!!`y(B $1!5+!O>(B $1!WN!Q[(B / -$1!4I!0a(B $1!Os(B1$1!JH(B. -$1!4I!0a(B : -$1!_#(B $1!;#!>F(B $1!_A(B -$1'D&!4I(B $1!R\!<7'E-(B $1!8(B $1!1?!6-(B $1!Pa'\O(B -$1!Fw(B $1'^='U<(B. -$1!C[(B $1'U<(B. -$1!9%!7q(B $1!'CZ(B . -$1!4c!0a!(B, -$1!Tk!PV(B $1!_"!;6(B $1'Wl!(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1oJ;(B $1oMSoX+(B, -$1oIUoW=(B $1oI!oNnoQ,(B $1oRl(B $1oIDoW?oO/(B $1oX0oWt(B $1oJ(oW?(B $1oUaoIn(B / -$1oS!oV>(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1oYQ(B $1oS/oJ.(B. -OECD $1oJ6oUN(B $1oX)oPz(B $1oInoWI(B $1oVGoYe(B $1oVi(B $1oIooK_oQ,(B $1oS[oV9(B $1oUV(B $1oIZo\e(B $1oUaoIn(B / -$1oS!oV>(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1oJ;(B $1oW=oS](B. -$1o\voW=oQ,(B $1oRl(B $1oW'o[o(B $1oV-(B $1oQZoW/(B $1o\noI?(B $1oQ,oW?(B $1oUaoIn(B / -$1oS!oV>(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1oJ;(B $1oS[oX+(B, -$1oIUoPGoVG(B $1oI{oVk(B $1o\xoRl(B $1oVd(B $1oVSo\e(B $1o\voW=(B $1oInoW?(B $1oQ,oW?(B $1oUaoIn(B / -$1oS!oV>(B $1o[ZoQ=oT#(B : -$1oUaoIn(B $1oQEoIJ(B ; -$1!2?(B $1!1T!E7(B, -$1!2?(B $1!1T!E7(B $1!X4!YJ(B $1!:W!:M(B : -$1!WN!JH(B. -$1(;}!4I!Qd(B $1!Be!k(B $1!A&!88(B $1!M"(B $1!P.!`2(B -$1!Os(B1$1!JH(B. -$1!a)!H$(B : -$1!04!7o(B $1!3(!Kz!bo(B -$1!04!7o(B $1!7o!FM!bo(B -$1!5\(B $1!Hm!Ky(B. -$1!D$(B $1!VF(B $1!T2(B $1!BX!4H(B $1!9%!_z!5y(B / -$1!Os(B2$1!JH(B. -Carle Place, N.Y. : -$1i!T!MO!MHi!U!Pn!3W(B ; -$1!D$(B $1!VF(B, -$1!5t(B $1!@*!0d(B. -$1!Bu!Cd(B $1!a)!H$(B $1!_U!=Y!5=(B (1897-1945) / -$1!a)!H$(B : -$1!Cs(B $1!0w-U-(B. -$1!aq(B $1!?b!>.(B. -$1!3#!;l(B $1!;!!1J(B 50 $1!(B $1'Z=!4)(B $1!3K!JH(B." -$1!\s(B $1!RB(B, -$1!^L'=v(B : -$1!Os(B1$1!JH(B. -$1!a)!H$(B : -$1!04!7o(B $1!3(!Kz!bo(B -$1!04!7o(B $1!7o!FM!bo(B -$1!a)!H$i!&!BX!4Hi!&KN7!ON(B / -$1!a)!H$(B : -$1!5\(B $1!1e!_B(B. -$1!a,(B $1!2A!23(B. -$1!5d(B $1!9%!EN(B. -$1!0}(B $1!?n(B $1!BO!N_!]t(B / -$1!WN!JH(B. -Singapore : -$1!K3(B $1#6j!F'(B. -$1!:|(B $1!;F!C^(B. -$1!04!Bs(B $1'^i!Pn(B $1!8}'QN(B $1!\*!X+(B : -$1!5.:(L(B $1!>#!9'(B $13BD!A,(B $1'\W'CI(B $1'Pp!>'(B $1'Y$!BX!_A(B -$1!a)!H$(B $1!WN!JH(B. -$1!a)!H$(B : -$1!5.:(L(B $1!>#!9'(B, -$1!5.:(L(B $1!>#!9'(B $13BD!A,(B $1'\W'CI(B $1'Pp!>'(B $1'Y$!BX!_A(B $1'Q['[M(B $1!9f'6>'CZ(B. -$1KGa!:|(B $1!T+!IC(B $1![i!Aq(B $1!5=!B\(B / -$1!WN!JH!+4(B -$1!T+!4I!%(B $1!GW!J((B. -$1!04!U<(B $1!CZ!`y(B (Kobe-shi, Japan) -$1!K3(B $1!bt!]L(B. -$1!UV!UH(B $1!Iz'Ms(B / -1$1!JH(B. -$1!T+!4I!4!3[(B $1!04!7o(B / -$1!WN!JH(B. -$1(;}!4I!oS,(B. -$1oWIoS$(B $1oVi(B $1o]8oQ\(B $1oZpoM*(B $1oPu(B $1oUV(B : -$1oYHo[o(B. -$1oS!oV>oT#(B : -$1oV\(B $1oMGoWl(B, -(3Hdabjg,(B (3YHO(B (3Gddg(B (3Hf(B (3MSjf(B (3Hf(B (3YHO(B (3Gddg(B. -(3bhJ(B (3GdCdHGH(B (3ef(B (3eLGfj(B (3Lfj(B (3GdCdHGH(B / -(3JQje,(B (3MVQehJ(B : -(3Rcj,(B (3QeVGf(B (3NejS(B. -(3eaghe(B (3GdSff(B (3GdQHGfjI(B : -(3GdWHYI(B 1. -(3GdbGgQI(B : -(3gPG(B (3gh(B (3GdESdGe(B (3;(B -(3YeGQI,(B (3eMeO(B. -(3bQGAI(B (3GdfU(B (3GdOjfj(B : -(3GdWHYI(B 1. -(3GdbGgQI(B : -(3gPG(B (3gh(B (3GdESdGe(B (3;(B -(3fOhI(B (3GdSjQI(B (3GdfHhjI(B : -(3GdWHYI(B 1. -[Omdurman] : -(3efThQGJ(B (3GdeQcR(B (3;(B -(3EeGe,(B (3MeGOI(B. -(3eHGQc(B (3hGdENhGf(B / -(3GdWHYI(B (3GdYQHjI(B 1. -(3GdegfOSjf(B [Giza] : -$1!Be!YF(B $1!5.!BX(B $1![`!`S!Q|(B / -$1!WN!JH(B. -$1!T+!4I!'7q(B $1!5w(B $1'C-'^U(B -$1!Os(B1$1!JH(B. -$1!4I!0a!!X%(B = -$1!Os(B1$1!JH(B. -$1!4I!0a!!X%i!U'Q[!Q|(B $1!9f'6>'CZ(B. -$1!04K7o(B $1!Os!0Q(B $1'CI!5=(B $1'E_!DB'`y(B. -$1'`y!V+(B $1!FMK7o(B $1(;}'IC(B $1'E_!DB(B $1'4Q'Q[(B / -$1!FMK7o(B $1(;}'IC(B $1'E_!DB(B $1'4Q'Q[(B -$1(;}'IC(B $1'E_!DB(B $1'4Q'Q[(B -$1!Os(B1$1!JH(B. -$1!4I!0a!w(B, - $1!8{!Cr(B $1!9%(B,1966- -$1!?b!L$(B $1!c+!0!(B. -$1KF*!5=':`(B $1i$N(B $1i%]i%8i%7i%gi%Ji%ji%Fi%#(B : -$1!D&!0a(B : -$1!;e!'(B $1i$H(B $1i%+i%ji%-i%ei%ii%`(B $1!E9!\)(B / -$1!WN!JH(B. -$1!D&!0a(B : -$1!v3(B $1-1w!_B(B, -$1!35!Be(B $1!52!RW(B $1'[`!3,(B / -$1!52!RW(B $1'[`!3,(B -$1!D&!0a(B : -$1!0;!1a!L$(B $1!GZ(B, -$1i$3i$Hi$P!+5i$3i$Hi$P!+5i$3i$Hi$P(B / -$1!WN!JH(B. -$1!D&!0a(B : -$1!;E!D$(B $1!0!!T{(B, -$1i$@i$s!WZ(B : -$1!0!!T{(B $1!T&!Oy(B $1!59!_A(B -$1!D&!0a(B : -$1!GzK\[(B $1!4a!\g(B. -$1!;n!Ci(B $1!6<'Xm(B, -$1!]Z!!N_(B $1i$N(B $1!BX':`!+5!bu!T=i$9i$k(B $1!;*!Xf(B -$1!D&!0a(B : -$1!;E!;y(B $1!1W!9'(B, -$1KEa9Y?(B $1K7o'2>(B $1-?n!L5i$Ji$-(B $1!Bs!Ci(B / -$1!D&!0a(B : -$1KYJ9Z/(B $1!Be!Rq!Na(B. -$1!5@!L$(B $1!6a!]:(B, -$1!5@!L$(B $1!6a!]:(B : -$1KYK!Yf(B $1i$N(B $1!2-!KH(B -$1!D&!0a(B : -$1!Ul!;1(B $1!]:E=S(B, -$1!Cs(B $1!J((B, -$1!_'(B $1!WD!N#(B $1i$N(B $1KV1!WF(B $13BD!S,!Y$(B : -$1!WN!JH(B. -$1!D&!0a(B : -$1!_'(B $1!WD!N#(B, -$1!;;!.!>m(B $1i$G(B $1KYKi$oi$k(B : -$1!WN!JH(B. -$1!D&!0a(B : -$1!FF!L$!0S(B $1'3k!0f(B, -$192F!Xi(B $1i$H(B $1!5=K;1(B $1i$N(B $1i$Oi$6i$^(B : -$1!D&!0a(B : -$1!Y"(B $1i$G(B $1i$b(B $1KYJi$ai$k(B $1!Bs!Ci(B $1!5.!0s!5=(B $1!!BX!`y(B. -$1!1a!^q(B $1!F#!(B $1!Na'CZ(B $1i$H(B $1!9%':`(B $1i$N(B $1!@d-?n(B : -$1!WN!JH(B. -$1!D&!0a(B : -$1!Ci!8}(B $1!4d!0=(B, -$1-?nK7o(B $1!Qq3YX!Cd(B $1i$N(B $1!Yo!<^(B $1i$H(B $1!N(!a\'Wl(B / -$1!D&!0a(B : -$1!Z"!B\(B $1!_A!?b(B $1-?n-J;(B $1i$H(B $1!_6!:~!R_(B / -$1!D&!0a(B : -$1!4W!0T!.!>m(B $1i$H(B $1!WD!44(B $1i$r(B $1!R]i$(i$k(B : -$1!0a!\n!>!0!(B. -$13=u!<4(B $1!<]!!0=(B, -$1'b~!V3(B $1!2'(B, -$1!L$!^U(B $1!G"!:M(B, -$1!+%![k!0s(B $1'2>!Bo!+&i$H(B $1i%\i%Gi%#i!&i%]i%ji%Fi%#i%/i%9(B / -$1!0a!\n!(B. -$1!3K'1L"]M(B $1!9(!K3!Nr(B $1!bS!:M!Nk![2i!&!G(!F\![2(B / -$1!bS!:M!Nk![2i!&!G(!F\![2(B -$1!5E!5.!;X!'CZ(B. -$1!04K7o(B $1K;C!8{(B $1!Y~!C"(B $1!Q1!X8(B / -2005$1!!_A(B. -$1!5E!5.!;X!`!9&(B. -$1!FtKQv(B $1!G6-I:(B $1'0L"Mc(B $1i$r(B $1!1N(B $1i$H(B $1i$7i$?(B $1!G7!;l(B $1'HD!7y(B $1i$N(B $1KQm'^]!M"(B $1!Kg!8W(B $1!XN32](B $1i$N(B $1!X[i$_(B / -$1KEV!`(B $1i$H(B $1'CZ!G>(B $1!D-!(B : -$1'CZ!G>!Tg!D-!!V0(B (Japan) -$1!Nv!;y(B $1KQd!Oe(B $1!4d!JU!`y(B. -$1!Tg!D-!87(B $1!9(!:f!^[(B (Museum) -(3TjN(B (3GdCQV,(B (3eMeO(B. -(3aTI(B (3Ndb(B / -(3GHh(B (3XHj(B : -(3GHf(B (3NdOhf(B. -(3ebOeg(B (3GHf(B (3NdOhf(B / -(31G(B) 2. -(3JgQGf(B : -(3GfJTGQGJ(B (3HfjGO(B (3JQLeg(B (3h(B (3fTQ(B (3cJGH(B (3;(B -(3fGHGOi,(B (3eMeO(B )(3Qhjf(B. -(3TgQGfi,(B (3YfGjJ(B (3Gddg(B. -(3VQH(B (3GdeKdgGi(B (3OQi(B (3GaZGfSJGf(B : -(3cdQi,(B (3GdHQJG(B [Calgary, Alberta, Canada]: -(3chTGf,(B (3eMeO(B (3Wg(B. -(3jYbhHj,(B (3CMeO(B (3Hf(B (3CHj(B (3jYbhH(B. -(3JGQjN(B (3jYbhHi(B / -(3JgQGf(B : -(3GfJTGQGJ(B (3HfGg(B (3JQLeg(B (3h(B (3fTQ(B (3cJGH(B (3;(B -(3BjJi,(B (3GHQGgje(B. -(3ZjQJ(B (3cQeGfTGgi,(B (3YHO(B (3GdcQje(B. -(3cdjGJ(B (3BKGQ(B (3SjO(B (3YHO(B (3GdcQje(B (3ZjQJ(B (3cQeGfTGgi(B / -[(3JgQGf(B : -(3ZjQJ,(B (3eMeO(B (3SYjO(B. diff --git a/trunk/test/test_utf8.txt b/trunk/test/test_utf8.txt deleted file mode 100644 index 83f58f2..0000000 --- a/trunk/test/test_utf8.txt +++ /dev/null @@ -1,1514 +0,0 @@ -عودة، محمد. -كيف سقطت الملكية في مصر؟ : -الطبعة 1. -القاهرة : -肖 显靜. -第一 推动 / -第1版. -北京市 : -与 2049年 的 中国 对话 -吴 国林, -芋生 裕信, -西脇 順三郎 の 研究 : -東京 : -新典社 選書 ; -西脇 順三郎, - 交通 运输 管理志 / -第1版. -天津市 : -天津市 西青区 系列 分志 ; -天津市 地方志 丛书 -Transportation -西青区 (Tianjing, China). -鎌倉 近世 史料 / -[鎌倉市] : -鎌倉市 (Japan) -澤 壽郎, -片桐 一男, -鎌倉市 中央 図書舘. -نعيم، عبدالعزيز العلى. -نظام الضرائب فى الإسلام ومدى تطبيقه فى المملكة العربية السعودية : -[Cairo : -回想 の 西脇 順三郎 / -東京 : -西脇 順三郎, -安東 伸介, -西脇 順三郎, -イギリス 文學史 : -東京 : -英語 英文學 講座 -١ا) 4. -تهران : -صفا، ذبيح الله. -金田 弘, -旅人 つひに かへらず : -初版. -東京 : -西脇 順三郎, -世界 の 詩 : -東京 : -串田 孫一, -西脇 順三郎, -渡辺 一夫, -西脇 順三郎, -芭蕉・シェイクスピア・エリオット / -第 1版. -東京 : -松尾 芭蕉, -鍵谷 幸信, -松尾 芭蕉, -佐久間 隆史, -西脇 順三郎 論 : -東京 : -現代 詩人論 叢書 ; -西脇 順三郎, -شبيلي، عبد الرحمن. -الكلمة العربية : -[Saudi Arabia] : -كتاب الشرق الاوسط -مكانة الإباضية في الحضارة الإسلامية / -الطبعة 1. -[القاهرة] : -西脇 順三郎, -定本 西脇 順三郎 全集. -初版. -東京 : -西脇 順三郎 全集. -工藤 美代子, -寂しい 声 : -東京 : -西脇 順三郎, -西脇 順三郎, -幻影 の 人 西脇 順三郎 を 語る / -西脇 順三郎 を 語る -第 1版. -東京 : -西脇 順三郎, -西脇 順三郎 を 偲ぶ 会. -双鸭山 林业局 志 / -第1版. -[双鸭山? : -黑龙江省 (China). -伊 蝉. -非常 误会/ -Singapore : -狮城 作家 群英 丛书 ; -فرزاد، عبد الحسين. -المنهج في تاريخ الأدب العربي : -Tehran : -夏 枯早. -涼風 有信 / -Kuala Lumpur : -丹袖 出版 系列 ; -子木, -杭州 日记 / -[Singapore] : -子木, -جائزة سلطان العويس الثقافية : -الشارقة : -منشورات اتحاد كتاب وادباء الامارات -مؤسسة سلطان بن علي العويس الثقافية. -اتحاد كتاب وأدباء الإمارات. -旱区 水 土 作物 关系 及 其 最优 调控 原理 : -第1版. -北京 : -周 保中 将军 和 他 的 抗联 战友 / -[长春] : -周 保中, -中共 吉林 省委. -南宁市 稅务誌 / -稅务誌 -第1版. -[南宁市 : -南宁 (China) -广西 壮族 自治区 南宁市 国家 稅务局. -广西 壮族 自治区 南宁市 地方 稅务局. -中国 副食品 市场 需求 与 "菜篮子 工程" 布局 / -第1版. -北京 : -رياض، محمد. -رحله في زمان النوبة : -[القاهرة] : -عبد الرسول، كوثر. -جياني، الحسين بن محمد. -تسمية شيوخ أبي داود السجستاني / -الطبعة 1. -بيروت : -أبو داود سليمان بن الأشعث السجستاني. -فجي، جاسم بن محمد بن حمود. -ابن الدباغ، يوسف بن عبد العزيز. -جابري، رياض. -سعد الله الجابري وحوار مع التاريخ : -الطبعة 1. -حمص : -جابري، سعد الله. -إبراهيم، أيمن. -الإسلام والسلطان والملك : -الطبعة 1. -دمشق : -سليطين، وفيق. -الزمن الأبدي : -الطبعة 1. -اللاذقية : -وقائع حلقة النقاش الأولى حول تطوير أساليب تعليم اللغة العربية لغير الناطقين بها : -الطبعة العربية 1. -عمان : -مصطلحات ميكانيك السيارات. -الطبعة 1. -[Amman] : -خصاونة، عوني محمد. -التطبيقات الفلكية في الشريعة الإسلامية / -تطبيقات علم الفلك في الشريعة الإسلامية -بدر، عبد الرحيم. -موسوعة أسماء النجوم عند العرب في الفلك القديم والحديث / -عمان : -تكريتي، شاكر علي. -مذكراتي وذكرياتي-- هذه / -الطبعة 1. -بغداد : -تكريتي، شاكر علي. -يحيى، حسب الله. -فنارات في القصة والرواية / -الطبعة 1. -بغداد : -عاني، يوسف. -المسرح، الوجود، الحلم / -الطبعة 1. -بغداد : -راوي، نوري. -متحف الحقيقة، متحف الخيال : -الطبعة 1. -بغداد : -حديثي، بهجت عبد الغفور. -الروح الايماني في الشعر العربي : -الطبعة 1. -بغداد : -نفحات الهند واليمن بأسانيد الشيخ أبي الحسن : -الطبعة 1. -الرياض : -قاضي، النعمان. -شعر الفتوح الإسلامية في صدر الإسلام / -الطبعة 1. -جدة : -من أدب الجهاد -حسن، حسن مصطفى. -الحيوان في الشعر العربي / -الطبعة 1. -الرياض : -زهراني، علي بن صالح السلوك. -بلاد غامد وزهران / -الطبعة 3.، وقد أضيفت اليها فصول جديدة وزيادات مهمة. -جدة : -معجم الجغرافي للبلاد العربية السعودية -عبدلي، عبد الله منسي. -المسجد الحرام في قلب الملك عبد العزيز / -مكة : -رومي، عدنان سالم. -علماء الكويت وأعلامها خلال ثلاثة قرون / -الطبعة 1. -الكويت : -سلسلة تاريخ ما أهمله التاريخ ؛ -أغبري، أكرم عبد الملك. -أهمية البحر الأحمر في علاقة الجمهورية اليمنية بدول مجلس التعاون الخليجي / -الطبعة 1. -صنعاء : -كتاب الثوابت ؛ -بلو، محمد. -إنفاق الميسور في تاريخ بلاد التكرور / -الرباط : -منشورات معهد الدراسات الإفريقية. سلسلة نصوص ووثائق ؛ -شاذلي، بهيجة. -ذاكر، عبد النبي. -الواقعي والمتخيل في الرحلة الأوروبية إلي المغرب / -أكادير : -ذنون، عبد الحكيم. -تاريخ الشام القديم / -الطبعة 1. -دمشق : -العلاقات المصرية-اليابانية / -الجيزة : -مدني، إسماعيل محمد. -بيئة البحرين البحرية / -البحرين : -سلسلة كتب حول الحياة الفطرية ؛ -실크 로드 와 韓國 文化 의 探究 / -대전 광역시 : -人文 硏究 學術 叢書 ; -史 在東, -红盾 耕耘录 : -第1版. -[厦门] : -龙海市 (China) -بدر، عزة. -أم الدنيا : -كتاب الجمهورية -خلايلي، خليل. -تاريخ جسكالا : -الطبعة 1. -دمشق ؛ -راوى، صلاح. -فلسفة الوعى الشعبى : -الطبعة 1. -القاهرة : -刘 宏. -百年 梦寻 : -20世纪 中国 经济 思潮 与 社会 变革 -第1版. -北京市 : -世纪 回眸. -沈 山. -石 淑华, -趋势 与 策略 / -Kuala Lumpur : -林 水〓. -陈 友信. -西脇 順三郎, -西脇 順三郎・パイオニア の 仕事 / -パイオニア の 仕事 -第 1版. -東京 : -コレクション・日本 シュ-ルレアリスム ; -和田 桂子, -申 國美. -1900-2001 國家 圖書館 藏 敦煌 遺書 研究 論著 目錄 索引 / -敦煌 遺書 研究 論著 目錄 索引 -國家 圖書館 藏 敦煌 遺書 研究 論著 目錄 索引 -第1版. -北京市 : -敦煌縣 (China) -中國 國家 圖書館 -郭 永秀, -余韵 : -郭 永秀 音乐 评论集 -初版. -[Singapore] : -1950년대 후반기 의 한국 사회 와 이 승만 정부 의 붕괴 / -서울 특별시 : -한국 현대사 의 재 인식 ; -현대사 연구소 기획 연구 -한 흥수. -한국 정신 문화 연구원. -敦煌 懸泉 月令 詔條 / -月令 詔條 -第1版. -北京 : -"本書 收錄 敦煌 懸泉置 遺址 出土 的 《使者 和 中所 督察 詔書 四時 月令 五十條》 (簡稱 「月令 詔條」)". -懸泉置 Sites (China) -中國 文物 硏究所. -甘肅省 文物 考古 硏究所. -刘 星, -文化界 人士 / -Singapore : -新加坡 文艺 协会 丛书 ; -金 梅子, -一双 舊草鞋 / -[s.l.] : -印华 作协 文丛. -前橋藩 松平家 記錄 / -[Tokyo] : -前橋 市立 図書館. -長崎県 水 調查書 : -[長崎市] : -長崎県 (Japan). -許 保由, -不枉此生 : -許 保由 回憶錄 -Sibu, Sarawak : -許 保由, -吴 木炎. -前路 亮红灯 / -第1版. -K. L., Malaysia : -大将 观点 ; -薛 嘉元, -猫城 猫语 / -第1版. -K.L. [i.e. Kuala Lumpur], Malaysia : -大将 fuse ; -晨露, -鱼說 / -初版. -Miri, Sarawak : -美里 笔会 丛书 ; -梁 菊庵, -飄逝 的 年華 : -菊庵 文集 -[Jakarta : -青春 是 一首歌 : -驻校 作家 写作 计划 学员 作品集 -初版. -[Singapore] : -方 桂香. - 尤 今. -听 青春 在 哭泣 : -尤 今 短篇 小说 -初版. -Singapore : -心书 ; -白 荷. -白 荷 散文选 / -初版. -Singapore : -新加坡 新华 作家 丛书 -新加坡 新华 作家 作品集 ; -杨 怡, -从 新华 文坛 论 及 印华 文学 / -初版. -Singapore : -新加坡 新华 作家 作品集 ; -周 洛崙. -梦廻 人生 / -初版. -Singapore : -周 洛崙 作品 ; -陈 久霖, -神州 大地 商机 无限 : -中国 商业 环境 和 文化 的变迁 -初版. -[Singapore] : -舒城县 文物志 / -[舒城县. -舒城县 (China). -舒城县 (China). -舒城县 (China). -中國 古代 建築 歷史 圖說 / -第1版. -北京市 : -侯 幼彬. -李 婉貞. -孔 繁志. -敖鲁古雅 鄂温克人 的 文化 变迁 = -第1版. -天津 : -中央 民族 大学 中国 少数 民族 研究 中心 丛书 -鄂温克族 自治旗 (China) -环 洞庭湖 经济圈 建设 硏究 / -第1版. -长沙市 : -湖南省 (China) -朱 翔. -谢 留文. -客家 方言 语音 硏究 / -第1版. -北京 : -探索 之 果 : -云南 财贸 学院 建校 50周年 论文选 -第1版. -北京 : -云南 财贸 学院 学术 委员会. -宿務 華人 的 經濟--社會史 (附 從 糖業 看 菲律濱 華人) / -糖業 看 菲律濱 華人 -初版. -菲律濱 : -Go, Bon Juan. -珠江 三角洲 公共 管理 模式 硏究 / -第1版. -北京 : -教育部 人文 社会 科学 重点 硏究 基地 中山大学 行政 管理 硏究 中心 学术 文库 -"地方 政府 与 区域 公共 管理 研究" 系列 -陈 瑞莲. -蔡 立辉. -黎 军, -甘 靑 宁 民族 地区 现代 远程 敎育 / -第1版. -北京市 : -مجدلاني، أحمد. -دراسة تحليلية حول أثر النظام الانتخابي على تركيبة المجلس التشريعي القادم / -رام الله : -سلسلة تقارير دورية -شاكري، حسين. -ذكرياتي / -الطبعة 1. -قم : -ميردامادي، عبد المجيد. -زيارة الرسول المصطفى وآله : -الطبعة 2. -تهران : -موسوعة الرسول المصطفى ؛ -حلاق، حسان. -مناهج تحقيق التراث والمخطوطات العربية / -الطبعة 1. -بيروت : -حسين، قصي. -في الحضارة العربية : -الطبعة 1. -طرابلس، لبنان : -عباس، محمد. -ثوار ... عظماء / -بوزريعة، الجزائر : -تطاوي، عبد الله. -اللغة والمتغير الثقافي : -الطبعة 1. -القاهرة : -غوادره، فيصل حسين. -التمرد في شعر العصر العباسي الأول / -الطبعة 1. -عمان : -黑 岩, -各舉 門神 的 風采 / -Sibu, Sarawak : -漳泉 之聲 叢書 ; -陆 力军. -市场 义乌 : -第1版. -杭州 : -义乌市 (China) -义乌市 (China) -白 小虎. -王 祖強. -靖 国平. -教育 的 智慧 性格 : -当代 知识 教育 的 变革 -第1版. -武汉 : -公共 决策 研究 : -第1版. -长沙 : -公共 管理 论丛 -颜 佳华, -迈向 新世纪 : -广州市城市 规划 信息 系统 的 理论 与 实践 -第1版. -广州 : -广州 (China) -戴 逢 -姜 崇洲. -丁 建伟. -韩 振远. -山西 古祠堂 : -矗立 在 人 神 之 间 -第1版. -沈阳市 : -中国 文化 遗珍 丛书. 山西 -潘 知常, -王 国维 : -第1版. -北京 : -跨文化 沟通 个案 研究 丛书 -文津 書系 -王 国维, -李 加荣. -军用 生物 技术 / -第1版. -北京市 : -庄 力霞. -邱 德修. -商周 用鼎 制度 之 理論 基礎 / -限定版. -臺北市 : -商周 金文 硏究 論文; -蒲正信, -药师经注释 / -第1版. -成都市 : -佛典丛书. -زاهي، فريد. -العين والمرآة : -[Rabat] : -دواليبي، محمد معروف. -مذكرات الدكتور معروف الدواليبي / - الطبعة 1. -الرياض : -أبو الخير، محمود عبد الله. -شعر رثاء النفس : -عمان : -黎平 剿匪 斗争 / -第1版. -[黎平 : -中共 黎平 县委. -鬼谷子 学术 研讨会 -第一届 鬼谷子 学术 研讨会 论文集 / -鬼谷子 学术 研讨会 论文集 -第1届 鬼谷子 学术 研讨会 论文集 -北京 第1版. -北京 : -鬼谷子, -鬼谷子 学术 研究会. -فقير، بدر بن عادل. -تغير الأنماط السكنية في مدينة الدرعية : -الرياض : -إصدارات دارة الملك عبد العزيز ؛ -سمحي، علي حمود. -داخل آزال خارج صنعاء : -صنعاء : -شمري، محمد علي. -شعراء الخليج : -الطبعة 1. -عمان : -الشعر النبطي : -الطبعة 1. -عمان : -حنداين، محمد. -المخزن وسوس، 1672-1822 : -الطبعة 1. -الرباط : -عبيدات، داود عمر سلامة. -الموحدون في الأندلس : -إربد، الأردن : -مدني، إسماعيل محمد. -رحلتي مع البيئة / -الطبعة 1. -[?Manama] : -حميد الدين، عبد الله بن محمد. -الهوية في بنية النظام الدولي / -الطبعة 1. -عمان : -سيد، محمد عبد الرحمن. -تجرية دولة قطر في مجال ذوي الاحتياجات الخاصة / -[الدوحة] : -فاضل لنكراني، محمد. -كتاب الطهارة : -الطبعة 1. -[Tehran] : -نجمآبادي، أبو الفضل. -حاشية المكاسب : -الطبعة 1. -قم : -مجموعة آثار آية الله الميرزا أبو الفضل النجمآبادي ؛ -انصاري، مرتضى بن محمد أمين، -مؤسسة آية الله العظمى البروجردي. -东北亚 区域 经济 社会 合作 与 发展 国际 学术 研讨会 -东北亚 自由 贸易区 : -2004年 东北亚 区域 经济 社会 合作 与 发展 国际 学术 研讨会 论文选 -第1版. -沈阳 : -李 向平. -李 勇辉, -城镇 居民 住宅 消费 保障 制度 / -第1版. -北京市 : -陈 相灵. -《武经 七书》 与 当代 战争 战略 / -第1版. -北京 : -武经 七书. -社会 保障 社会 福祉 大事典 = -初版. -東京 : -労働 旬報社. -한국 팝 의 고고학 1970 : -제1판. -경기도 파주시 : -신 현준. -武 旭峰. -深入 黃山 的 背后 : -找寻 徽州 -第2版. -广州 : -发现 之旅 = -徽州 地区(China) -徽州 地区(China) -南 丽军. -比较 政治 制度 / -第1版. -哈尔滨 : -向 俊杰. -孔 兆政. -贾 少华. -民办 大学 的 战略 / -第1版. -杭州 : -浙江省 教育 科学 规划 2005 年 重点 研究 课题 -刘 晓琴. -中国 近代 留英 教育史 / -第1版. -天津市 : -近代 中国 研究 丛书 -Rev. ed. of author's doctoral thesis under title: 中国 近代 留英 教育 研究. -刘 晓琴. -党 崇民, -论 邓小平 战役 指导 特色 = -第1版. -北京 : -中国 军事学 博士 文库 -邓 小平, -建立 农村 劳动力 平等 就业 制度 / -第1版. -北京市 : -陈 晓华. -张 红宇. -胡 小林. -毛 泽东 的 学习 思想 与 实践 / -第1版. -济南 : -毛 泽东, -于 云才. -赵 志忠. -民族 文学 论稿 / -第1版. -沈阳市 : -至尊 宗喀巴 大师传 / -第3版, 修订本. -西宁 : -郭 和卿. -威慑 人类 / -第1版. -北京 : -沈 晓阳. -傅 国涌, -主角 与 配角 : -近代 中国 大转型 的 台前 幕后 -第1版. -武汉市 : -白 友涛. -盘根草 : -城市 现代化 背景下 的 回族 社区 -第1版. -银川市 : -邬 大光. -危机 与 转机 : -第1版. -[厦门] : -厦门 大学 WTO 硏究 中心 系列 丛书 ; -林 莉. -刘 学杰. -新疆 旧事 = -第1版. -乌魯木齐市 : -居上 图书 -新疆 维吾尔自治区 (China) -吴 静安, -春秋 左氏傳 舊注 疏證 續 / -第1版. -長春 : -劉 文淇, -Confucius. -左丘 明. -劉 文淇, -董 洪运, -聚焦 地平线下 : -漫谈 新时期 人民 防空 -北京 第1版. -北京市 : -皇甫 宜川. -中国 战争 电影史 / -第1版. -北京 : -百年 中国 电影 研究 书系 -高等 教育 发展 与 财政 政策 国际 研讨会 -高等 教育 发展 的 财政 政策 : -OECD 与 中国 -第1版. -北京 : -"根据 中国 教育部 和 经济 合作 与 发展 组织(OECD) 的 协商, 2004年月11--14日, 双方 在 北京 共同 召开了 '高等 教育 发展 与 财政 政策 国际 研讨会'" -- Foreword. -范 文曜. -闫 国华. -中国 当代 文学史 / -第1版. -海口 : -21世纪 高等 敎育 系列 敎材. 汉语言 文学类 -田 中阳. -赵 树勤. -王 中江. -进化 主义 在 中国 = -第1版. -北京 : -20世纪 西方 哲学 东渐史 -董 贵昕. -金融 泡沫 的 形成, 运行 与 控制 研究 / -第1版. -上海市 : -黄皮书 系列 -周 到. -周 到 藝術 考古 文集 / -第1版. -郑州市 : -河南 博物院 学术 文库 -河南 博物院. -唐 忠毛. -佛教 本觉 思想 论争 的 现代性 考察 / -第1版. -上海 : -中国 的 现代性 与 人文 学术 丛书 -地理 信息 与 规划 支持 系统 / -第1版. -北京 : -李 楯, -面对 艾滋病, 2004 = -第1版. -北京市 : -李 丹. -中国 上市 公司 发展 规模 研究 = -第1版. -武汉 : -管理 新干线 -卢 洪涛, -中国 现代 文学 思潮 史论 / -第1版. -北京 : -"陕西 师范 大学 优秀 著作 出版 基金 资助 出版"--P. facing t.p. -宋代 傳記 資料 叢刊 / -第1版. -北京市 : -宋元明清 傳記 資料 叢刊 系列 - Vol. 49 called "索引" with added title page: 四十七種 宋代 傳記 綜合 引得 / 洪 業 ... [et al.] 編纂. -洪 業. -北京 圖書館 出版社. -四十七種 宋代 傳記 綜合 引得. -作战 指挥学 / -北京 第1版. -北京 : -丁 邦宇. -装备 保障性 工程 与 管理 = -第1版. -北京市 : -徐 宗昌, -黄 益嘉. -杨 宏伟. -刘 佐泉. -太平 天国 与 客家 / -第1版. -开封市 : -客家 文化 研究 丛书 -中国 财富 新贵 / -第1版. -北京市 : -范 爱民. -高句丽 厉史 与 文化 学术 研讨会 -高句丽史 新 研究 / -高句丽 厉史 与 文化 学术 研讨会 论文集 -第1版. -延吉市 : -高句丽 (Kingdom) -李 国强. -李 宗勋. -中国 小额 信贷 发展 研究 = -第1版. -北京 : -曹 子娟. -陶 江. -陶姓 史话 = -第1版. -南昌市 : -中华 姓氏 文化 丛书 系列. 中华 姓氏 史话 丛书 -陈 光焱. -中国 财政 思想 与 制度 改革 / -第1版. -北京 : -中南 财经 大学 财政学 博士点 导师 文集 -郑 永振. -渤海 墓葬 研究 / -第1版. -长春市 : -严 长录. -陳 寅恪, -金明館 叢稿 初編 / -北京 第1版. -北京 : -陳 寅恪 集 -东北 老工业 基地 振兴 与 管理 现代化 / -第1版. -北京 : -中国 企业 管理 研究会. -中国 社会 科学院. -寒 布. -故宮 = -第1版. -北京 : -北京 的 世界 文化 遗产 = -故宮 博务院 (China) -北京 (China) -北京 (China) -閆 修篆. -易經 的 圖 與 卦 / -臺北市 : -易經. -浪尖 逐梦 : -余 柱业 口述 历史 档案 -初版. -Petaling Jaya, Selangor, Malaysia : -风云 丛书 ; -陈 剑, -郴州市 2000年 人口 普查 资料 / -郴州市 人口 普查 资料 -2000年 人口 普查 资料 -[郴州市 : -向 曽榆. -郴州市 第五次 人口 普查 领导 小组. -רוזנמן, מרדכי. -שמחת מרדכי. -ספר שמחת מרדכי / -ניו יורק : -חלק ב׳ : בראשית, שמות, ענינים שונים ־־ -徐 宗幹, -斯未 信齋 文編 -斯未 信齋 文編 ; -斯未 信齋 文編 ; 斯未 信齋 雜錄 -初版. -南投市 : -臺灣 歷史 文獻 叢刊 -徐 宗幹, -臺戰 實紀. -臺戰 演義 / -初版. -南投市 : -臺灣 歷史 文獻 叢刊 -劉永福, -臺灣 銀行. -冯 文炳. -废名 作品 精选 / -第1版. -武汉市 : -现代 文学 名家 作品 精选 -沙 铁华. -月 华. -大園 市藏. -臺灣 事蹟 綜覽 / -台北市 : -幕府山 胜迹 寻踪 / -南京市 : -下关文史 ; -政协 南京市下关区文史 资料 委员会 . -南京市 幕府山 地区 保护 开发领导 小组 办公室. -赵 淑敏, -京梦 / -第1版. -广州市 : -吴 兢 -贞观 政要 / -第1版. -合肥市 : -中华 古典 智慧 珍品 -唐 太宗, -范 勇胜. -העיירה שלי : -תל־אביב : -גרנצרסקי־קדרי, בינה. -科学 发展观 与 新一轮 经济 增长 / -第1版. -上海 : -厉 无畏. - 王 振. -熊谷 弘, -英米 陪審 制度 の 運用 と 其の 批判 / -[Tokyo] : -司法 研究 報告書 ; -이 준우, -국, 공유지 신탁 법제 개선 방안 연구 / -서울 특별시 : -연구 보고 ; -김 두진, -공정 거래법 상 경제력 집중 규제 연구 / -서울 특별시 : -연구 보고 ; -최 성근. -OECD 기업 지배 구조 원칙 의 국내법 수용 에 관한 연구 / -서울 특별시 : -연구 보고 ; -김 정순. -행정법 상 재판 외 분쟁 해결 법제 연구 / -서울 특별시 : -연구 보고 ; -김 수진, -공무원 권익 향상 을 위한 행정 구제 법제 연구 / -서울 특별시 : -연구 보고 ; -傅 佩榮, -傅 佩榮 解讀 孟子 : -初版. -台北縣 新店市 : -世界 公民 叢書 ; -Mencius. -Mencius. -平 可夫. -中國 軍事 與 國際 戰略 / -第1版. -香港 : -黑白講 李 敖 : -第1版. -[香港] : -富達 文庫 ; -李 敖, -齊 以正. -吳 小攀. -孟 庆顺. -"一国 两制" 与 香港 回归后 的政治 发展 / -香港 回归后 的政治 发展 -香港 初版. -香港 : -鄭 義, -中共 十大 敗仗 : -中共官方戰史上 被刻意 掩埋 的 篇章 -第1版. -香港 : -中國 共產黨 -中國 國民黨 -吳 潤生. -林 彪 與 文化 大革命 / -第2版. -Carle Place, N.Y. : -《眞相》系列 ; -林 彪, -周 承人. -早期 香港 電影史 (1897-1945) / -香港 : -李 以荘. -魏 成思. -兩岸 密使 50 年 / -香港 : -記憶 歷史 叢書 -程 希, -当代 中囯 留学生 硏究 / -初版. -香港 : -北京 大学 华侨 华人 硏究 中心 丛书 ; -"北京 大学 龚 诗贮 基金 赞助 出版." -鄭 義, -長征 : -第1版. -香港 : -中國 共產黨 -中國 國民黨 -香港・文化・研究 / -香港 : -吳 俊雄. -馬 傑偉. -呂 大樂. -伊 戰 啓示錄 / -初版. -Singapore : -王 賡武. -宮 少朋. -中日 关系 多维 透視 : -古厩 忠夫 教授 还历 纪念 论文集 -香港 初版. -香港 : -古厩 忠夫, -古厩 忠夫 教授 还历 纪念 论文集 编辑 委员会. -清宮 臺灣 巡撫 史料 / -初版. -臺北市 : -國立 故宮 博物院 院藏 清代 臺灣 文獻 叢編 -洪 安全, -馮 明珠. -落地 生根. -落地 生根 : -神戶 華僑 與 神阪 中華 會館 百年史 -香港 初版. -香港 : -北京 大學 華僑 華人 研究 中心 叢書 ; -Translation of: 落地 生根 : 神戶 華僑 と 神阪 中華 会館 の 百年. -中華 会館 (Kobe-shi, Japan) -忽 海燕. -中華 會館 (Kobe-shi, Japan) -王 鼎鈞. -葡萄 熟了 / -1版. -臺北市 : -大地 叢書 ; -戴 錦華, -性別 中國 / -初版. -台北市 : -麥田 人文 -附 參考 文獻. -盧 增. -柬埔寨 企业 纳稅 指南, 2004 / -中文 版. -[Phnom Penh?] : -הלר חדד, הילה. -התכלית של ועדות מייעצות ציבוריות לעניין מסוים־ נוסח אד הוקת בישראל : תוך התמקדות בשלוש הועדות הבאות: ועדת וילנאי (1999), ועדת טל (2000), ועדת בן בסט (2000) / -[Israel : -פרג׳, רג׳א סעיד. -הקשרים בין הדרוזים והיהודים עד הקמת מדינת ישראל (1948) / -ינוח : -חלפין, יגאל. -הטיהורים הסטליניסטיים : -תל אביב : -פטיש -קרליץ, שמריהו יוסף נסים. -חוט שני (הלכות רבית) -ספר חוט שני : -בני ברק : -הוכמן, חיים אריה, -안 도섭. -조선 의 혼불 타던 밤 에 : -초판. -서울시 : -윤 동주, -بلفقيه، عبد الله بن حسين بن عبد الله. -قوت الألباب من مجاني جني الألباب / -تريم، حضرموت : -زكي، رمضان خميس. -مفهوم السنن الربانية : -الطبعة 1. -القاهرة : -هذا هو الإسلام ؛ -عمارة، محمد. -قراءة النص الديني : -الطبعة 1. -القاهرة : -هذا هو الإسلام ؛ -ندوة السيرة النبوية : -الطبعة 1. -[Omdurman] : -منشورات المركز ؛ -إمام، حمادة. -مبارك والإخوان / -الطبعة العربية 1. -المهندسين [Giza] : -新譯 古文 辭類纂 / -初版. -臺北市 : -古籍 今注 新譯 叢書 -姚 鼐, -黃 鈞. -刘 文锁, -尼雅 : -静止 的 家园 和 时间 -第1版. -北京市 : -神秘 中国 -民丰县 (China) -民丰县 (China) -中国 新编 地方志 总目 提要 = -第1版. -北京市 : -《中国 新编 地方志 总目 提要》编纂 委员会. -中国 第二 历史 档案馆. -馆藏 民国 台湾 档案 汇编 / -民国 台湾 档案 汇编 -台湾 档案 汇编 -第1版. -北京市 : -台湾 文献 史料 出版 工程 -陈 云林. -海峡 两岸 出版 交流 中心. -黃 俊傑, -德川 日本 《論語》詮釋 史論 / -初版. -臺北市 : -東亞 文明 研究 叢書 ; -Confucius. -東亞 視域中 的 國籍、移民 與 認同 學術 研討會 -東亞 視域中 的 國籍、移民 與 認同 / -初版. -臺北市 : -東亞 文明 研究 叢書 ; -甘 懷真, -貴志 俊彦, -川島 真, -בסן, צדוק. -יתומות : -ירושלים : -רז, גאי. -בית האמנים. -שלו, אריה. -כישלון והצלחה בהתרעה : -תל אביב : -אריאלי, שאול. -תפסת מרובה לא תפסת : -ירושלים : -תמונת מצב -שביט, יעקב. -אירופה המהוללת והמקוללת : -תל אביב : -ריינהרץ, יהודה. -שי, דב. -15 מכל 100 שרדו : -חמישה עשר מכל מאה שרדו -מהד׳ 2. -[ת״א ז״א תל אביב : -שי, דב. -עדווי, ג׳מאל, -פעילות הקוויקרים האמריקנים בפלישתינה 1948-1869 / -Haifa] : -חסקין, גילי. -שבוי בקסמה : -הוד השרון : -טאוב, גדי. -המתנחילים והמאבק על משמעותה של הציונות / -מתנחלים -תל אביב : -פרוזה (ידיעות אחרונות). -日本軍 「慰安婦」 関係 資料 集成 / -初版. -東京 : -鈴木 裕子, -山下 英愛, - 外村 大,1966- -成田 龍一. -歴史学 の ポジショナリティ : -東京 : -山崎 一穎, -森 鷗外 論攷 / -東京 : -森 鷗外, -木村 博一, -日本 社会科 の 成立 理念 と カリキュラム 構造 / -初版. -東京 : -堀 幸雄, -最新 右翼 辞典 / -右翼 辞典 -東京 : -久保田 淳, -ことば、ことば、ことば / -初版. -東京 : -小林 一茶, -だん袋 : -一茶 自筆 句集 -東京 : -渡辺 卓郎. -岡本 哲志, -銀座 四百年 : -東京 : -講談社 選書 メチエ ; -銀座 (Tokyo, Japan) -千石 英世, -小島 信夫 : -暗示 の 文学、鼓舞する 寓話 -東京 : -小島 信夫, -検証 国家 戦略なき 日本 / -東京 : -読売 新聞社. -吉田 喜重, -吉田 喜重 : -変貌 の 倫理 -東京 : -蓮實 重彦, -李 燕, -陶 行知 の 芸術 教育論 : -初版. -東京 : -陶 行知, -寺崎 昌男, -大学 は 歴史 の 思想 で 変わる : -初版. -東京 : -比田井 克仁, -伝說 と 史実 の はざま : -東京 : -誰 で も 読める 日本 古代史 年表 : -日本 古代史 年表 -東京 : -吉川 弘文館. -保阪 正康, -松本 清張 と 昭和 史 / -初版. -東京 : -平凡社 新書 ; -松本 清張, -松本 清張, -松本 清張, -東京 大学. -戦争 の 表象 : -東京 : -東京 大学. -吉見 俊哉, -人口 減少 時代 の 日本 経済 / -東京 : -人口学 ライブラリー ; -大淵 寬, -森岡 仁, -日本 の 所得 分配 : -初版. -東京 : -小塩 隆士, -田近 栄治. -府川 哲夫, -佐々木 毅, -知識 基盤 社会 と 大学 の 挑戦 : -初版. -東京 : -本多 博之, -戦国 織豊期 の 貨幣 と 石高制 / -東京 : -資料 集成 戦争 と 障害者 / -東京 : -十五年 戦争 極秘 資料集. 補卷 ; -橋本 雅之, -古風土記 の 研究 / -初版. -大阪市 : -研究 叢書 ; -古風土記 -常陸国 風土記. -八代 斌助 の 思想 と 行動 を 考える : -京都市 : -神戶 国際 大学 経済 文化 研究所 叢書 ; -八代 斌助, -日本 聖公会 -桑田 優, -平尾 武之, -山本 祐策, -小川 恭一. -徳川 幕府 の 昇進 制度 : -寬政 十年末 旗本 昇進表 -東京 : -ジャーナリズム と 権力 / -京都市 : -大石 裕, -日本 の 地方 民鉄 と 地域 社会 / -初版. -東京 : -青木 栄一, -少子化 の 経済 分析 / -東京 : -高山 憲之, -斎藤 修, -田間 泰子, -「近代 家族」と ボディ・ポリティクス / -京都市 : -四川省 潼南县 地名录 / -潼南县 地名录 -[潼南县 : -四川省 地名录 丛书 ; -潼南县 (China) -四川省 潼南县 地名 领导 小组. -四川省 武隆县 地名录 = -武隆县 地名录 -[武隆县 : -四川省 地名录 丛书 ; -武隆县 (China) -武隆县 地名 领导 小组. -四川省 新都县 地名录 / -新都县 地名录 -[新都县 : -四川省 地名录 丛书 ; -新都县 (China) -新都县 地名 领导 小组. -مالح، محمد رياض. -الشيخ الأكبر محيي الدين بن العربي سلطان العارفين / -أبو ظبي : -حميري، جمال الدين عبد الله. -النسبة إلى المواضع والبلدان / -الطبعة 1. -أبو ظبي : -مزروعي، فاطمة حمد. -تمثيلات الآخر في أدب قبل الإسلام / -أبو ظبي : -يوميات زايد / -الطبعة 1. -أبو ظبي : -المأمورة : -الطبعة 1. -Abu Dhabi : -العاديات : -الطبعة 1. -Abu Dhabi : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1997 حتى عام 2006 بشأن الأراضي الممنوحة للمواطنين / -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1996 حتى عام 2006 في العلامات التجاربة / -[?Dubai] : -قانون اتحادي رقم 24 لسنة 2006 م في شأن حماية المستهلك. -[?Dubai] : -قانون مكافحة التستر التجاري رقم 17 لسنة 2004 م. -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1999 حتى عام 2006 في المنازعات بين الؤجرين والمستأجرين : -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1990 حتى عام 2005 في الإبعاد / -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1988 حتى عام 2005 م في أحكام بطاقة الإئتمان. -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1991 حتى عام 2005 في بطلان الإعلان / -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1997 حتى عام 2005 في الملكية التجارية والصناعية / -[?Dubai] : -مجموعة القواعد القانونية والأحكام الصادرة من محكمة تمييز دبي منذ عام 1991 حتى عام 2006 في التسهيلات المصرفية / -[?Dubai] : -حجي، عبد الرحمن. -دراسة الظاهرة العلمية في المجتمع الأندلسي / -أبو ظبي : -مري، سعيد. -ديوان الغواص / -أبو ظبي : -نجمآبادي، أبو الفضل. -كتاب القضاء : -الطبعة 1. -قم : -مجموعة ىثار آية الله الميرزا أبو الفضل النجم آبادي ؛ -نجمآبادي، أبو الفضل. -الرسائل الفقهية : -الطبعة 1. -قم : -مجموعة آثار آية الله الميرزا أبو الفضل النجمآبادي ؛ -한국 의 민주 정부. -한국 의 민주 정부. -חיים ביהודה. -[Jerusalem] : -松村 潤, -米國 議會 圖書館 所藏 滿洲語 文獻 目錄 / -滿洲語 文獻 目錄 -東京 : -東北 アジア 文獻 硏究 叢刊 ; -פוגל, דוד. -חרא של פרסום / -מהד׳ 1. -[Israel] : -פוגל, דוד. -ישראל. -אזורי עדיפות לאומית : -ירושלים : -دارا شكوه. -منتخبات آثار : -[تهران] : -جلالى نائينى، محمد رضا. -صادق عنقا. -١نته : -١ا) 22. -Verdugo City, Ca : -בר־עם שחל, ליאורה. -הנחיות לסקר ותיעוד אתרים לשימור / -[Israel] : -ארן, זלמן. -דברים על החינוך בדור הדעת / -חינוך בדור הדעת -אבא אבן -ירושלים : -סדרת ״השרים״ / יוסף יונאי -יונאי, יוסף. -הגדה של פסח : -ירושלים : -אלישיב, יוסף שלו׳. -קהלות יעקב. -ישראלזון, משה. -ורנר, שלמה י. -ליל שמורים. -ספר ליל שמורים : -ליל שמורים -ברוקלין, נ.י. : -ברוודה, שלמה. -חד גדיא. -הגדה של פסח : -ירושלים : -קניבסקי, יעקב ישראל. -ברונשטיין, ישראל יוסף בן משה אליעזר. -מוסקאוויטש, נפתלי אשר ישעי׳. -פירות האילן (ארבעה המינים) -ספר פירות האילן : -פירות האילן -אשדוד : -ספר יהושע. -ספר יהושעץ -יהושע -[ירושלים : -ספר יהושע. -ספר שופטים. -וילהלם, אהרן אליהו בן יחזקאל. -ספר שופטים. -אילה שלוחה. -דיקמאן, אברהם ש. -ספר שלשים יום קודם החג : -שלשים יום קודם החג -זכרון משה -מהד׳ 2. מתוקנת. -ליקוואוד, נ. דז. : -אורנשטיין, יעקב משולם. -ישועות יעקב -ספר ישועות יעקב : -נדפס ונסדר מחדש. -אשדוד : -תורה. -באום, אברהם. -לילה כיום יאיר : -ירושלים : -אוצר מפרשי קהלת / -ירושלם : -קהלת. -ואנונו, שמעון. -קהלת. -דיין, נסים. -ספר יעלת חן : -יעלת חן -בני ברק : -תורה. -מרגליות התורה : -ספר מרגליות התורה -ירושלים : -תורה. -ואנונו, שמעון. -רבינוביץ־תאומים, בנימין בן יעקב. -ספר יחלק שלל : -יחלק שלל -ירושלים : -תורה. -ספורנו ורבינו בחיי. -ספר פניני ספורנו ורבינו בחיי : -לונדון : -תורה. -רוזנבוים, יעקב מאיר. -ספורנו, עובדיה בן יעקב, -בחיי בן אשר בן חלבא, -ראבד, רם משה. -הגדה של פסח מהדורת טנן : -פתח תקוה : -הגדה של פסח. -東京 大学. -東京 大学 総合 研究 博物館 所蔵 渡辺 武男 収集 広島・長崎 被爆 関連 資料 目錄 / -渡辺 武男 収集 広島・長崎 被爆 関連 資料 目錄 -広島・長崎 被爆 関連 資料 目錄 -東京 : -東京 大学 総合 研究 博物館 標本 資料 報告, - 渡辺 武男, -東京大学. -田賀井 篤平, -シルク ロード 草原 の 道 に おける アルジャィ 石窟 の 歴史 と 文化・国際 シンポジウム, 2007年 3月 27日 : -静岡市 : -楊 海英, -報告書 日系 アメリカ人 リーダーシップ シンポジウム 「芸術 から ビジネス まで: 多様 な 職業 を 通じた 日系 アメリカ人 の 貢献」/ -日系 アメリカ人 リーダーシップ シンポジウム 「芸術 から ビジネス まで: 多様 な 職業 を 通じた 日系 アメリカ人 の 貢献」 -東京 : -武田 興欣, -国際 交流 基金. -出来町 天王祭 鹿子神車・河水車 / -鹿子神車・河水車 -名古屋市 : -名古屋市 山車 調查 報告書 ; -名古屋市 文化財 調查 報告 ; -名古屋市 教育 委員会. -中国 対外 貿易 統計 / -2005年版. -東京 : -海外 調查 シリーズ ; -日本 貿易 振興 機構. -専門 用語 分野 の 国際 規格 共同 開発 調查 研究 成果 報告書. -東京 : -Japan. -日本 規格 協会. -群杭 基礎 の 大型 振動台 実験 / -[つくば市] : -土木 研究所 資料, -土木 研究所 (Japan). -マテリアル フロー データ ブック : -第 3版. -つくば市 : -森口 祐一. -橋本 征二, -産総研 レア メタル シンポジウム, 平成 18年 10月 2日. -「産総研 レア メタル シンポジウム」講演 予稿集. -名古屋市 : -産業 技術 総合 研究所. -古川 恵太. -沖縄 泡瀬 干潟 を 例 と した 沿岸 湿地 の 総合的 環境 評価 の 試み / -横須賀市 : -国土 技術 政策 総合 研究所 資料 = -徳川 将軍家 と 会津 松平家 : -会津若松市 : -会津藩 (Japan) -福島 県立 博物館. -若松城 天守閣 (Museum) -شيخ الأرض، محمد. -فشة خلق / -ابو ظبي : -ابن خلدون. -مقدمه ابن خلدون / -١ا) 2. -تهران : -انتشارات بنياد ترجمه و نشر كتاب ؛ -نابادى، محمد )روين. -شهرانى، عنايت الله. -ضرب المثلهاى درى افغانستان : -كلرى، البرتا [Calgary, Alberta, Canada]: -كوشان، محمد طه. -يعقوبي، أحمد بن أبي يعقوب. -تاريخ يعقوبى / -تهران : -انتشارات بناه ترجمه و نشر كتاب ؛ -آيتى، ابراهيم. -غيرت كرمانشاهى، عبد الكريم. -كليات آثار سيد عبد الكريم غيرت كرمانشاهى / -[تهران : -غيرت، محمد سعيد.