|
<?php
|
|
|
|
/**
|
|
* Refbase helper functions (cleanup strings, author extraction)
|
|
*/
|
|
class RefbaseTools {
|
|
|
|
|
|
/// Character translation table
|
|
private static $transtab_refbase_html = array(
|
|
"/__(?!_)(.+?)__/" => "<u>\\1</u>", // the pattern for underline (__...__) must come before the one for italic (_..._)
|
|
"/_(.+?)_/" => "<i>\\1</i>",
|
|
"/\\*\\*(.+?)\\*\\*/" => "<b>\\1</b>",
|
|
"/\\[super:(.+?)\\]/i" => "<sup>\\1</sup>",
|
|
"/\\[sub:(.+?)\\]/i" => "<sub>\\1</sub>",
|
|
"/\\[permil\\]/" => "‰",
|
|
"/\\[infinity\\]/" => "∞",
|
|
"/\\[alpha\\]/" => "α",
|
|
"/\\[beta\\]/" => "β",
|
|
"/\\[gamma\\]/" => "γ",
|
|
"/\\[delta\\]/" => "δ",
|
|
"/\\[epsilon\\]/" => "ε",
|
|
"/\\[zeta\\]/" => "ζ",
|
|
"/\\[eta\\]/" => "η",
|
|
"/\\[theta\\]/" => "θ",
|
|
"/\\[iota\\]/" => "ι",
|
|
"/\\[kappa\\]/" => "κ",
|
|
"/\\[lambda\\]/" => "λ",
|
|
"/\\[mu\\]/" => "μ",
|
|
"/\\[nu\\]/" => "ν",
|
|
"/\\[xi\\]/" => "ξ",
|
|
"/\\[omicron\\]/" => "ο",
|
|
"/\\[pi\\]/" => "π",
|
|
"/\\[rho\\]/" => "ρ",
|
|
"/\\[sigmaf\\]/" => "ς",
|
|
"/\\[sigma\\]/" => "σ",
|
|
"/\\[tau\\]/" => "τ",
|
|
"/\\[upsilon\\]/" => "υ",
|
|
"/\\[phi\\]/" => "φ",
|
|
"/\\[chi\\]/" => "χ",
|
|
"/\\[psi\\]/" => "ψ",
|
|
"/\\[omega\\]/" => "ω",
|
|
"/\\[Alpha\\]/" => "Α",
|
|
"/\\[Beta\\]/" => "Β",
|
|
"/\\[Gamma\\]/" => "Γ",
|
|
"/\\[Delta\\]/" => "Δ",
|
|
"/\\[Epsilon\\]/" => "Ε",
|
|
"/\\[Zeta\\]/" => "Ζ",
|
|
"/\\[Eta\\]/" => "Η",
|
|
"/\\[Theta\\]/" => "Θ",
|
|
"/\\[Iota\\]/" => "Ι",
|
|
"/\\[Kappa\\]/" => "Κ",
|
|
"/\\[Lambda\\]/" => "Λ",
|
|
"/\\[Mu\\]/" => "Μ",
|
|
"/\\[Nu\\]/" => "Ν",
|
|
"/\\[Xi\\]/" => "Ξ",
|
|
"/\\[Omicron\\]/" => "Ο",
|
|
"/\\[Pi\\]/" => "Π",
|
|
"/\\[Rho\\]/" => "Ρ",
|
|
"/\\[Sigma\\]/" => "Σ",
|
|
"/\\[Tau\\]/" => "Τ",
|
|
"/\\[Upsilon\\]/" => "Υ",
|
|
"/\\[Phi\\]/" => "Φ",
|
|
"/\\[Chi\\]/" => "Χ",
|
|
"/\\[Psi\\]/" => "Ψ",
|
|
"/\\[Omega\\]/" => "Ω",
|
|
"/(?:\"|")(.+?)(?:\"|")/" => "“\\1”",
|
|
"/ +- +/" => " – "
|
|
);
|
|
|
|
// EXTRACT AUTHOR'S LAST NAME
|
|
// this function takes the contents of the author field and will extract the last name of a particular author (specified by position)
|
|
// (e.g., setting '$authorPosition' to "1" will return the 1st author's last name)
|
|
// Note: this function assumes that:
|
|
// 1. within one author object, there's only *one* delimiter separating author name & initials!
|
|
// 2. author objects are stored in the db as "<author_name><author_initials_delimiter><author_initials>", i.e., initials follow *after* the author's name!
|
|
// Required Parameters:
|
|
// 1. pattern describing delimiter that separates different authors
|
|
// 2. pattern describing delimiter that separates author name & initials (within one author)
|
|
// 3. position of the author whose last name shall be extracted (e.g., "1" will return the 1st author's last name)
|
|
// 4. contents of the author field
|
|
public static function extractAuthorsLastName( $oldBetweenAuthorsDelim, $oldAuthorsInitialsDelim, $authorPosition, $authorContents ) {
|
|
$authorsArray = preg_split( "/" . $oldBetweenAuthorsDelim . "/", $authorContents ); // get a list of all authors for this record
|
|
$authorPosition = $authorPosition - 1; // php array elements start with "0", so we decrease the authors position by 1
|
|
$singleAuthor = $authorsArray[$authorPosition]; // for the author in question, extract the full author name (last name & initials)
|
|
$singleAuthorArray = preg_split( "/" . $oldAuthorsInitialsDelim . "/", $singleAuthor ); // then, extract author name & initials to separate list items
|
|
$singleAuthorsLastName = $singleAuthorArray[0]; // extract this author's last name into a new variable
|
|
return $singleAuthorsLastName;
|
|
}
|
|
|
|
// EXTRACT AUTHOR'S GIVEN NAME
|
|
// this function takes the contents of the author field and will extract the given name of a particular author (specified by position)
|
|
// (e.g., setting '$authorPosition' to "1" will return the 1st author's given name)
|
|
// Required Parameters:
|
|
// 1. pattern describing delimiter that separates different authors
|
|
// 2. pattern describing delimiter that separates author name & initials (within one author)
|
|
// 3. position of the author whose last name shall be extracted (e.g., "1" will return the 1st author's last name)
|
|
// 4. contents of the author field
|
|
public static function extractAuthorsGivenName( $oldBetweenAuthorsDelim, $oldAuthorsInitialsDelim, $authorPosition, $authorContents ) {
|
|
$authorsArray = preg_split( "/" . $oldBetweenAuthorsDelim . "/", $authorContents ); // get a list of all authors for this record
|
|
$authorPosition = $authorPosition - 1; // php array elements start with "0", so we decrease the authors position by 1
|
|
$singleAuthor = $authorsArray[$authorPosition]; // for the author in question, extract the full author name (last name & initials)
|
|
$singleAuthorArray = preg_split( "/" . $oldAuthorsInitialsDelim . "/", $singleAuthor ); // then, extract author name & initials to separate list items
|
|
if ( !empty($singleAuthorArray[1]) ) {
|
|
$singleAuthorsGivenName = $singleAuthorArray[1]; // extract this author's last name into a new variable
|
|
} else {
|
|
$singleAuthorsGivenName = '';
|
|
}
|
|
return $singleAuthorsGivenName;
|
|
}
|
|
|
|
// Perform search & replace actions on the given text input:
|
|
// ('$includesSearchPatternDelimiters' must be a boolean value that specifies whether the leading and trailing slashes
|
|
// are included within the search pattern ['true'] or not ['false'])
|
|
public static function searchReplaceText( $sourceString, $includesSearchPatternDelimiters ) {
|
|
// apply the search & replace actions defined in '$transtab_refbase_html' to the text passed in '$sourceString':
|
|
foreach ( self::$transtab_refbase_html as $searchString => $replaceString ) {
|
|
if ( !$includesSearchPatternDelimiters ) {
|
|
$searchString = "/" . $searchString . "/"; // add search pattern delimiters
|
|
}
|
|
if ( preg_match($searchString, $sourceString ) ) {
|
|
$sourceString = preg_replace( $searchString, $replaceString, $sourceString );
|
|
}
|
|
}
|
|
return $sourceString;
|
|
}
|
|
|
|
|
|
}
|
|
|