public function PARSECREATORS::parseAuthor in Bibliography Module 7
Same name and namespace in other branches
- 6.2 modules/bibtexParse/PARSECREATORS.php \PARSECREATORS::parseAuthor()
- 6 bibtexParse/PARSECREATORS.php \PARSECREATORS::parseAuthor()
- 7.3 plugins/biblio_style/bibtex/PARSECREATORS.php \PARSECREATORS::parseAuthor()
- 7.2 modules/bibtexParse/PARSECREATORS.php \PARSECREATORS::parseAuthor()
Create writer arrays from bibtex input.
'author field can be (delimiters between authors are 'and' or '&'): 1. <first-tokens> <von-tokens> <last-tokens> 2. <von-tokens> <last-tokens>, <first-tokens> 3. <von-tokens> <last-tokens>, <jr-tokens>, <first-tokens>
3 calls to PARSECREATORS::parseAuthor()
- Creators::setCreator in modules/
bibtexParse/ PARSECREATORS.php - Creators::setCreators in modules/
bibtexParse/ PARSECREATORS.php - Update object with an array of authors.
- PARSECREATORS::parseArray in modules/
bibtexParse/ PARSECREATORS.php
File
- modules/
bibtexParse/ PARSECREATORS.php, line 226 - Classes Creators and PARSECREATORS.
Class
- PARSECREATORS
- Released through http://bibliophile.sourceforge.net under the GPL licence. Do whatever you like with this -- some credit to the author(s) would be appreciated.
Code
public function parseAuthor($value, $type = 'author') {
$appellation = $prefix = $surname = $firstname = $initials = '';
$this->prefix = array();
$author = explode(",", preg_replace("/\\s{2,}/", ' ', trim($value)));
$size = count($author);
// No commas therefore something like Mark Grimshaw, Mark Nicholas Grimshaw, M N Grimshaw, Mark N. Grimshaw.
if ($size == 1) {
// Is complete surname enclosed in {...}, unless the string starts with a backslash (\) because then it is
// probably a special latex-sign..
// 2006.02.11 DR: in the last case, any NESTED curly braces should also be taken into account! so second
// clause rules out things such as author="a{\"{o}}".
if (preg_match("/(.*) {([^\\\\].*)}/", $value, $matches) && !preg_match("/(.*) {\\\\.{.*}.*}/", $value, $matches2)) {
$author = preg_split(" ", $matches[1]);
$surname = $matches[2];
}
else {
$author = preg_split(" ", $value);
// Last of array is surname (no prefix if entered correctly)
$surname = array_pop($author);
}
}
elseif ($size == 2) {
// First of array is surname (perhaps with prefix)
list($surname, $prefix) = $this
->grabSurname(array_shift($author));
}
else {
// Middle of array is 'Jr.', 'IV' etc.
$appellation = join(' ', array_splice($author, 1, 1));
// First of array is surname (perhaps with prefix)
list($surname, $prefix) = $this
->grabSurname(array_shift($author));
}
$remainder = join(" ", $author);
list($firstname, $initials) = $this
->grabFirstnameInitials($remainder);
if (!empty($this->prefix)) {
$prefix = join(' ', $this->prefix);
}
$surname = $surname . ' ' . $appellation;
$creator = array(
'firstname' => utf8_encode(trim($firstname)),
'initials' => utf8_encode(trim($initials)),
'lastname' => utf8_encode(trim($surname)),
'prefix' => trim($prefix),
);
if (isset($creator)) {
$creator['type'] = $this->typeMap[$type];
$creator['md5'] = $this
->md5sum($creator);
return $creator;
}
return FALSE;
}