Open Journal Systems  3.3.0
NameHelper.php
1 <?php
2 /*
3  * citeproc-php
4  *
5  * @link http://github.com/seboettg/citeproc-php for the source repository
6  * @copyright Copyright (c) 2017 Sebastian Böttger.
7  * @license https://opensource.org/licenses/MIT
8  */
9 
10 namespace Seboettg\CiteProc\Util;
11 
14 use stdClass;
15 
22 {
23 
30  public static function identicalAuthors($precedingItem, $currentAuthor)
31  {
32  if (!property_exists($precedingItem, "author")) {
33  throw new CiteProcException("No author to present");
34  }
35 
36  if (count($precedingItem->author) !== count($currentAuthor)) {
37  return false;
38  }
39  foreach ($currentAuthor as $current) {
40  if (self::precedingHasAuthor($precedingItem, $current)) {
41  continue;
42  }
43  return false;
44  }
45  return true;
46  }
47 
53  public static function precedingHasAuthor($preceding, $name)
54  {
55  foreach ($preceding->author as $author) {
56  if ($author->family === $name->family && $author->given === $name->given) {
57  return true;
58  }
59  }
60  return false;
61  }
62 
63 
70  public static function appendParticleTo(&$data, $namePart, $particle)
71  {
72  if (isset($data->{$particle}) && isset($data->{$namePart})) {
73  $data->{$namePart} = $data->{$namePart}." ".$data->{$particle}; // append $particle to $namePart
74  unset($data->{$particle}); //remove particle from $data
75  }
76  }
77 
84  public static function prependParticleTo(&$data, $namePart, $particle)
85  {
86  if (isset($data->{$particle}) && isset($data->{$namePart})) {
87  $data->{$namePart} = $data->{$particle}." ".$data->{$namePart}; //prepend $particle to $namePart
88  unset($data->{$particle}); //remove particle from $data
89  }
90  }
91 
97  public static function sameNames($persons1, $persons2)
98  {
99  $same = count($persons1) === count($persons2);
100 
101  if (!$same) {
102  return false;
103  }
104 
105  array_walk($persons1, function($name, $key) use ($persons2, &$same) {
106  $family1 = $name->family;
107  $family2 = $persons2[$key]->family;
108  $same = $same && ($family1 === $family2);
109  });
110 
111  return (bool) $same;
112  }
113 
119  public static function normalizeName($data)
120  {
121  if (empty($data->family)) {
122  throw new CiteProcException("Illegal argument. Name has no family name.");
123  }
124  return $data->family.(isset($data->given) ? $data->given : "");
125  }
126 
127  public static function addExtendedMarkup($nameVar, $nameItem, $formattedName)
128  {
129  $markupExtension = CiteProc::getContext()->getMarkupExtension();
130  if (array_key_exists($nameVar, $markupExtension)) {
131  $function = $markupExtension[$nameVar];
132  if (is_callable($function)) {
133  return $function($nameItem, $formattedName);
134  }
135  } elseif (array_key_exists($mode = CiteProc::getContext()->getMode(), $markupExtension)) {
136  if (array_key_exists($nameVar, $markupExtension[$mode])) {
137  $function = $markupExtension[$mode][$nameVar];
138  if (is_callable($function)) {
139  return $function($nameItem, $formattedName);
140  }
141  }
142  }
143  return $formattedName;
144  }
145 }
Seboettg\CiteProc\Util\NameHelper\normalizeName
static normalizeName($data)
Definition: NameHelper.php:119
Seboettg\CiteProc\Util\NameHelper
Definition: NameHelper.php:21
Seboettg\CiteProc\Util\NameHelper\precedingHasAuthor
static precedingHasAuthor($preceding, $name)
Definition: NameHelper.php:53
Seboettg\CiteProc\CiteProc
Definition: CiteProc.php:32
Seboettg\CiteProc\Exception\CiteProcException
Definition: CiteProcException.php:20
Seboettg\CiteProc\Util\NameHelper\prependParticleTo
static prependParticleTo(&$data, $namePart, $particle)
Definition: NameHelper.php:84
Seboettg\CiteProc\Util\NameHelper\sameNames
static sameNames($persons1, $persons2)
Definition: NameHelper.php:97
Seboettg\CiteProc\Util
Definition: CiteProcHelper.php:10
Seboettg\CiteProc\Util\NameHelper\identicalAuthors
static identicalAuthors($precedingItem, $currentAuthor)
Definition: NameHelper.php:30
Seboettg\CiteProc\Util\NameHelper\appendParticleTo
static appendParticleTo(&$data, $namePart, $particle)
Definition: NameHelper.php:70
Seboettg\CiteProc\Util\NameHelper\addExtendedMarkup
static addExtendedMarkup($nameVar, $nameItem, $formattedName)
Definition: NameHelper.php:127