Skip to content

Commit f805e6b

Browse files
committed
Add chopPunctuation to Person
1 parent 23d989c commit f805e6b

File tree

5 files changed

+250
-13
lines changed

5 files changed

+250
-13
lines changed

src/Fields/Field.php

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ class Field implements \JsonSerializable
1414
*/
1515
public $properties = [];
1616

17+
public static $glue = ' : ';
18+
public static $chopPunctuation = true;
19+
1720
protected $field;
1821

1922
public function __construct(\File_MARC_Field $field)
@@ -53,6 +56,16 @@ public function __toString()
5356
return $this->field->__toString();
5457
}
5558

59+
protected function clean($value, $options = [])
60+
{
61+
$chopPunctuation = isset($options['chopPunctuation']) ? $options['chopPunctuation'] : static::$chopPunctuation;
62+
$value = trim($value);
63+
if ($chopPunctuation) {
64+
$value = rtrim($value, '[.:,;]$');
65+
}
66+
return $value;
67+
}
68+
5669
/**
5770
* @param string|string[] $codes
5871
* @return array
@@ -76,16 +89,13 @@ protected function getSubfieldValues($codes)
7689
* Return concatenated string of the given subfields.
7790
*
7891
* @param string[] $codes
79-
* @param string $glue
92+
* @param array $options
8093
* @return string
8194
*/
82-
protected function toString($codes, $glue = ' ', $chopPunctuation = true)
95+
protected function toString($codes, $options = [])
8396
{
84-
$value = trim(implode($glue, $this->getSubfieldValues($codes)));
85-
if ($chopPunctuation) {
86-
$value = preg_replace('/[.:,;]$/', '', $value);
87-
}
88-
return $value;
97+
$glue = isset($options['glue']) ? $options['glue'] : static::$glue;
98+
return $this->clean(implode($glue, $this->getSubfieldValues($codes)), $options);
8999
}
90100

91101
/**

src/Fields/Person.php

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class Person extends Field implements FieldInterface
1111
*/
1212
public $properties = ['type', 'vocabulary', 'name', 'titulation', 'dates', 'id', 'relator_term', 'relationship'];
1313

14-
public static $glue = ' : ';
14+
public static $formatWithDate = '{name} ({dates})';
1515
public static $termComponentCodes = ['a', 'b', 'x', 'y', 'z'];
1616

1717
const MAIN_ENTRY= '100';
@@ -73,10 +73,12 @@ public function getRelationship()
7373

7474
public function __toString()
7575
{
76-
if ($this->getDates()) {
77-
return sprintf('%s (%s)', $this->getName(), $this->getDates());
78-
}
76+
$tpl = $this->getDates() ? self::$formatWithDate : '{name}';
7977

80-
return $this->getName();
78+
return str_replace(
79+
['{name}', '{dates}'],
80+
[$this->clean($this->getName()), $this->clean($this->getDates())],
81+
$tpl
82+
);
8183
}
8284
}

src/Fields/Subject.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public function getParts()
9393

9494
public function getTerm()
9595
{
96-
return $this->toString(self::$termComponentCodes, self::$glue, self::$chopPunctuation);
96+
return $this->toString(self::$termComponentCodes);
9797
}
9898

9999
public function __toString()

tests/PersonFieldTest.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
3+
use PHPUnit\Framework\TestCase;
4+
use Scriptotek\Marc\Collection;
5+
use Scriptotek\Marc\Fields\Person;
6+
7+
class PersonFieldTest extends TestCase
8+
{
9+
protected function getNthrecord($filename, $n)
10+
{
11+
$records = Collection::fromFile('tests/data/' . $filename)->toArray();
12+
13+
return $records[$n - 1];
14+
}
15+
16+
public function testSimple()
17+
{
18+
$record = $this->getNthrecord('sru-alma.xml', 1);
19+
20+
# Vocabulary from indicator2
21+
$person = $record->creators[0];
22+
$this->assertEquals('Gell-Mann, Murray', strval($person));
23+
}
24+
25+
public function testWithDatesAndIsbd()
26+
{
27+
$record = $this->getNthrecord('sru-loc2.xml', 1);
28+
29+
# Vocabulary from indicator2
30+
$person = $record->creators[0];
31+
$this->assertEquals('Einstein, Albert (1879-1955)', strval($person));
32+
}
33+
}

tests/data/sru-loc2.xml

Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
<?xml version="1.0"?>
2+
<zs:searchRetrieveResponse xmlns:zs="http://www.loc.gov/zing/srw/"><zs:version>1.1</zs:version><zs:numberOfRecords>1</zs:numberOfRecords><zs:records><zs:record><zs:recordSchema>marcxml</zs:recordSchema><zs:recordPacking>xml</zs:recordPacking><zs:recordData><record xmlns="http://www.loc.gov/MARC21/slim">
3+
<leader>03313cim a2200649 a 4500</leader>
4+
<controlfield tag="001">536510</controlfield>
5+
<controlfield tag="005">20160209192238.0</controlfield>
6+
<controlfield tag="006">m e h f </controlfield>
7+
<controlfield tag="007">cr|nna||||||da</controlfield>
8+
<controlfield tag="007">sz||mnnnnn|ned</controlfield>
9+
<controlfield tag="008">080422s2005 dcunnnnes z| n eng </controlfield>
10+
<datafield tag="010" ind1=" " ind2=" ">
11+
<subfield code="a"> 2002997016</subfield>
12+
</datafield>
13+
<datafield tag="024" ind1="7" ind2=" ">
14+
<subfield code="a">us-nls-db52877</subfield>
15+
<subfield code="2">dtb</subfield>
16+
</datafield>
17+
<datafield tag="040" ind1=" " ind2=" ">
18+
<subfield code="a">DLC-B</subfield>
19+
<subfield code="b">eng</subfield>
20+
<subfield code="c">DLC-B</subfield>
21+
</datafield>
22+
<datafield tag="041" ind1="1" ind2=" ">
23+
<subfield code="a">eng</subfield>
24+
<subfield code="h">ger</subfield>
25+
</datafield>
26+
<datafield tag="072" ind1=" " ind2="7">
27+
<subfield code="a">SCIEAN</subfield>
28+
<subfield code="2">NBDL</subfield>
29+
</datafield>
30+
<datafield tag="082" ind1="0" ind2="0">
31+
<subfield code="a">530.1</subfield>
32+
<subfield code="a">ANF</subfield>
33+
</datafield>
34+
<datafield tag="084" ind1=" " ind2=" ">
35+
<subfield code="a">DB 52877 (May be available only for download)</subfield>
36+
<subfield code="2">z</subfield>
37+
</datafield>
38+
<datafield tag="100" ind1="1" ind2=" ">
39+
<subfield code="a">Einstein, Albert,</subfield>
40+
<subfield code="d">1879-1955.</subfield>
41+
</datafield>
42+
<datafield tag="240" ind1="1" ind2="0">
43+
<subfield code="a">U&#x308;ber die spezielle und die allgemeine Relativita&#x308;tstheorie.</subfield>
44+
<subfield code="l">English</subfield>
45+
</datafield>
46+
<datafield tag="245" ind1="1" ind2="0">
47+
<subfield code="a">Relativity :</subfield>
48+
<subfield code="b">the special and the general theory /</subfield>
49+
<subfield code="c">by Albert Einstein ; authorized translation by Robert W. Lawson.</subfield>
50+
<subfield code="h">[sound recording]</subfield>
51+
</datafield>
52+
<datafield tag="260" ind1=" " ind2=" ">
53+
<subfield code="a">Washington, D.C. :</subfield>
54+
<subfield code="b">National Library Service for the Blind and Physically Handicapped, Library of Congress,</subfield>
55+
<subfield code="c">2005.</subfield>
56+
<subfield code="f">(APH, recording studio).</subfield>
57+
</datafield>
58+
<datafield tag="300" ind1=" " ind2=" ">
59+
<subfield code="a">1 online resource (audio (4 hours, 56 minutes))</subfield>
60+
</datafield>
61+
<datafield tag="306" ind1=" " ind2=" ">
62+
<subfield code="a">045600</subfield>
63+
</datafield>
64+
<datafield tag="336" ind1=" " ind2=" ">
65+
<subfield code="a">spoken word</subfield>
66+
<subfield code="b">spw</subfield>
67+
<subfield code="2">rdacontent</subfield>
68+
</datafield>
69+
<datafield tag="337" ind1=" " ind2=" ">
70+
<subfield code="a">audio</subfield>
71+
<subfield code="b">s</subfield>
72+
<subfield code="2">rdamedia</subfield>
73+
</datafield>
74+
<datafield tag="337" ind1=" " ind2=" ">
75+
<subfield code="a">computer</subfield>
76+
<subfield code="b">c</subfield>
77+
<subfield code="2">rdamedia</subfield>
78+
</datafield>
79+
<datafield tag="338" ind1=" " ind2=" ">
80+
<subfield code="a">online resource</subfield>
81+
<subfield code="b">cr</subfield>
82+
<subfield code="2">rdacarrier</subfield>
83+
</datafield>
84+
<datafield tag="344" ind1=" " ind2=" ">
85+
<subfield code="a">digital</subfield>
86+
<subfield code="g">mono</subfield>
87+
<subfield code="2">rda</subfield>
88+
</datafield>
89+
<datafield tag="347" ind1=" " ind2=" ">
90+
<subfield code="a">audio file</subfield>
91+
<subfield code="b">Daisy</subfield>
92+
<subfield code="2">rda</subfield>
93+
</datafield>
94+
<datafield tag="385" ind1=" " ind2=" ">
95+
<subfield code="n">age</subfield>
96+
<subfield code="a">Adults</subfield>
97+
<subfield code="2">lcdgt</subfield>
98+
</datafield>
99+
<datafield tag="500" ind1=" " ind2=" ">
100+
<subfield code="a">Originally issued by NLS on cassette in 2002.</subfield>
101+
</datafield>
102+
<datafield tag="504" ind1=" " ind2=" ">
103+
<subfield code="a">Includes bibliographical references.</subfield>
104+
</datafield>
105+
<datafield tag="506" ind1=" " ind2=" ">
106+
<subfield code="a">Availability restricted to persons meeting the eligibility requirements of the National Library Service for the Blind and Physically Handicapped, Library of Congress.</subfield>
107+
</datafield>
108+
<datafield tag="511" ind1="0" ind2=" ">
109+
<subfield code="a">Narrated by: Fred Major.</subfield>
110+
</datafield>
111+
<datafield tag="516" ind1=" " ind2=" ">
112+
<subfield code="a">Digital talking book. 1 level and 49 navigation points. Digitally mastered.</subfield>
113+
</datafield>
114+
<datafield tag="520" ind1=" " ind2=" ">
115+
<subfield code="a">Scientist Albert Einstein presents his theory of relativity--the measurement and study of space and time--for the layman who "is not conversant with the mathematical apparatus of theoretical physics." Originally published in 1916. This fifteenth edition includes five appendixes. 1952.</subfield>
116+
</datafield>
117+
<datafield tag="521" ind1=" " ind2=" ">
118+
<subfield code="a">Male narrator.</subfield>
119+
<subfield code="b">NLS/BPH</subfield>
120+
</datafield>
121+
<datafield tag="530" ind1=" " ind2=" ">
122+
<subfield code="a">May also be available for loan on cartridge. Contact your cooperating library for more information.</subfield>
123+
</datafield>
124+
<datafield tag="534" ind1=" " ind2=" ">
125+
<subfield code="p">Recorded from:</subfield>
126+
<subfield code="b">15th ed.</subfield>
127+
<subfield code="c">New York : Three Rivers Press, c1961.</subfield>
128+
<subfield code="z">0517884410</subfield>
129+
</datafield>
130+
<datafield tag="538" ind1=" " ind2=" ">
131+
<subfield code="a">Full audio and structure.</subfield>
132+
</datafield>
133+
<datafield tag="538" ind1=" " ind2=" ">
134+
<subfield code="a">System requirements: NLS authorized ANSI/NISO Z39.86-2002 digital talking book (dtb) player compatible with NLS flash cartridges. Web version requires computer with Internet access, BARD password and NLS authorized digital talking book player. Contact your cooperating library or the National Library Service for the Blind and Physically Handicapped, Library of Congress, for more information.</subfield>
135+
</datafield>
136+
<datafield tag="542" ind1=" " ind2=" ">
137+
<subfield code="g">1961</subfield>
138+
<subfield code="d">Estate of Albert Einstein</subfield>
139+
</datafield>
140+
<datafield tag="588" ind1=" " ind2=" ">
141+
<subfield code="a">Description based on cassette record.</subfield>
142+
</datafield>
143+
<datafield tag="593" ind1=" " ind2=" ">
144+
<subfield code="a">1</subfield>
145+
<subfield code="b">49</subfield>
146+
<subfield code="c">DM</subfield>
147+
</datafield>
148+
<datafield tag="650" ind1=" " ind2="0">
149+
<subfield code="a">Relativity (Physics)</subfield>
150+
</datafield>
151+
<datafield tag="655" ind1=" " ind2="4">
152+
<subfield code="a">Downloadable books.</subfield>
153+
</datafield>
154+
<datafield tag="655" ind1=" " ind2="4">
155+
<subfield code="a">Nonfiction.</subfield>
156+
</datafield>
157+
<datafield tag="655" ind1=" " ind2="7">
158+
<subfield code="a">Talking books.</subfield>
159+
<subfield code="2">lcgft</subfield>
160+
</datafield>
161+
<datafield tag="700" ind1="1" ind2=" ">
162+
<subfield code="a">Major, Fred,</subfield>
163+
<subfield code="e">narrator.</subfield>
164+
</datafield>
165+
<datafield tag="852" ind1="8" ind2="1">
166+
<subfield code="a">DLC-B</subfield>
167+
<subfield code="c">DB 52877</subfield>
168+
<subfield code="z">NLS/BPH</subfield>
169+
</datafield>
170+
<datafield tag="856" ind1="4" ind2="0">
171+
<subfield code="u">http://hdl.loc.gov/loc.nls/db.52877</subfield>
172+
<subfield code="3">Downloadable talking book.</subfield>
173+
<subfield code="x">xbard audio</subfield>
174+
</datafield>
175+
<datafield tag="906" ind1=" " ind2=" ">
176+
<subfield code="a">7</subfield>
177+
<subfield code="b">cbc</subfield>
178+
<subfield code="c">blndbks</subfield>
179+
</datafield>
180+
<datafield tag="951" ind1=" " ind2=" ">
181+
<subfield code="a">2002</subfield>
182+
</datafield>
183+
<datafield tag="955" ind1=" " ind2=" ">
184+
<subfield code="a">retrordapartial</subfield>
185+
</datafield>
186+
<datafield tag="955" ind1=" " ind2=" ">
187+
<subfield code="a">Retrospective copy allotment 2008 First report</subfield>
188+
</datafield>
189+
<datafield tag="985" ind1=" " ind2=" ">
190+
<subfield code="a">NLS DB GRP 5</subfield>
191+
</datafield>
192+
</record></zs:recordData><zs:recordPosition>1</zs:recordPosition></zs:record></zs:records><zs:echoedSearchRetrieveRequest><zs:version>1.1</zs:version><zs:query>dc.creator=Einstein AND dc.date=2005</zs:query><zs:maximumRecords>10</zs:maximumRecords><zs:recordPacking>xml</zs:recordPacking><zs:recordSchema>marcxml</zs:recordSchema></zs:echoedSearchRetrieveRequest></zs:searchRetrieveResponse>

0 commit comments

Comments
 (0)