Refbase update_2021-01-28_15_58
This commit is contained in:
678
cite/styles/cite_AMA.php
Normal file
678
cite/styles/cite_AMA.php
Normal file
@@ -0,0 +1,678 @@
|
||||
<?php
|
||||
// Project: Web Reference Database (refbase) <http://www.refbase.net>
|
||||
// Copyright: Matthias Steffens <mailto:refbase@extracts.de> and the file's
|
||||
// original author(s).
|
||||
//
|
||||
// This code is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY. Please see the GNU General Public
|
||||
// License for more details.
|
||||
//
|
||||
// File: ./cite/styles/cite_AMA.php
|
||||
// Repository: $HeadURL$
|
||||
// Author(s): Matthias Steffens <mailto:refbase@extracts.de> and
|
||||
// Richard Karnesky <mailto:karnesky@gmail.com>
|
||||
//
|
||||
// Created: 25-Feb-08, 20:05
|
||||
// Modified: $Date: 2012-02-27 20:25:30 +0000 (Mon, 27 Feb 2012) $
|
||||
// $Author$
|
||||
// $Revision: 1337 $
|
||||
|
||||
// This is a citation style file (which must reside within the 'cite/styles/' sub-directory of your refbase root directory). It contains a
|
||||
// version of the 'citeRecord()' function that outputs a reference list from selected records according to the citation style used by
|
||||
// the American Medical Association (AMA)
|
||||
|
||||
// based on 'cite_Chicago.php'
|
||||
|
||||
// TODO: - abstracts, conference proceedings, patents, reports
|
||||
// - book/volume/report/etc titles should be formatted in heading caps
|
||||
// - don't add a dot if the abbreviated journal (or series title) ends with a dot!
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
// --- BEGIN CITATION STYLE ---
|
||||
|
||||
function citeRecord($row, $citeStyle, $citeType, $markupPatternsArray, $encodeHTML)
|
||||
{
|
||||
$record = ""; // make sure that our buffer variable is empty
|
||||
|
||||
// --- BEGIN TYPE = JOURNAL ARTICLE / MAGAZINE ARTICLE / NEWSPAPER ARTICLE --------------------------------------------------------------
|
||||
|
||||
if (preg_match("/^(Journal Article|Magazine Article|Newspaper Article)$/", $row['type']))
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($row['author'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", ", // 5.
|
||||
"/ *, */", // 6.
|
||||
" ", // 7.
|
||||
" ", // 8.
|
||||
"", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"6", // 13.
|
||||
"3", // 14.
|
||||
", et al.", // 15.
|
||||
$encodeHTML // 16.
|
||||
);
|
||||
|
||||
if (!preg_match("/\. *$/", $author))
|
||||
$record .= $author . ".";
|
||||
else
|
||||
$record .= $author;
|
||||
}
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
if (!empty($row['author']))
|
||||
$record .= " ";
|
||||
|
||||
$record .= $row['title'];
|
||||
}
|
||||
|
||||
// From here on we'll assume that at least either the 'author' or the 'title' field did contain some contents
|
||||
// if this is not the case, the output string will begin with a space. However, any preceding/trailing whitespace will be removed at the cleanup stage (see below)
|
||||
|
||||
if (!preg_match("/[?!.] *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
if (!empty($row['abbrev_journal'])) // abbreviated journal name
|
||||
$record .= " " . $markupPatternsArray["italic-prefix"] . $row['abbrev_journal'] . $markupPatternsArray["italic-suffix"];
|
||||
|
||||
// if there's no abbreviated journal name, we'll use the full journal name
|
||||
elseif (!empty($row['publication'])) // publication (= journal) name
|
||||
$record .= " " . $markupPatternsArray["italic-prefix"] . $row['publication'] . $markupPatternsArray["italic-suffix"];
|
||||
|
||||
if (preg_match("/^(Magazine Article|Newspaper Article)$/", $row['type']) AND !preg_match("/^\d+$/", $row['volume'])) // for newspaper articles (and magazine articles if w/o volume number), volume (=month) and issue (=day) information is printed before the year
|
||||
{
|
||||
if (!empty($row['volume'])) // volume (=month)
|
||||
$record .= ". " . $row['volume'];
|
||||
|
||||
if (!empty($row['issue'])) // issue (=day)
|
||||
$record .= " " . $row['issue'];
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
$record .= ", " . $row['year'];
|
||||
}
|
||||
else // journal article (or a magazine article with volume numbers)
|
||||
{
|
||||
if (!empty($row['year'])) // year
|
||||
$record .= ". " . $row['year'];
|
||||
|
||||
if (!empty($row['volume']) || !empty($row['issue']))
|
||||
$record .= ";";
|
||||
|
||||
if (!empty($row['volume'])) // volume
|
||||
$record .= $row['volume'];
|
||||
|
||||
if (!empty($row['issue'])) // issue
|
||||
$record .= "(" . $row['issue'] . ")";
|
||||
}
|
||||
|
||||
if (!empty($row['pages'])) // pages
|
||||
{
|
||||
if (!empty($row['year']) || !empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])) // only add ": " if either year, volume, issue, abbrev_journal or publication isn't empty
|
||||
$record .= ":";
|
||||
|
||||
$record .= formatPageInfo($row['pages'], $markupPatternsArray["endash"]); // function 'formatPageInfo()' is defined in 'cite.inc.php'
|
||||
}
|
||||
|
||||
if ($row['online_publication'] == "yes") // this record refers to an online article
|
||||
{
|
||||
// append an optional string (given in 'online_citation') plus the current date and the DOI (or URL):
|
||||
|
||||
$today = date("F j, Y");
|
||||
|
||||
if (!empty($row['online_citation'])) // online_citation
|
||||
{
|
||||
if (!empty($row['year']) || !empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])) // only add ":" or "," if either year, volume, issue, abbrev_journal or publication isn't empty
|
||||
{
|
||||
if (empty($row['pages']))
|
||||
$record .= ":"; // print instead of pages
|
||||
else
|
||||
$record .= ","; // append to pages
|
||||
}
|
||||
|
||||
$record .= $row['online_citation'];
|
||||
}
|
||||
|
||||
if (!empty($row['doi'])) // doi
|
||||
{
|
||||
if (!empty($row['online_citation']) OR (empty($row['online_citation']) AND (!empty($row['year']) || !empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])))) // only add "." if online_citation isn't empty, or else if either year, volume, issue, abbrev_journal or publication isn't empty
|
||||
$record .= ".";
|
||||
|
||||
if ($encodeHTML)
|
||||
$record .= " " . encodeHTML("http://dx.doi.org/" . $row['doi']) . ". Accessed " . $today;
|
||||
else
|
||||
$record .= " " . "http://dx.doi.org/" . $row['doi'] . ". Accessed " . $today;
|
||||
}
|
||||
elseif (!empty($row['url'])) // url
|
||||
{
|
||||
if (!empty($row['online_citation']) OR (empty($row['online_citation']) AND (!empty($row['year']) || !empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])))) // only add "." if online_citation isn't empty, or else if either year, volume, issue, abbrev_journal or publication isn't empty
|
||||
$record .= ".";
|
||||
|
||||
if ($encodeHTML)
|
||||
$record .= " " . encodeHTML($row['url']) . ". Accessed " . $today;
|
||||
else
|
||||
$record .= " " . $row['url'] . ". Accessed " . $today;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// --- BEGIN TYPE = ABSTRACT / BOOK CHAPTER / CONFERENCE ARTICLE ------------------------------------------------------------------------
|
||||
|
||||
elseif (preg_match("/^(Abstract|Book Chapter|Conference Article)$/", $row['type']))
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($row['author'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", ", // 5.
|
||||
"/ *, */", // 6.
|
||||
" ", // 7.
|
||||
" ", // 8.
|
||||
"", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"6", // 13.
|
||||
"3", // 14.
|
||||
", et al.", // 15.
|
||||
$encodeHTML // 16.
|
||||
);
|
||||
|
||||
if (!preg_match("/\. *$/", $author))
|
||||
$record .= $author . ".";
|
||||
else
|
||||
$record .= $author;
|
||||
}
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
if (!empty($row['author']))
|
||||
$record .= " ";
|
||||
|
||||
$record .= $row['title'];
|
||||
}
|
||||
|
||||
if ($row['type'] == "Abstract") // for abstracts, add "[abstract]" label
|
||||
$record .= " [abstract]";
|
||||
|
||||
|
||||
// From here on we'll assume that at least either the 'author' or the 'title' field did contain some contents
|
||||
// if this is not the case, the output string will begin with a space. However, any preceding/trailing whitespace will be removed at the cleanup stage (see below)
|
||||
|
||||
if (!empty($row['editor'])) // editor
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$editor = reArrangeAuthorContents($row['editor'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", ", // 5.
|
||||
"/ *, */", // 6.
|
||||
" ", // 7.
|
||||
" ", // 8.
|
||||
"", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"6", // 13.
|
||||
"3", // 14.
|
||||
", et al.", // 15.
|
||||
$encodeHTML // 16.
|
||||
);
|
||||
|
||||
if (!preg_match("/[?!.] *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " In: " . $editor . ", ";
|
||||
if (preg_match("/^[^;\r\n]+(;[^;\r\n]+)+$/", $row['editor'])) // there are at least two editors (separated by ';')
|
||||
$record .= "eds";
|
||||
else // there's only one editor (or the editor field is malformed with multiple editors but missing ';' separator[s])
|
||||
$record .= "ed";
|
||||
}
|
||||
|
||||
$publication = preg_replace("/[ \r\n]*\(Eds?:[^\)\r\n]*\)/i", "", $row['publication']);
|
||||
if (!empty($publication)) // publication
|
||||
{
|
||||
if (!preg_match("/[?!.] *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
if (empty($row['editor']))
|
||||
$record .= " In:";
|
||||
|
||||
// TODO: container titles should be formatted in heading caps, however, this doesn't yet work correctly if the publication title contains HTML entities
|
||||
$record .= " " . $markupPatternsArray["italic-prefix"] . $publication . $markupPatternsArray["italic-suffix"];
|
||||
// $record .= " " . $markupPatternsArray["italic-prefix"] . changeCase("heading", $publication) . $markupPatternsArray["italic-suffix"]; // function 'changeCase()' is defined in 'include.inc.php'
|
||||
}
|
||||
|
||||
if (!empty($row['volume'])) // volume
|
||||
{
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " Vol. " . $row['volume'];
|
||||
}
|
||||
|
||||
if (!empty($row['edition']) && !preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition'])) // edition
|
||||
{
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
if (preg_match("/^\d{1,3}$/", $row['edition'])) // if the edition field contains a number of up to three digits, we assume it's an edition number (such as "2nd ed.")
|
||||
{
|
||||
if ($row['edition'] == "2")
|
||||
$editionSuffix = "nd";
|
||||
elseif ($row['edition'] == "3")
|
||||
$editionSuffix = "rd";
|
||||
else
|
||||
$editionSuffix = "th";
|
||||
}
|
||||
else
|
||||
$editionSuffix = "";
|
||||
|
||||
if (!preg_match("/( ed\.?| edition)$/i", $row['edition']))
|
||||
$editionSuffix .= " ed.";
|
||||
|
||||
$record .= " " . $row['edition'] . $editionSuffix;
|
||||
}
|
||||
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
if (!empty($row['place'])) // place
|
||||
$record .= " " . $row['place'];
|
||||
|
||||
if (!empty($row['publisher'])) // publisher
|
||||
{
|
||||
if (!empty($row['place']))
|
||||
$record .= ":";
|
||||
|
||||
$record .= " " . $row['publisher'];
|
||||
}
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
$record .= "; " . $row['year'];
|
||||
|
||||
if (!empty($row['pages'])) // pages
|
||||
$record .= ":" . formatPageInfo($row['pages'], $markupPatternsArray["endash"]); // function 'formatPageInfo()' is defined in 'cite.inc.php'
|
||||
|
||||
if (!empty($row['abbrev_series_title']) OR !empty($row['series_title'])) // if there's either a full or an abbreviated series title
|
||||
{
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " ";
|
||||
|
||||
if (!empty($row['abbrev_series_title']))
|
||||
$record .= $row['abbrev_series_title']; // abbreviated series title
|
||||
|
||||
// if there's no abbreviated series title, we'll use the full series title instead:
|
||||
elseif (!empty($row['series_title']))
|
||||
$record .= $row['series_title']; // full series title
|
||||
|
||||
if (!empty($row['series_volume'])||!empty($row['series_issue']))
|
||||
$record .= " ";
|
||||
|
||||
if (!empty($row['series_volume'])) // series volume
|
||||
$record .= $row['series_volume'];
|
||||
|
||||
if (!empty($row['series_issue'])) // series issue (I'm not really sure if -- for this cite style -- the series issue should be rather omitted here)
|
||||
$record .= "(" . $row['series_issue'] . ")"; // is it correct to format series issues similar to journal article issues?
|
||||
}
|
||||
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// --- BEGIN TYPE = BOOK WHOLE / CONFERENCE VOLUME / JOURNAL / MANUAL / MANUSCRIPT / MAP / MISCELLANEOUS / PATENT / REPORT / SOFTWARE ---
|
||||
|
||||
else // if (preg_match("/Book Whole|Conference Volume|Journal|Manual|Manuscript|Map|Miscellaneous|Patent|Report|Software/", $row['type']))
|
||||
// note that this also serves as a fallback: unrecognized resource types will be formatted similar to whole books
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
$author = preg_replace("/[ \r\n]*\(eds?\)/i", "", $row['author']);
|
||||
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($author, // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", ", // 5.
|
||||
"/ *, */", // 6.
|
||||
" ", // 7.
|
||||
" ", // 8.
|
||||
"", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"6", // 13.
|
||||
"3", // 14.
|
||||
", et al.", // 15.
|
||||
$encodeHTML // 16.
|
||||
);
|
||||
|
||||
// if the author is actually the editor of the resource we'll append ', ed' (or ', eds') to the author string:
|
||||
// [to distinguish editors from authors in the 'author' field, the 'modify.php' script does append ' (ed)' or ' (eds)' if appropriate,
|
||||
// so we're just checking for these identifier strings here. Alternatively, we could check whether the editor field matches the author field]
|
||||
if (preg_match("/[ \r\n]*\(ed\)/", $row['author'])) // single editor
|
||||
$author = $author . ", ed";
|
||||
elseif (preg_match("/[ \r\n]*\(eds\)/", $row['author'])) // multiple editors
|
||||
$author = $author . ", eds";
|
||||
|
||||
if (!preg_match("/\. *$/", $author))
|
||||
$record .= $author . ".";
|
||||
else
|
||||
$record .= $author;
|
||||
}
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
if (!empty($row['author']))
|
||||
$record .= " ";
|
||||
|
||||
// TODO: book/volume/report/etc titles should be formatted in heading caps, however, this doesn't yet work correctly if the publication title contains HTML entities
|
||||
$record .= $markupPatternsArray["italic-prefix"] . $row['title'] . $markupPatternsArray["italic-suffix"];
|
||||
// $record .= $markupPatternsArray["italic-prefix"] . changeCase("heading", $row['title']) . $markupPatternsArray["italic-suffix"]; // function 'changeCase()' is defined in 'include.inc.php'
|
||||
}
|
||||
|
||||
if ($row['type'] == "Software") // for software, add software label
|
||||
$record .= " [computer program]";
|
||||
|
||||
if (!empty($row['volume']) AND ($row['type'] != "Software")) // volume
|
||||
{
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " Vol. " . $row['volume'];
|
||||
}
|
||||
|
||||
if (!empty($row['edition'])) // edition
|
||||
{
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
if ($row['type'] == "Software") // software edition (=version)
|
||||
{
|
||||
$record .= " Version " . $row['edition'];
|
||||
}
|
||||
elseif (!preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition'])) // edition
|
||||
{
|
||||
if (preg_match("/^\d{1,3}$/", $row['edition'])) // if the edition field contains a number of up to three digits, we assume it's an edition number (such as "2nd ed.")
|
||||
{
|
||||
if ($row['edition'] == "2")
|
||||
$editionSuffix = "nd";
|
||||
elseif ($row['edition'] == "3")
|
||||
$editionSuffix = "rd";
|
||||
else
|
||||
$editionSuffix = "th";
|
||||
}
|
||||
else
|
||||
$editionSuffix = "";
|
||||
|
||||
if (!preg_match("/( ed\.?| edition)$/i", $row['edition']))
|
||||
$editionSuffix .= " ed.";
|
||||
|
||||
$record .= " " . $row['edition'] . $editionSuffix;
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($row['editor']) && !preg_match("/[ \r\n]*\(eds?\)/", $row['author'])) // editor (if different from author, see note above regarding the check for ' (ed)' or ' (eds)')
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$editor = reArrangeAuthorContents($row['editor'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", ", // 5.
|
||||
"/ *, */", // 6.
|
||||
" ", // 7.
|
||||
" ", // 8.
|
||||
"", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"6", // 13.
|
||||
"3", // 14.
|
||||
", et al.", // 15.
|
||||
$encodeHTML // 16.
|
||||
);
|
||||
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " " . $editor;
|
||||
if (preg_match("/^[^;\r\n]+(;[^;\r\n]+)+$/", $row['editor'])) // there are at least two editors (separated by ';')
|
||||
$record .= ", eds";
|
||||
else // there's only one editor (or the editor field is malformed with multiple editors but missing ';' separator[s])
|
||||
$record .= ", ed";
|
||||
}
|
||||
|
||||
if (!empty($row['thesis'])) // thesis
|
||||
// TODO: do we need to use the term "[dissertation]" instead of "[Ph.D. thesis]", etc? What about other thesis types then?
|
||||
$record .= " [" . $row['thesis'] . "]";
|
||||
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
if (!empty($row['place'])) // place
|
||||
$record .= " " . $row['place'];
|
||||
|
||||
if (!empty($row['publisher'])) // publisher
|
||||
{
|
||||
if (!empty($row['place']))
|
||||
$record .= ":";
|
||||
|
||||
$record .= " " . $row['publisher'];
|
||||
}
|
||||
|
||||
$record .= ";";
|
||||
|
||||
if ($row['type'] == "Software") // for software, volume (=month) and issue (=day) information is printed before the year (similar to newspaper articles)
|
||||
{
|
||||
if (!empty($row['volume'])) // volume (=month)
|
||||
$record .= " " . $row['volume'];
|
||||
|
||||
if (!empty($row['issue'])) // issue (=day)
|
||||
$record .= " " . $row['issue'];
|
||||
|
||||
$record .= ",";
|
||||
}
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
$record .= " " . $row['year'];
|
||||
|
||||
if (!empty($row['abbrev_series_title']) OR !empty($row['series_title'])) // if there's either a full or an abbreviated series title
|
||||
{
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " ";
|
||||
|
||||
if (!empty($row['abbrev_series_title']))
|
||||
$record .= $row['abbrev_series_title']; // abbreviated series title
|
||||
|
||||
// if there's no abbreviated series title, we'll use the full series title instead:
|
||||
elseif (!empty($row['series_title']))
|
||||
$record .= $row['series_title']; // full series title
|
||||
|
||||
if (!empty($row['series_volume'])||!empty($row['series_issue']))
|
||||
$record .= " ";
|
||||
|
||||
if (!empty($row['series_volume'])) // series volume
|
||||
$record .= $row['series_volume'];
|
||||
|
||||
if (!empty($row['series_issue'])) // series issue (I'm not really sure if -- for this cite style -- the series issue should be rather omitted here)
|
||||
$record .= "(" . $row['series_issue'] . ")"; // is it correct to format series issues similar to journal article issues?
|
||||
}
|
||||
|
||||
if ($row['online_publication'] == "yes" || $row['type'] == "Software") // this record refers to an online article, or a computer program/software
|
||||
{
|
||||
// append an optional string (given in 'online_citation') plus the current date and the DOI (or URL):
|
||||
|
||||
$today = date("F j, Y");
|
||||
|
||||
if (!empty($row['online_citation'])) // online_citation
|
||||
{
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= $row['online_citation'];
|
||||
}
|
||||
|
||||
if (!empty($row['doi'])) // doi
|
||||
{
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
if ($encodeHTML)
|
||||
$record .= " " . encodeHTML("http://dx.doi.org/" . $row['doi']) . ". Accessed " . $today;
|
||||
else
|
||||
$record .= " " . "http://dx.doi.org/" . $row['doi'] . ". Accessed " . $today;
|
||||
}
|
||||
elseif (!empty($row['url'])) // url
|
||||
{
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
if ($encodeHTML)
|
||||
$record .= " " . encodeHTML($row['url']) . ". Accessed " . $today;
|
||||
else
|
||||
$record .= " " . $row['url'] . ". Accessed " . $today;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// --- BEGIN POST-PROCESSING -----------------------------------------------------------------------------------------------------------
|
||||
|
||||
// do some further cleanup:
|
||||
$record = trim($record); // remove any preceding or trailing whitespace
|
||||
|
||||
|
||||
return $record;
|
||||
}
|
||||
|
||||
// --- END CITATION STYLE ---
|
||||
?>
|
||||
699
cite/styles/cite_APA.php
Normal file
699
cite/styles/cite_APA.php
Normal file
@@ -0,0 +1,699 @@
|
||||
<?php
|
||||
// Project: Web Reference Database (refbase) <http://www.refbase.net>
|
||||
// Copyright: Matthias Steffens <mailto:refbase@extracts.de> and the file's
|
||||
// original author(s).
|
||||
//
|
||||
// This code is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY. Please see the GNU General Public
|
||||
// License for more details.
|
||||
//
|
||||
// File: ./cite/styles/cite_APA.php
|
||||
// Repository: $HeadURL: file:///svn/p/refbase/code/branches/bleeding-edge/cite/styles/cite_APA.php $
|
||||
// Author(s): Richard Karnesky <mailto:karnesky@gmail.com> and
|
||||
// Matthias Steffens <mailto:refbase@extracts.de>
|
||||
//
|
||||
// Created: 06-Nov-06, 13:00
|
||||
// Modified: $Date: 2012-02-27 20:25:30 +0000 (Mon, 27 Feb 2012) $
|
||||
// $Author: msteffens $
|
||||
// $Revision: 1337 $
|
||||
|
||||
// This is a citation style file (which must reside within the 'cite/styles/' sub-directory of your refbase root directory). It contains a
|
||||
// version of the 'citeRecord()' function that outputs a reference list from selected records according to the citation style used by
|
||||
// the APA
|
||||
|
||||
// based on 'cite_AnnGlaciol_JGlaciol.php'
|
||||
|
||||
// TODO: - magazine articles, conference proceedings, patents & reports?
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
// --- BEGIN CITATION STYLE ---
|
||||
|
||||
function citeRecord($row, $citeStyle, $citeType, $markupPatternsArray, $encodeHTML)
|
||||
{
|
||||
$record = ""; // make sure that our buffer variable is empty
|
||||
|
||||
// --- BEGIN TYPE = JOURNAL ARTICLE / MAGAZINE ARTICLE / NEWSPAPER ARTICLE --------------------------------------------------------------
|
||||
|
||||
if (preg_match("/^(Journal Article|Magazine Article|Newspaper Article)$/", $row['type']))
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($row['author'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", " . $markupPatternsArray["ampersand"] . " ", // 5.
|
||||
"/ *, */", // 6.
|
||||
", ", // 7.
|
||||
", ", // 8.
|
||||
". ", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"6", // 13.
|
||||
"6", // 14.
|
||||
", et al.", // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
if (!preg_match("/\. *$/", $author))
|
||||
$record .= $author . ".";
|
||||
else
|
||||
$record .= $author;
|
||||
}
|
||||
|
||||
if (!empty($row['year']) || !empty($row['volume']) || !empty($row['issue']))
|
||||
{
|
||||
if (!empty($row['author']))
|
||||
$record .= " ";
|
||||
|
||||
$record .= "(";
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
$record .= $row['year'];
|
||||
|
||||
if ($row['type'] == "Newspaper Article") // for newspaper articles, volume (=month) and issue (=day) information is printed after the year
|
||||
{
|
||||
if (!empty($row['year']) && (!empty($row['volume']) || !empty($row['issue'])))
|
||||
$record .= ",";
|
||||
|
||||
if (!empty($row['volume'])) // volume (=month)
|
||||
$record .= " " . $row['volume'];
|
||||
|
||||
if (!empty($row['issue'])) // issue (=day)
|
||||
$record .= " " . $row['issue'];
|
||||
}
|
||||
|
||||
$record .= ").";
|
||||
}
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
if (!empty($row['author']) || !empty($row['year']))
|
||||
$record .= " ";
|
||||
|
||||
$record .= $row['title'];
|
||||
if (!preg_match("/[?!.]$/", $row['title']))
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// From here on we'll assume that at least one of the fields 'author', 'year' or 'title' did contain some contents
|
||||
// if this is not the case, the output string will begin with a space. However, any preceding/trailing whitespace will be removed at the cleanup stage (see below)
|
||||
|
||||
if (!empty($row['abbrev_journal'])) // abbreviated journal name
|
||||
$record .= " " . $markupPatternsArray["italic-prefix"] . $row['abbrev_journal'] . $markupPatternsArray["italic-suffix"];
|
||||
|
||||
// if there's no abbreviated journal name, we'll use the full journal name
|
||||
elseif (!empty($row['publication'])) // publication (= journal) name
|
||||
$record .= " " . $markupPatternsArray["italic-prefix"] . $row['publication'] . $markupPatternsArray["italic-suffix"];
|
||||
|
||||
if (preg_match("/^(Journal Article|Magazine Article)$/", $row['type'])) // for journal and magazine articles, volume and issue information is printed after the publication name
|
||||
{
|
||||
if (!empty($row['abbrev_journal']) || !empty($row['publication']))
|
||||
$record .= ", ";
|
||||
|
||||
if (!empty($row['volume'])) // volume
|
||||
$record .= $markupPatternsArray["italic-prefix"] . $row['volume'] . $markupPatternsArray["italic-suffix"];
|
||||
|
||||
if (!empty($row['issue'])) // issue
|
||||
$record .= "(" . $row['issue'] . ")";
|
||||
}
|
||||
|
||||
if ($row['online_publication'] == "yes") // this record refers to an online article
|
||||
{
|
||||
// instead of any pages info (which normally doesn't exist for online publications) we append
|
||||
// an optional string (given in 'online_citation') plus the current date and the DOI (or URL):
|
||||
|
||||
$today = date("F j, Y");
|
||||
|
||||
if (!empty($row['online_citation'])) // online_citation
|
||||
{
|
||||
if (!empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])) // only add "," if either volume, issue, abbrev_journal or publication isn't empty
|
||||
$record .= ",";
|
||||
|
||||
$record .= " " . $row['online_citation'];
|
||||
}
|
||||
|
||||
if (!empty($row['doi'])) // doi
|
||||
{
|
||||
if (!empty($row['online_citation']) OR (empty($row['online_citation']) AND (!empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])))) // only add "." if online_citation isn't empty, or else if either volume, issue, abbrev_journal or publication isn't empty
|
||||
$record .= ".";
|
||||
|
||||
if ($encodeHTML)
|
||||
$record .= " Retrieved " . $today . ", from " . encodeHTML("http://dx.doi.org/" . $row['doi']);
|
||||
else
|
||||
$record .= " Retrieved " . $today . ", from http://dx.doi.org/" . $row['doi'];
|
||||
}
|
||||
elseif (!empty($row['url'])) // url
|
||||
{
|
||||
if (!empty($row['online_citation']) OR (empty($row['online_citation']) AND (!empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])))) // only add "." if online_citation isn't empty, or else if either volume, issue, abbrev_journal or publication isn't empty
|
||||
$record .= ".";
|
||||
|
||||
if ($encodeHTML)
|
||||
$record .= " Retrieved " . $today . ", from " . encodeHTML($row['url']);
|
||||
else
|
||||
$record .= " Retrieved " . $today . ", from " . $row['url'];
|
||||
}
|
||||
}
|
||||
else // $row['online_publication'] == "no" -> this record refers to a printed article, so we append any pages info instead:
|
||||
{
|
||||
if (!empty($row['pages'])) // pages
|
||||
{
|
||||
if (!empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])) // only add ", " if either volume, issue, abbrev_journal or publication isn't empty
|
||||
$record .= ", ";
|
||||
|
||||
if ($row['type'] == "Newspaper Article") // for newspaper articles, we prefix page numbers with "p." or "pp."
|
||||
$record .= formatPageInfo($row['pages'], $markupPatternsArray["endash"], "p. ", "pp. "); // function 'formatPageInfo()' is defined in 'cite.inc.php'
|
||||
else
|
||||
$record .= formatPageInfo($row['pages'], $markupPatternsArray["endash"]);
|
||||
}
|
||||
}
|
||||
|
||||
if (!preg_match("/\. *$/", $record) && !($row['online_publication'] == "yes" && (!empty($row['doi']) || !empty($row['url'])))) // if the string doesn't end with a period or a DOI/URL
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// --- BEGIN TYPE = ABSTRACT / BOOK CHAPTER / CONFERENCE ARTICLE ------------------------------------------------------------------------
|
||||
|
||||
elseif (preg_match("/^(Abstract|Book Chapter|Conference Article)$/", $row['type']))
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($row['author'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", " . $markupPatternsArray["ampersand"] . " ", // 5.
|
||||
"/ *, */", // 6.
|
||||
", ", // 7.
|
||||
", ", // 8.
|
||||
". ", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"6", // 13.
|
||||
"6", // 14.
|
||||
", et al.", // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
if (!preg_match("/\. *$/", $author))
|
||||
$record .= $author . ".";
|
||||
else
|
||||
$record .= $author;
|
||||
}
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
{
|
||||
if (!empty($row['author']))
|
||||
$record .= " ";
|
||||
|
||||
$record .= "(" . $row['year'] . ").";
|
||||
}
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
if (!empty($row['author']) || !empty($row['year']))
|
||||
$record .= " ";
|
||||
|
||||
$record .= $row['title'];
|
||||
if (!preg_match("/[?!.]$/", $row['title']))
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// From here on we'll assume that at least one of the fields 'author', 'year' or 'title' did contain some contents
|
||||
// if this is not the case, the output string will begin with a space. However, any preceding/trailing whitespace will be removed at the cleanup stage (see below)
|
||||
|
||||
if (!empty($row['editor'])) // editor
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$editor = reArrangeAuthorContents($row['editor'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", " . $markupPatternsArray["ampersand"] . " ", // 5.
|
||||
"/ *, */", // 6.
|
||||
" ", // 7.
|
||||
" ", // 8.
|
||||
". ", // 9.
|
||||
true, // 10.
|
||||
true, // 11.
|
||||
true, // 12.
|
||||
"6", // 13.
|
||||
"6", // 14.
|
||||
", et al.", // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
$record .= " In " . $editor . " (";
|
||||
if (preg_match("/^[^;\r\n]+(;[^;\r\n]+)+$/", $row['editor'])) // there are at least two editors (separated by ';')
|
||||
$record .= "Eds.";
|
||||
else // there's only one editor (or the editor field is malformed with multiple editors but missing ';' separator[s])
|
||||
$record .= "Ed.";
|
||||
$record .= "),";
|
||||
}
|
||||
|
||||
$publication = preg_replace("/[ \r\n]*\(Eds?:[^\)\r\n]*\)/i", "", $row['publication']);
|
||||
if (!empty($publication)) // publication
|
||||
{
|
||||
if (empty($row['editor']))
|
||||
$record .= " In";
|
||||
|
||||
$record .= " " . $markupPatternsArray["italic-prefix"] . $publication . $markupPatternsArray["italic-suffix"];
|
||||
}
|
||||
|
||||
if (!empty($row['edition']) && !preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition']) || !empty($row['volume']) || !empty($row['pages']))
|
||||
{
|
||||
$record .= " (";
|
||||
|
||||
if (!empty($row['edition']) && !preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition'])) // edition
|
||||
{
|
||||
if (preg_match("/^\d{1,3}$/", $row['edition'])) // if the edition field contains a number of up to three digits, we assume it's an edition number (such as "2nd ed.")
|
||||
{
|
||||
if ($row['edition'] == "2")
|
||||
$editionSuffix = "nd";
|
||||
elseif ($row['edition'] == "3")
|
||||
$editionSuffix = "rd";
|
||||
else
|
||||
$editionSuffix = "th";
|
||||
}
|
||||
else
|
||||
$editionSuffix = "";
|
||||
|
||||
if (!empty($row['edition']) && !preg_match("/( ed\.?| edition)$/i", $row['edition']))
|
||||
$editionSuffix .= " ed.";
|
||||
|
||||
$record .= $row['edition'] . $editionSuffix;
|
||||
}
|
||||
|
||||
if (!empty($row['volume'])) // volume
|
||||
{
|
||||
if (!empty($row['edition']) && !preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition']))
|
||||
$record .= ", ";
|
||||
|
||||
$record .= "Vol. " . $row['volume'];
|
||||
}
|
||||
|
||||
if (!empty($row['pages'])) // pages
|
||||
{
|
||||
if (!empty($row['edition']) && !preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition']) || !empty($row['volume']))
|
||||
$record .= ", ";
|
||||
|
||||
$record .= formatPageInfo($row['pages'], $markupPatternsArray["endash"], "p. ", "pp. "); // function 'formatPageInfo()' is defined in 'cite.inc.php'
|
||||
}
|
||||
|
||||
$record .= ")";
|
||||
}
|
||||
|
||||
if (!empty($row['abbrev_series_title']) OR !empty($row['series_title'])) // if there's either a full or an abbreviated series title
|
||||
{
|
||||
if (!preg_match("@[?!.][ " . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " ";
|
||||
|
||||
if (!empty($row['abbrev_series_title']))
|
||||
$record .= $row['abbrev_series_title']; // abbreviated series title
|
||||
|
||||
// if there's no abbreviated series title, we'll use the full series title instead:
|
||||
elseif (!empty($row['series_title']))
|
||||
$record .= $row['series_title']; // full series title
|
||||
|
||||
if (!empty($row['series_volume'])||!empty($row['series_issue']))
|
||||
$record .= ", ";
|
||||
|
||||
if (!empty($row['series_volume'])) // series volume (I'm not really sure if -- for this cite style -- the series volume & issue should be rather omitted here)
|
||||
$record .= $row['series_volume'];
|
||||
|
||||
if (!empty($row['series_issue'])) // series issue (see note for series volume)
|
||||
$record .= "(" . $row['series_issue'] . ")";
|
||||
}
|
||||
|
||||
$record .= ".";
|
||||
|
||||
if (!empty($row['place'])) // place
|
||||
$record .= " " . $row['place'];
|
||||
|
||||
if (!empty($row['publisher'])) // publisher
|
||||
{
|
||||
if (!empty($row['place']))
|
||||
$record .= ":";
|
||||
|
||||
$record .= " " . $row['publisher'];
|
||||
}
|
||||
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// --- BEGIN TYPE = BOOK WHOLE / CONFERENCE VOLUME / JOURNAL / MANUAL / MANUSCRIPT / MAP / MISCELLANEOUS / PATENT / REPORT / SOFTWARE ---
|
||||
|
||||
else // if (preg_match("/Book Whole|Conference Volume|Journal|Manual|Manuscript|Map|Miscellaneous|Patent|Report|Software/", $row['type']))
|
||||
// note that this also serves as a fallback: unrecognized resource types will be formatted similar to whole books
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
$author = preg_replace("/[ \r\n]*\(eds?\)/i", "", $row['author']);
|
||||
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($author, // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", " . $markupPatternsArray["ampersand"] . " ", // 5.
|
||||
"/ *, */", // 6.
|
||||
", ", // 7.
|
||||
", ", // 8.
|
||||
". ", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"6", // 13.
|
||||
"6", // 14.
|
||||
", et al.", // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
// if the author is actually the editor of the resource we'll append ', ed' (or ', eds') to the author string:
|
||||
// [to distinguish editors from authors in the 'author' field, the 'modify.php' script does append ' (ed)' or ' (eds)' if appropriate,
|
||||
// so we're just checking for these identifier strings here. Alternatively, we could check whether the editor field matches the author field]
|
||||
if (preg_match("/[ \r\n]*\(ed\)/", $row['author'])) // single editor
|
||||
$author = $author . " (Ed.).";
|
||||
elseif (preg_match("/[ \r\n]*\(eds\)/", $row['author'])) // multiple editors
|
||||
$author = $author . " (Eds.).";
|
||||
|
||||
if (!preg_match("/\. *$/", $author))
|
||||
$record .= $author . ".";
|
||||
else
|
||||
$record .= $author;
|
||||
}
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
{
|
||||
if (!empty($row['author']))
|
||||
$record .= " ";
|
||||
|
||||
$record .= "(" . $row['year'] . ").";
|
||||
}
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
if (!empty($row['author']) || !empty($row['year']))
|
||||
$record .= " ";
|
||||
|
||||
if ($row['type'] == "Software") // except for software, the title is printed in italics
|
||||
$record .= $row['title'];
|
||||
else
|
||||
$record .= $markupPatternsArray["italic-prefix"] . $row['title'] . $markupPatternsArray["italic-suffix"];
|
||||
}
|
||||
|
||||
if (!empty($row['editor']) && !preg_match("/[ \r\n]*\(eds?\)/", $row['author'])) // editor (if different from author, see note above regarding the check for ' (ed)' or ' (eds)')
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$editor = reArrangeAuthorContents($row['editor'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", " . $markupPatternsArray["ampersand"] . " ", // 5.
|
||||
"/ *, */", // 6.
|
||||
" ", // 7.
|
||||
" ", // 8.
|
||||
". ", // 9.
|
||||
true, // 10.
|
||||
true, // 11.
|
||||
true, // 12.
|
||||
"6", // 13.
|
||||
"6", // 14.
|
||||
", et al.", // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
if (!empty($row['author']) || !empty($row['year']) || !empty($row['title']))
|
||||
$record .= " ";
|
||||
|
||||
$record .= " (" . $editor . ", ";
|
||||
if (preg_match("/^[^;\r\n]+(;[^;\r\n]+)+$/", $row['editor'])) // there are at least two editors (separated by ';')
|
||||
$record .= "Eds.";
|
||||
else // there's only one editor (or the editor field is malformed with multiple editors but missing ';' separator[s])
|
||||
$record .= "Ed.";
|
||||
$record .= ")";
|
||||
}
|
||||
|
||||
if (!empty($row['edition']) || !empty($row['volume']))
|
||||
{
|
||||
if (!empty($row['author']) || !empty($row['year']) || !empty($row['title']) || (!empty($row['editor']) && !preg_match("/[ \r\n]*\(eds?\)/", $row['author'])))
|
||||
$record .= " ";
|
||||
|
||||
$record .= "(";
|
||||
|
||||
if ($row['type'] == "Software") // software edition (=version)
|
||||
{
|
||||
$record .= "Version " . $row['edition'];
|
||||
}
|
||||
elseif (!preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition'])) // regular edition (other than the first)
|
||||
{
|
||||
if (preg_match("/^\d{1,3}$/", $row['edition'])) // if the edition field contains a number of up to three digits, we assume it's an edition number (such as "2nd ed.")
|
||||
{
|
||||
if ($row['edition'] == "2")
|
||||
$editionSuffix = "nd";
|
||||
elseif ($row['edition'] == "3")
|
||||
$editionSuffix = "rd";
|
||||
else
|
||||
$editionSuffix = "th";
|
||||
}
|
||||
else
|
||||
$editionSuffix = "";
|
||||
|
||||
if (!empty($row['edition']) && !preg_match("/( ed\.?| edition)$/i", $row['edition']))
|
||||
$editionSuffix .= " ed.";
|
||||
|
||||
$record .= $row['edition'] . $editionSuffix;
|
||||
}
|
||||
|
||||
if (!empty($row['volume'])) // volume
|
||||
{
|
||||
if (!empty($row['edition']) && !preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition']))
|
||||
$record .= ", ";
|
||||
|
||||
$record .= "Vol. " . $row['volume'];
|
||||
}
|
||||
|
||||
$record .= ")";
|
||||
}
|
||||
|
||||
if ($row['type'] == "Software") // for software, add software label
|
||||
{
|
||||
$record .= " [Computer software]";
|
||||
}
|
||||
else // add series info, thesis info, and publisher & place
|
||||
{
|
||||
if ((!empty($row['title']) && !preg_match("/[?!.]$/", $row['title'])) || (!empty($row['editor']) && !preg_match("/[ \r\n]*\(eds?\)/", $row['author'])) || !empty($row['edition']) || !empty($row['volume']))
|
||||
$record .= ".";
|
||||
|
||||
if (!empty($row['abbrev_series_title']) OR !empty($row['series_title'])) // if there's either a full or an abbreviated series title
|
||||
{
|
||||
$record .= " ";
|
||||
|
||||
if (!empty($row['abbrev_series_title']))
|
||||
$record .= $row['abbrev_series_title']; // abbreviated series title
|
||||
|
||||
// if there's no abbreviated series title, we'll use the full series title instead:
|
||||
elseif (!empty($row['series_title']))
|
||||
$record .= $row['series_title']; // full series title
|
||||
|
||||
if (!empty($row['series_volume'])||!empty($row['series_issue']))
|
||||
$record .= ", ";
|
||||
|
||||
if (!empty($row['series_volume'])) // series volume (I'm not really sure if -- for this cite style -- the series volume & issue should be rather omitted here)
|
||||
$record .= $row['series_volume'];
|
||||
|
||||
if (!empty($row['series_issue'])) // series issue (see note for series volume)
|
||||
$record .= "(" . $row['series_issue'] . ")";
|
||||
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
if (!empty($row['thesis'])) // thesis
|
||||
{
|
||||
$record .= " " . $row['thesis'];
|
||||
$record .= ", " . $row['publisher'];
|
||||
$record .= ", " . $row['place'];
|
||||
}
|
||||
else // not a thesis
|
||||
{
|
||||
if (!empty($row['place'])) // place
|
||||
$record .= " " . $row['place'];
|
||||
|
||||
if (!empty($row['publisher'])) // publisher
|
||||
{
|
||||
if (!empty($row['place']))
|
||||
$record .= ":";
|
||||
|
||||
if ($row['author'] == $row['publisher']) // in APA style, the string "Author" is used instead of the publisher's name when the author and publisher are identical
|
||||
$record .= " Author";
|
||||
else
|
||||
$record .= " " . $row['publisher'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($row['online_publication'] == "yes" || $row['type'] == "Software") // this record refers to an online article, or a computer program/software
|
||||
{
|
||||
if (!empty($row['online_citation'])) // online_citation
|
||||
{
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " " . $row['online_citation'];
|
||||
}
|
||||
|
||||
if (!empty($row['doi']) || !empty($row['url']))
|
||||
{
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
if ($row['type'] == "Software")
|
||||
{
|
||||
$record .= " Available from ";
|
||||
}
|
||||
else
|
||||
{
|
||||
$today = date("F j, Y");
|
||||
$record .= " Retrieved " . $today . ", from ";
|
||||
}
|
||||
|
||||
if (!empty($row['doi'])) // doi
|
||||
{
|
||||
if ($encodeHTML)
|
||||
$record .= encodeHTML("http://dx.doi.org/" . $row['doi']);
|
||||
else
|
||||
$record .= "http://dx.doi.org/" . $row['doi'];
|
||||
}
|
||||
elseif (!empty($row['url'])) // url
|
||||
{
|
||||
if ($encodeHTML)
|
||||
$record .= encodeHTML($row['url']);
|
||||
else
|
||||
$record .= $row['url'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!preg_match("/\. *$/", $record) && !(($row['online_publication'] == "yes" || $row['type'] == "Software") && !empty($row['url']))) // if the string doesn't end with a period or no URL/DOI was given
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// --- BEGIN POST-PROCESSING -----------------------------------------------------------------------------------------------------------
|
||||
|
||||
// do some further cleanup:
|
||||
$record = trim($record); // remove any preceding or trailing whitespace
|
||||
|
||||
|
||||
return $record;
|
||||
}
|
||||
|
||||
// --- END CITATION STYLE ---
|
||||
?>
|
||||
471
cite/styles/cite_AnnGlaciol_JGlaciol.php
Normal file
471
cite/styles/cite_AnnGlaciol_JGlaciol.php
Normal file
@@ -0,0 +1,471 @@
|
||||
<?php
|
||||
// Project: Web Reference Database (refbase) <http://www.refbase.net>
|
||||
// Copyright: Matthias Steffens <mailto:refbase@extracts.de> and the file's
|
||||
// original author(s).
|
||||
//
|
||||
// This code is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY. Please see the GNU General Public
|
||||
// License for more details.
|
||||
//
|
||||
// File: ./cite/styles/cite_AnnGlaciol_JGlaciol.php
|
||||
// Repository: $HeadURL: file:///svn/p/refbase/code/branches/bleeding-edge/cite/styles/cite_AnnGlaciol_JGlaciol.php $
|
||||
// Author(s): Matthias Steffens <mailto:refbase@extracts.de>
|
||||
//
|
||||
// Created: 07-Sep-05, 14:53
|
||||
// Modified: $Date: 2012-02-27 20:25:30 +0000 (Mon, 27 Feb 2012) $
|
||||
// $Author: msteffens $
|
||||
// $Revision: 1337 $
|
||||
|
||||
// This is a citation style file (which must reside within the 'cite/styles/' sub-directory of your refbase root directory). It contains a
|
||||
// version of the 'citeRecord()' function that outputs a reference list from selected records according to the citation style used by
|
||||
// the journals "Annals of Glaciology" and "Journal of Glaciology" (International Glaciological Society, www.igsoc.org).
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
// --- BEGIN CITATION STYLE ---
|
||||
|
||||
function citeRecord($row, $citeStyle, $citeType, $markupPatternsArray, $encodeHTML)
|
||||
{
|
||||
$record = ""; // make sure that our buffer variable is empty
|
||||
|
||||
// --- BEGIN TYPE = JOURNAL ARTICLE / MAGAZINE ARTICLE / NEWSPAPER ARTICLE --------------------------------------------------------------
|
||||
|
||||
if (preg_match("/^(Journal Article|Magazine Article|Newspaper Article)$/", $row['type']))
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($row['author'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
" and ", // 5.
|
||||
"/ *, */", // 6.
|
||||
", ", // 7.
|
||||
" ", // 8.
|
||||
".", // 9.
|
||||
false, // 10.
|
||||
true, // 11.
|
||||
true, // 12.
|
||||
"6", // 13.
|
||||
"1", // 14.
|
||||
" " . $markupPatternsArray["italic-prefix"] . "and __NUMBER_OF_AUTHORS__ others" . $markupPatternsArray["italic-suffix"], // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
if (!preg_match("/\. *$/", $author))
|
||||
$record .= $author . ".";
|
||||
else
|
||||
$record .= $author;
|
||||
}
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
{
|
||||
if (!empty($row['author']))
|
||||
$record .= " ";
|
||||
|
||||
$record .= $row['year'] . ".";
|
||||
}
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
if (!empty($row['author']) || !empty($row['year']))
|
||||
$record .= " ";
|
||||
|
||||
$record .= $row['title'];
|
||||
if (!preg_match("/[?!.]$/", $row['title']))
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// From here on we'll assume that at least one of the fields 'author', 'year' or 'title' did contain some contents
|
||||
// if this is not the case, the output string will begin with a space. However, any preceding/trailing whitespace will be removed at the cleanup stage (see below)
|
||||
|
||||
if (!empty($row['abbrev_journal'])) // abbreviated journal name
|
||||
$record .= " " . $markupPatternsArray["italic-prefix"] . $row['abbrev_journal'] . $markupPatternsArray["italic-suffix"];
|
||||
|
||||
// if there's no abbreviated journal name, we'll use the full journal name
|
||||
elseif (!empty($row['publication'])) // publication (= journal) name
|
||||
$record .= " " . $markupPatternsArray["italic-prefix"] . $row['publication'] . $markupPatternsArray["italic-suffix"];
|
||||
|
||||
if (!empty($row['volume'])) // volume
|
||||
{
|
||||
if (!empty($row['abbrev_journal']) || !empty($row['publication']))
|
||||
$record .= ",";
|
||||
|
||||
$record .= " " . $markupPatternsArray["bold-prefix"] . $row['volume'] . $markupPatternsArray["bold-suffix"];
|
||||
}
|
||||
|
||||
if (!empty($row['issue'])) // issue
|
||||
$record .= "(" . $row['issue'] . ")";
|
||||
|
||||
if ($row['online_publication'] == "yes") // this record refers to an online article
|
||||
{
|
||||
// instead of any pages info (which normally doesn't exist for online publications) we append
|
||||
// an optional string (given in 'online_citation') plus the DOI:
|
||||
|
||||
if (!empty($row['online_citation'])) // online_citation
|
||||
{
|
||||
if (!empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])) // only add "," if either volume, issue, abbrev_journal or publication isn't empty
|
||||
$record .= ",";
|
||||
|
||||
$record .= " " . $row['online_citation'];
|
||||
}
|
||||
|
||||
if (!empty($row['doi'])) // doi
|
||||
{
|
||||
if (!empty($row['online_citation']) OR (empty($row['online_citation']) AND (!empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])))) // only add "," if online_citation isn't empty, or else if either volume, issue, abbrev_journal or publication isn't empty
|
||||
$record .= ".";
|
||||
|
||||
$record .= " (" . $row['doi'] . ".)";
|
||||
}
|
||||
}
|
||||
else // $row['online_publication'] == "no" -> this record refers to a printed article, so we append any pages info instead:
|
||||
{
|
||||
if (!empty($row['pages'])) // pages
|
||||
{
|
||||
if (!empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])) // only add "," if either volume, issue, abbrev_journal or publication isn't empty
|
||||
$record .= ", ";
|
||||
|
||||
$record .= formatPageInfo($row['pages'], $markupPatternsArray["endash"]); // function 'formatPageInfo()' is defined in 'cite.inc.php'
|
||||
}
|
||||
}
|
||||
|
||||
if (!preg_match("/\.\)? *$/", $record))
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// --- BEGIN TYPE = ABSTRACT / BOOK CHAPTER / CONFERENCE ARTICLE ------------------------------------------------------------------------
|
||||
|
||||
elseif (preg_match("/^(Abstract|Book Chapter|Conference Article)$/", $row['type']))
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($row['author'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
" and ", // 5.
|
||||
"/ *, */", // 6.
|
||||
", ", // 7.
|
||||
" ", // 8.
|
||||
".", // 9.
|
||||
false, // 10.
|
||||
true, // 11.
|
||||
true, // 12.
|
||||
"6", // 13.
|
||||
"1", // 14.
|
||||
" " . $markupPatternsArray["italic-prefix"] . "and __NUMBER_OF_AUTHORS__ others" . $markupPatternsArray["italic-suffix"], // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
if (!preg_match("/\. *$/", $author))
|
||||
$record .= $author . ".";
|
||||
else
|
||||
$record .= $author;
|
||||
}
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
{
|
||||
if (!empty($row['author']))
|
||||
$record .= " ";
|
||||
|
||||
$record .= $row['year'] . ".";
|
||||
}
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
if (!empty($row['author']) || !empty($row['year']))
|
||||
$record .= " ";
|
||||
|
||||
$record .= $row['title'];
|
||||
if (!preg_match("/[?!.]$/", $row['title']))
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// From here on we'll assume that at least one of the fields 'author', 'year' or 'title' did contain some contents
|
||||
// if this is not the case, the output string will begin with a space. However, any preceding/trailing whitespace will be removed at the cleanup stage (see below)
|
||||
|
||||
if (!empty($row['editor'])) // editor
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$editor = reArrangeAuthorContents($row['editor'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
" and ", // 5.
|
||||
"/ *, */", // 6.
|
||||
", ", // 7.
|
||||
" ", // 8.
|
||||
".", // 9.
|
||||
false, // 10.
|
||||
true, // 11.
|
||||
true, // 12.
|
||||
"6", // 13.
|
||||
"1", // 14.
|
||||
" " . $markupPatternsArray["italic-prefix"] . "and __NUMBER_OF_AUTHORS__ others" . $markupPatternsArray["italic-suffix"], // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
$record .= " " . $markupPatternsArray["italic-prefix"] . "In" . $markupPatternsArray["italic-suffix"] . " " . $editor;
|
||||
if (preg_match("/^[^;\r\n]+(;[^;\r\n]+)+$/", $row['editor'])) // there are at least two editors (separated by ';')
|
||||
$record .= ", " . $markupPatternsArray["italic-prefix"] . "eds" . $markupPatternsArray["italic-suffix"] . ".";
|
||||
else // there's only one editor (or the editor field is malformed with multiple editors but missing ';' separator[s])
|
||||
$record .= ", " . $markupPatternsArray["italic-prefix"] . "ed" . $markupPatternsArray["italic-suffix"] . ".";
|
||||
}
|
||||
|
||||
$publication = preg_replace("/[ \r\n]*\(Eds?:[^\)\r\n]*\)/i", "", $row['publication']);
|
||||
if (!empty($publication)) // publication
|
||||
$record .= " " . $markupPatternsArray["italic-prefix"] . $publication . $markupPatternsArray["italic-suffix"] . ".";
|
||||
|
||||
if (!empty($row['place'])) // place
|
||||
$record .= " " . $row['place'];
|
||||
|
||||
if (!empty($row['publisher'])) // publisher
|
||||
{
|
||||
if (!empty($row['place']))
|
||||
$record .= ",";
|
||||
|
||||
$record .= " " . $row['publisher'];
|
||||
}
|
||||
|
||||
if (!empty($row['pages'])) // pages
|
||||
{
|
||||
if (!empty($row['place']) || !empty($row['publisher']))
|
||||
$record .= ", ";
|
||||
|
||||
$record .= formatPageInfo($row['pages'], $markupPatternsArray["endash"]); // function 'formatPageInfo()' is defined in 'cite.inc.php'
|
||||
}
|
||||
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
if (!empty($row['abbrev_series_title']) OR !empty($row['series_title'])) // if there's either a full or an abbreviated series title
|
||||
{
|
||||
$record .= " (";
|
||||
|
||||
if (!empty($row['abbrev_series_title']))
|
||||
$record .= $row['abbrev_series_title']; // abbreviated series title
|
||||
|
||||
// if there's no abbreviated series title, we'll use the full series title instead:
|
||||
elseif (!empty($row['series_title']))
|
||||
$record .= $row['series_title']; // full series title
|
||||
|
||||
if (!empty($row['series_volume'])||!empty($row['series_issue']))
|
||||
$record .= " ";
|
||||
|
||||
if (!empty($row['series_volume'])) // series volume
|
||||
$record .= $row['series_volume'];
|
||||
|
||||
if (!empty($row['series_issue'])) // series issue (I'm not really sure if -- for this cite style -- the series issue should be rather omitted here)
|
||||
$record .= "(" . $row['series_issue'] . ")";
|
||||
|
||||
$record .= ".)";
|
||||
}
|
||||
}
|
||||
|
||||
// --- BEGIN TYPE = BOOK WHOLE / CONFERENCE VOLUME / JOURNAL / MANUAL / MANUSCRIPT / MAP / MISCELLANEOUS / PATENT / REPORT / SOFTWARE ---
|
||||
|
||||
else // if (preg_match("/Book Whole|Conference Volume|Journal|Manual|Manuscript|Map|Miscellaneous|Patent|Report|Software/", $row['type']))
|
||||
// note that this also serves as a fallback: unrecognized resource types will be formatted similar to whole books
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
$author = preg_replace("/[ \r\n]*\(eds?\)/i", "", $row['author']);
|
||||
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($author, // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
" and ", // 5.
|
||||
"/ *, */", // 6.
|
||||
", ", // 7.
|
||||
" ", // 8.
|
||||
".", // 9.
|
||||
false, // 10.
|
||||
true, // 11.
|
||||
true, // 12.
|
||||
"6", // 13.
|
||||
"1", // 14.
|
||||
" " . $markupPatternsArray["italic-prefix"] . "and __NUMBER_OF_AUTHORS__ others" . $markupPatternsArray["italic-suffix"], // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
// if the author is actually the editor of the resource we'll append ', ed' (or ', eds') to the author string:
|
||||
// [to distinguish editors from authors in the 'author' field, the 'modify.php' script does append ' (ed)' or ' (eds)' if appropriate,
|
||||
// so we're just checking for these identifier strings here. Alternatively, we could check whether the editor field matches the author field]
|
||||
if (preg_match("/[ \r\n]*\(ed\)/", $row['author'])) // single editor
|
||||
$author = $author . ", " . $markupPatternsArray["italic-prefix"] . "ed" . $markupPatternsArray["italic-suffix"];
|
||||
elseif (preg_match("/[ \r\n]*\(eds\)/", $row['author'])) // multiple editors
|
||||
$author = $author . ", " . $markupPatternsArray["italic-prefix"] . "eds" . $markupPatternsArray["italic-suffix"];
|
||||
|
||||
if (!preg_match("/\. *$/", $author))
|
||||
$record .= $author . ".";
|
||||
else
|
||||
$record .= $author;
|
||||
}
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
{
|
||||
if (!empty($row['author']))
|
||||
$record .= " ";
|
||||
|
||||
$record .= $row['year'] . ".";
|
||||
}
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
if (!empty($row['author']) || !empty($row['year']))
|
||||
$record .= " ";
|
||||
|
||||
$record .= $markupPatternsArray["italic-prefix"] . $row['title'] . $markupPatternsArray["italic-suffix"];
|
||||
if (!preg_match("/[?!.]$/", $row['title']))
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
if (!empty($row['thesis'])) // thesis
|
||||
{
|
||||
$record .= " (" . $row['thesis'];
|
||||
$record .= ", " . $row['publisher'] . ".)";
|
||||
}
|
||||
else // not a thesis
|
||||
{
|
||||
if (!empty($row['place'])) // place
|
||||
$record .= " " . $row['place'];
|
||||
|
||||
if (!empty($row['publisher'])) // publisher
|
||||
{
|
||||
if (!empty($row['place']))
|
||||
$record .= ",";
|
||||
|
||||
$record .= " " . $row['publisher'];
|
||||
}
|
||||
|
||||
// if (!empty($row['pages'])) // pages
|
||||
// {
|
||||
// if (!empty($row['place']) || !empty($row['publisher']))
|
||||
// $record .= ", ";
|
||||
//
|
||||
// $record .= formatPageInfo($row['pages'], $markupPatternsArray["endash"]); // function 'formatPageInfo()' is defined in 'cite.inc.php'
|
||||
// }
|
||||
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
if (!empty($row['abbrev_series_title']) OR !empty($row['series_title'])) // if there's either a full or an abbreviated series title
|
||||
{
|
||||
$record .= " (";
|
||||
|
||||
if (!empty($row['abbrev_series_title']))
|
||||
$record .= $row['abbrev_series_title']; // abbreviated series title
|
||||
|
||||
// if there's no abbreviated series title, we'll use the full series title instead:
|
||||
elseif (!empty($row['series_title']))
|
||||
$record .= $row['series_title']; // full series title
|
||||
|
||||
if (!empty($row['series_volume'])||!empty($row['series_issue']))
|
||||
$record .= " ";
|
||||
|
||||
if (!empty($row['series_volume'])) // series volume
|
||||
$record .= $row['series_volume'];
|
||||
|
||||
if (!empty($row['series_issue'])) // series issue (I'm not really sure if -- for this cite style -- the series issue should be rather omitted here)
|
||||
$record .= "(" . $row['series_issue'] . ")";
|
||||
|
||||
$record .= ".)";
|
||||
}
|
||||
}
|
||||
|
||||
// --- BEGIN POST-PROCESSING -----------------------------------------------------------------------------------------------------------
|
||||
|
||||
// do some further cleanup:
|
||||
$record = trim($record); // remove any preceding or trailing whitespace
|
||||
|
||||
|
||||
return $record;
|
||||
}
|
||||
|
||||
// --- END CITATION STYLE ---
|
||||
?>
|
||||
629
cite/styles/cite_Chicago.php
Normal file
629
cite/styles/cite_Chicago.php
Normal file
@@ -0,0 +1,629 @@
|
||||
<?php
|
||||
// Project: Web Reference Database (refbase) <http://www.refbase.net>
|
||||
// Copyright: Matthias Steffens <mailto:refbase@extracts.de> and the file's
|
||||
// original author(s).
|
||||
//
|
||||
// This code is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY. Please see the GNU General Public
|
||||
// License for more details.
|
||||
//
|
||||
// File: ./cite/styles/cite_Chicago.php
|
||||
// Repository: $HeadURL$
|
||||
// Author(s): Matthias Steffens <mailto:refbase@extracts.de> and
|
||||
// Richard Karnesky <mailto:karnesky@gmail.com>
|
||||
//
|
||||
// Created: 25-Feb-08, 20:05
|
||||
// Modified: $Date: 2012-02-27 20:25:30 +0000 (Mon, 27 Feb 2012) $
|
||||
// $Author$
|
||||
// $Revision: 1337 $
|
||||
|
||||
// This is a citation style file (which must reside within the 'cite/styles/' sub-directory of your refbase root directory). It contains a
|
||||
// version of the 'citeRecord()' function that outputs a reference list from selected records according to the citation style documented
|
||||
// in the "Chicago Manual of Style" (2003), and Kate Turabian's "Manual for Writer's of Term Papers, Theses, and Dissertations" (1996)
|
||||
|
||||
// based on 'cite_MLA.php'
|
||||
|
||||
// TODO: - newspaper & magazine articles, conference proceedings, manuals, patents, reports, software -> see e.g. examples at <http://www.library.hbs.edu/guides/citationguide.pdf>
|
||||
// - " and " vs. ", and "?
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
// --- BEGIN CITATION STYLE ---
|
||||
|
||||
function citeRecord($row, $citeStyle, $citeType, $markupPatternsArray, $encodeHTML)
|
||||
{
|
||||
$record = ""; // make sure that our buffer variable is empty
|
||||
|
||||
// --- BEGIN TYPE = JOURNAL ARTICLE / MAGAZINE ARTICLE / NEWSPAPER ARTICLE --------------------------------------------------------------
|
||||
|
||||
if (preg_match("/^(Journal Article|Magazine Article|Newspaper Article)$/", $row['type']))
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($row['author'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", and ", // 5.
|
||||
"/ *, */", // 6.
|
||||
", ", // 7.
|
||||
" ", // 8.
|
||||
". ", // 9.
|
||||
false, // 10.
|
||||
true, // 11.
|
||||
false, // 12.
|
||||
"10", // 13.
|
||||
"10", // 14.
|
||||
" et al.", // 15.
|
||||
$encodeHTML // 16.
|
||||
);
|
||||
|
||||
if (!preg_match("/\. *$/", $author))
|
||||
$record .= $author . ".";
|
||||
else
|
||||
$record .= $author;
|
||||
}
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
if (!empty($row['author']))
|
||||
$record .= " ";
|
||||
|
||||
$record .= '"' . $row['title'];
|
||||
if (!preg_match("/[?!.]$/", $row['title']))
|
||||
$record .= ".";
|
||||
$record .= '"';
|
||||
}
|
||||
|
||||
// From here on we'll assume that at least either the 'author' or the 'title' field did contain some contents
|
||||
// if this is not the case, the output string will begin with a space. However, any preceding/trailing whitespace will be removed at the cleanup stage (see below)
|
||||
|
||||
if (!empty($row['publication'])) // publication (= journal) name
|
||||
$record .= " " . $markupPatternsArray["italic-prefix"] . $row['publication'] . $markupPatternsArray["italic-suffix"];
|
||||
|
||||
// if there's no full journal name, we'll use the abbreviated journal name
|
||||
elseif (!empty($row['abbrev_journal'])) // abbreviated journal name
|
||||
$record .= " " . $markupPatternsArray["italic-prefix"] . $row['abbrev_journal'] . $markupPatternsArray["italic-suffix"];
|
||||
|
||||
if (!empty($row['volume'])) // volume
|
||||
$record .= " " . $row['volume'];
|
||||
|
||||
if (!empty($row['issue'])) // issue
|
||||
$record .= ", no. " . $row['issue'];
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
$record .= " (" . $row['year'] . ")";
|
||||
|
||||
if (!empty($row['pages'])) // pages
|
||||
{
|
||||
if (!empty($row['year']) || !empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])) // only add ": " if either year, volume, issue, abbrev_journal or publication isn't empty
|
||||
$record .= ": ";
|
||||
|
||||
$record .= formatPageInfo($row['pages'], $markupPatternsArray["endash"]); // function 'formatPageInfo()' is defined in 'cite.inc.php'
|
||||
}
|
||||
|
||||
if ($row['online_publication'] == "yes") // this record refers to an online article
|
||||
{
|
||||
// append an optional string (given in 'online_citation') plus the current date and the DOI (or URL):
|
||||
|
||||
$today = date("F j, Y");
|
||||
|
||||
if (!empty($row['online_citation'])) // online_citation
|
||||
{
|
||||
if (!empty($row['year']) || !empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])) // only add "," if either year, volume, issue, abbrev_journal or publication isn't empty
|
||||
{
|
||||
if (empty($row['pages']))
|
||||
$record .= ":"; // print instead of pages
|
||||
else
|
||||
$record .= ","; // append to pages
|
||||
}
|
||||
|
||||
$record .= " " . $row['online_citation'];
|
||||
}
|
||||
|
||||
if (!empty($row['doi'])) // doi
|
||||
{
|
||||
if (!empty($row['online_citation']) OR (empty($row['online_citation']) AND (!empty($row['year']) || !empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])))) // only add "." if online_citation isn't empty, or else if either year, volume, issue, abbrev_journal or publication isn't empty
|
||||
$record .= "."; // NOTE: some Chicago examples (e.g. <http://www.lib.berkeley.edu/instruct/guides/chicago-turabianstyle.pdf>) use a comma here (not sure what's correct)
|
||||
|
||||
if ($encodeHTML)
|
||||
$record .= " " . encodeHTML("http://dx.doi.org/" . $row['doi']) . " (accessed " . $today . ")";
|
||||
else
|
||||
$record .= " " . "http://dx.doi.org/" . $row['doi'] . " (accessed " . $today . ")";
|
||||
}
|
||||
elseif (!empty($row['url'])) // url
|
||||
{
|
||||
if (!empty($row['online_citation']) OR (empty($row['online_citation']) AND (!empty($row['year']) || !empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])))) // only add "." if online_citation isn't empty, or else if either year, volume, issue, abbrev_journal or publication isn't empty
|
||||
$record .= "."; // see note for doi
|
||||
|
||||
if ($encodeHTML)
|
||||
$record .= " " . encodeHTML($row['url']) . " (accessed " . $today . ")";
|
||||
else
|
||||
$record .= " " . $row['url'] . " (accessed " . $today . ")";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// --- BEGIN TYPE = ABSTRACT / BOOK CHAPTER / CONFERENCE ARTICLE ------------------------------------------------------------------------
|
||||
|
||||
elseif (preg_match("/^(Abstract|Book Chapter|Conference Article)$/", $row['type']))
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($row['author'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", and ", // 5.
|
||||
"/ *, */", // 6.
|
||||
", ", // 7.
|
||||
" ", // 8.
|
||||
". ", // 9.
|
||||
false, // 10.
|
||||
true, // 11.
|
||||
false, // 12.
|
||||
"10", // 13.
|
||||
"10", // 14.
|
||||
" et al.", // 15.
|
||||
$encodeHTML // 16.
|
||||
);
|
||||
|
||||
if (!preg_match("/\. *$/", $author))
|
||||
$record .= $author . ".";
|
||||
else
|
||||
$record .= $author;
|
||||
}
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
if (!empty($row['author']))
|
||||
$record .= " ";
|
||||
|
||||
$record .= '"' . $row['title'];
|
||||
if (!preg_match("/[?!.]$/", $row['title']))
|
||||
$record .= ".";
|
||||
$record .= '"';
|
||||
}
|
||||
|
||||
$publication = preg_replace("/[ \r\n]*\(Eds?:[^\)\r\n]*\)/i", "", $row['publication']);
|
||||
if (!empty($publication)) // publication
|
||||
$record .= " In " . $markupPatternsArray["italic-prefix"] . $publication . $markupPatternsArray["italic-suffix"];
|
||||
|
||||
|
||||
// From here on we'll assume that at least either the 'author' or the 'title' field did contain some contents
|
||||
// if this is not the case, the output string will begin with a space. However, any preceding/trailing whitespace will be removed at the cleanup stage (see below)
|
||||
|
||||
if (!empty($row['editor'])) // editor
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$editor = reArrangeAuthorContents($row['editor'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
" and ", // 5.
|
||||
"/ *, */", // 6.
|
||||
" ", // 7.
|
||||
" ", // 8.
|
||||
". ", // 9.
|
||||
true, // 10.
|
||||
true, // 11.
|
||||
false, // 12.
|
||||
"10", // 13.
|
||||
"10", // 14.
|
||||
" et al.", // 15.
|
||||
$encodeHTML // 16.
|
||||
);
|
||||
|
||||
$record .= ", edited by " . $editor;
|
||||
}
|
||||
|
||||
if (!empty($row['pages'])) // pages
|
||||
$record .= ", " . formatPageInfo($row['pages'], $markupPatternsArray["endash"]); // function 'formatPageInfo()' is defined in 'cite.inc.php'
|
||||
|
||||
if (!empty($row['edition']) && !preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition'])) // edition
|
||||
{
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
if (preg_match("/^\d{1,3}$/", $row['edition'])) // if the edition field contains a number of up to three digits, we assume it's an edition number (such as "2nd ed.")
|
||||
{
|
||||
if ($row['edition'] == "2")
|
||||
$editionSuffix = "nd";
|
||||
elseif ($row['edition'] == "3")
|
||||
$editionSuffix = "rd";
|
||||
else
|
||||
$editionSuffix = "th";
|
||||
}
|
||||
else
|
||||
$editionSuffix = "";
|
||||
|
||||
if (!preg_match("/( ed\.?| edition)$/i", $row['edition']))
|
||||
$editionSuffix .= " ed.";
|
||||
|
||||
$record .= " " . $row['edition'] . $editionSuffix;
|
||||
}
|
||||
|
||||
if (!empty($row['volume'])) // volume
|
||||
{
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " Vol. " . $row['volume'];
|
||||
}
|
||||
|
||||
if (!empty($row['abbrev_series_title']) OR !empty($row['series_title'])) // if there's either a full or an abbreviated series title
|
||||
{
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " ";
|
||||
|
||||
if (!empty($row['abbrev_series_title']))
|
||||
$record .= $row['abbrev_series_title']; // abbreviated series title
|
||||
|
||||
// if there's no abbreviated series title, we'll use the full series title instead:
|
||||
elseif (!empty($row['series_title']))
|
||||
$record .= $row['series_title']; // full series title
|
||||
|
||||
if (!empty($row['series_volume'])||!empty($row['series_issue']))
|
||||
$record .= " ";
|
||||
|
||||
if (!empty($row['series_volume'])) // series volume
|
||||
$record .= $row['series_volume'];
|
||||
|
||||
if (!empty($row['series_issue'])) // series issue (I'm not really sure if -- for this cite style -- the series issue should be rather omitted here)
|
||||
$record .= ", no. " . $row['series_issue']; // is it correct to format series issues similar to journal article issues?
|
||||
}
|
||||
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
if (!empty($row['place'])) // place
|
||||
$record .= " " . $row['place'];
|
||||
|
||||
if (!empty($row['publisher'])) // publisher
|
||||
{
|
||||
if (!empty($row['place']))
|
||||
$record .= ":";
|
||||
|
||||
$record .= " " . $row['publisher'];
|
||||
}
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
$record .= ", " . $row['year'];
|
||||
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// --- BEGIN TYPE = BOOK WHOLE / CONFERENCE VOLUME / JOURNAL / MANUAL / MANUSCRIPT / MAP / MISCELLANEOUS / PATENT / REPORT / SOFTWARE ---
|
||||
|
||||
else // if (preg_match("/Book Whole|Conference Volume|Journal|Manual|Manuscript|Map|Miscellaneous|Patent|Report|Software/", $row['type']))
|
||||
// note that this also serves as a fallback: unrecognized resource types will be formatted similar to whole books
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
$author = preg_replace("/[ \r\n]*\(eds?\)/i", "", $row['author']);
|
||||
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($author, // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", and ", // 5.
|
||||
"/ *, */", // 6.
|
||||
", ", // 7.
|
||||
" ", // 8.
|
||||
". ", // 9.
|
||||
false, // 10.
|
||||
true, // 11.
|
||||
false, // 12.
|
||||
"10", // 13.
|
||||
"10", // 14.
|
||||
" et al.", // 15.
|
||||
$encodeHTML // 16.
|
||||
);
|
||||
|
||||
// if the author is actually the editor of the resource we'll append ', ed' (or ', eds') to the author string:
|
||||
// [to distinguish editors from authors in the 'author' field, the 'modify.php' script does append ' (ed)' or ' (eds)' if appropriate,
|
||||
// so we're just checking for these identifier strings here. Alternatively, we could check whether the editor field matches the author field]
|
||||
if (preg_match("/[ \r\n]*\(ed\)/", $row['author'])) // single editor
|
||||
$author = $author . ", ed";
|
||||
elseif (preg_match("/[ \r\n]*\(eds\)/", $row['author'])) // multiple editors
|
||||
$author = $author . ", eds";
|
||||
|
||||
if (!preg_match("/\. *$/", $author))
|
||||
$record .= $author . ".";
|
||||
else
|
||||
$record .= $author;
|
||||
}
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
if (!empty($row['author']))
|
||||
$record .= " ";
|
||||
|
||||
if (!empty($row['thesis'])) // thesis
|
||||
{
|
||||
$record .= '"' . $row['title'];
|
||||
if (!preg_match("/[?!.]$/", $row['title']))
|
||||
$record .= ".";
|
||||
$record .= '"';
|
||||
}
|
||||
else // not a thesis
|
||||
$record .= $markupPatternsArray["italic-prefix"] . $row['title'] . $markupPatternsArray["italic-suffix"];
|
||||
}
|
||||
|
||||
if (!empty($row['editor']) && !preg_match("/[ \r\n]*\(eds?\)/", $row['author'])) // editor (if different from author, see note above regarding the check for ' (ed)' or ' (eds)')
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$editor = reArrangeAuthorContents($row['editor'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", and ", // 5.
|
||||
"/ *, */", // 6.
|
||||
" ", // 7.
|
||||
" ", // 8.
|
||||
". ", // 9.
|
||||
true, // 10.
|
||||
true, // 11.
|
||||
false, // 12.
|
||||
"10", // 13.
|
||||
"10", // 14.
|
||||
" et al.", // 15.
|
||||
$encodeHTML // 16.
|
||||
);
|
||||
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " Edited by " . $editor;
|
||||
}
|
||||
|
||||
if (!empty($row['edition']) && !preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition'])) // edition
|
||||
{
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
if (preg_match("/^\d{1,3}$/", $row['edition'])) // if the edition field contains a number of up to three digits, we assume it's an edition number (such as "2nd ed.")
|
||||
{
|
||||
if ($row['edition'] == "2")
|
||||
$editionSuffix = "nd";
|
||||
elseif ($row['edition'] == "3")
|
||||
$editionSuffix = "rd";
|
||||
else
|
||||
$editionSuffix = "th";
|
||||
}
|
||||
else
|
||||
$editionSuffix = "";
|
||||
|
||||
if (!preg_match("/( ed\.?| edition)$/i", $row['edition']))
|
||||
$editionSuffix .= " ed.";
|
||||
|
||||
$record .= " " . $row['edition'] . $editionSuffix;
|
||||
}
|
||||
|
||||
if (!empty($row['volume'])) // volume
|
||||
{
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " Vol. " . $row['volume'];
|
||||
}
|
||||
|
||||
if (!empty($row['abbrev_series_title']) OR !empty($row['series_title'])) // if there's either a full or an abbreviated series title
|
||||
{
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " ";
|
||||
|
||||
if (!empty($row['abbrev_series_title']))
|
||||
$record .= $row['abbrev_series_title']; // abbreviated series title
|
||||
|
||||
// if there's no abbreviated series title, we'll use the full series title instead:
|
||||
elseif (!empty($row['series_title']))
|
||||
$record .= $row['series_title']; // full series title
|
||||
|
||||
if (!empty($row['series_volume'])||!empty($row['series_issue']))
|
||||
$record .= " ";
|
||||
|
||||
if (!empty($row['series_volume'])) // series volume
|
||||
$record .= $row['series_volume'];
|
||||
|
||||
if (!empty($row['series_issue'])) // series issue (I'm not really sure if -- for this cite style -- the series issue should be rather omitted here)
|
||||
$record .= ", no. " . $row['series_issue']; // is it correct to format series issues similar to journal article issues?
|
||||
}
|
||||
|
||||
if (!empty($row['thesis'])) // thesis
|
||||
{
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " " . $row['thesis'];
|
||||
$record .= ", " . $row['publisher'];
|
||||
}
|
||||
else // not a thesis
|
||||
{
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
if (!empty($row['place'])) // place
|
||||
$record .= " " . $row['place'];
|
||||
|
||||
if (!empty($row['publisher'])) // publisher
|
||||
{
|
||||
if (!empty($row['place']))
|
||||
$record .= ":";
|
||||
|
||||
$record .= " " . $row['publisher'];
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
$record .= ", ".$row['year'];
|
||||
|
||||
if ($row['online_publication'] == "yes") // this record refers to an online article
|
||||
{
|
||||
// append an optional string (given in 'online_citation') plus the current date and the DOI (or URL):
|
||||
|
||||
$today = date("F j, Y");
|
||||
|
||||
if (!empty($row['online_citation'])) // online_citation
|
||||
{
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " " . $row['online_citation'];
|
||||
}
|
||||
|
||||
if (!empty($row['doi'])) // doi
|
||||
{
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
if ($encodeHTML)
|
||||
$record .= " " . encodeHTML("http://dx.doi.org/" . $row['doi']) . " (accessed " . $today . ")";
|
||||
else
|
||||
$record .= " " . "http://dx.doi.org/" . $row['doi'] . " (accessed " . $today . ")";
|
||||
}
|
||||
elseif (!empty($row['url'])) // url
|
||||
{
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
if ($encodeHTML)
|
||||
$record .= " " . encodeHTML($row['url']) . " (accessed " . $today . ")";
|
||||
else
|
||||
$record .= " " . $row['url'] . " (accessed " . $today . ")";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// --- BEGIN POST-PROCESSING -----------------------------------------------------------------------------------------------------------
|
||||
|
||||
// do some further cleanup:
|
||||
$record = trim($record); // remove any preceding or trailing whitespace
|
||||
|
||||
|
||||
return $record;
|
||||
}
|
||||
|
||||
// --- END CITATION STYLE ---
|
||||
?>
|
||||
438
cite/styles/cite_DeepSeaRes.php
Normal file
438
cite/styles/cite_DeepSeaRes.php
Normal file
@@ -0,0 +1,438 @@
|
||||
<?php
|
||||
// Project: Web Reference Database (refbase) <http://www.refbase.net>
|
||||
// Copyright: Matthias Steffens <mailto:refbase@extracts.de> and the file's
|
||||
// original author(s).
|
||||
//
|
||||
// This code is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY. Please see the GNU General Public
|
||||
// License for more details.
|
||||
//
|
||||
// File: ./cite/styles/cite_DeepSeaRes.php
|
||||
// Repository: $HeadURL: file:///svn/p/refbase/code/branches/bleeding-edge/cite/styles/cite_DeepSeaRes.php $
|
||||
// Author(s): Matthias Steffens <mailto:refbase@extracts.de>
|
||||
//
|
||||
// Created: 28-Sep-04, 23:36
|
||||
// Modified: $Date: 2012-02-27 20:25:30 +0000 (Mon, 27 Feb 2012) $
|
||||
// $Author: msteffens $
|
||||
// $Revision: 1337 $
|
||||
|
||||
// This is a citation style file (which must reside within the 'cite/styles/' sub-directory of your refbase root directory). It contains a
|
||||
// version of the 'citeRecord()' function that outputs a reference list from selected records according to the citation style used by
|
||||
// the journal "Deep Sea Research".
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
// --- BEGIN CITATION STYLE ---
|
||||
|
||||
function citeRecord($row, $citeStyle, $citeType, $markupPatternsArray, $encodeHTML)
|
||||
{
|
||||
global $alnum, $alpha, $cntrl, $dash, $digit, $graph, $lower, $print, $punct, $space, $upper, $word, $patternModifiers; // defined in 'transtab_unicode_charset.inc.php' and 'transtab_latin1_charset.inc.php'
|
||||
|
||||
$record = ""; // make sure that our buffer variable is empty
|
||||
|
||||
// --- BEGIN TYPE = JOURNAL ARTICLE / MAGAZINE ARTICLE / NEWSPAPER ARTICLE --------------------------------------------------------------
|
||||
|
||||
if (preg_match("/^(Journal Article|Magazine Article|Newspaper Article)$/", $row['type']))
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($row['author'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", ", // 5.
|
||||
"/ *, */", // 6.
|
||||
", ", // 7.
|
||||
", ", // 8.
|
||||
".", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"", // 13.
|
||||
"", // 14.
|
||||
" " . $markupPatternsArray["italic-prefix"] . "and __NUMBER_OF_AUTHORS__ others" . $markupPatternsArray["italic-suffix"], // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
$record .= $author . ", ";
|
||||
}
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
$record .= $row['year'] . ". ";
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
$record .= $row['title'];
|
||||
if (!preg_match("/[?!.]$/", $row['title']))
|
||||
$record .= ".";
|
||||
$record .= " ";
|
||||
}
|
||||
|
||||
if (!empty($row['publication'])) // publication
|
||||
$record .= $row['publication'] . " ";
|
||||
|
||||
if (!empty($row['volume'])) // volume
|
||||
$record .= $row['volume'];
|
||||
|
||||
if (!empty($row['issue'])) // issue
|
||||
$record .= " (" . $row['issue'] . ")";
|
||||
|
||||
if ($row['online_publication'] == "yes") // this record refers to an online article
|
||||
{
|
||||
// instead of any pages info (which normally doesn't exist for online publications) we append
|
||||
// an optional string (given in 'online_citation') plus the DOI:
|
||||
|
||||
if (!empty($row['online_citation'])) // online_citation
|
||||
{
|
||||
if (!empty($row['publication'])||!empty($row['volume'])||!empty($row['issue'])) // only add "," if either publication, volume or issue isn't empty
|
||||
$record .= ",";
|
||||
|
||||
$record .= " " . $row['online_citation'];
|
||||
}
|
||||
|
||||
if (!empty($row['doi'])) // doi
|
||||
{
|
||||
if (!empty($row['publication'])||!empty($row['volume'])||!empty($row['issue'])) // only add "," if either publication, volume or issue isn't empty
|
||||
$record .= ",";
|
||||
|
||||
$record .= " doi:" . $row['doi'];
|
||||
}
|
||||
}
|
||||
else // $row['online_publication'] == "no" -> this record refers to a printed article, so we append any pages info instead:
|
||||
{
|
||||
if (!empty($row['pages'])) // pages
|
||||
{
|
||||
if (!empty($row['volume'])||!empty($row['issue'])) // only add "," if either volume or issue isn't empty
|
||||
$record .= ", ";
|
||||
|
||||
$record .= formatPageInfo($row['pages'], $markupPatternsArray["endash"], "", "", "pp"); // function 'formatPageInfo()' is defined in 'cite.inc.php'
|
||||
}
|
||||
}
|
||||
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// --- BEGIN TYPE = ABSTRACT / BOOK CHAPTER / CONFERENCE ARTICLE ------------------------------------------------------------------------
|
||||
|
||||
elseif (preg_match("/^(Abstract|Book Chapter|Conference Article)$/", $row['type']))
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($row['author'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", ", // 5.
|
||||
"/ *, */", // 6.
|
||||
", ", // 7.
|
||||
", ", // 8.
|
||||
".", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"", // 13.
|
||||
"", // 14.
|
||||
" " . $markupPatternsArray["italic-prefix"] . "and __NUMBER_OF_AUTHORS__ others" . $markupPatternsArray["italic-suffix"], // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
$record .= $author . ", ";
|
||||
}
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
$record .= $row['year'] . ". ";
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
$record .= $row['title'];
|
||||
if (!preg_match("/[?!.]$/", $row['title']))
|
||||
$record .= ".";
|
||||
$record .= " ";
|
||||
}
|
||||
|
||||
if (!empty($row['editor'])) // editor
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$editor = reArrangeAuthorContents($row['editor'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", ", // 5.
|
||||
"/ *, */", // 6.
|
||||
", ", // 7.
|
||||
", ", // 8.
|
||||
".", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"", // 13.
|
||||
"", // 14.
|
||||
" " . $markupPatternsArray["italic-prefix"] . "and __NUMBER_OF_AUTHORS__ others" . $markupPatternsArray["italic-suffix"], // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
$record .= "In: " . $editor;
|
||||
if (preg_match("/^[^;\r\n]+(;[^;\r\n]+)+$/", $row['editor'])) // there are at least two editors (separated by ';')
|
||||
$record .= " (Eds.)";
|
||||
else // there's only one editor (or the editor field is malformed with multiple editors but missing ';' separator[s])
|
||||
$record .= " (Ed.)";
|
||||
}
|
||||
|
||||
$publication = preg_replace("/[ \r\n]*\(Eds?:[^\)\r\n]*\)/i", "", $row['publication']);
|
||||
if (!empty($publication)) // publication
|
||||
$record .= ", " . $publication . ". ";
|
||||
else
|
||||
if (!empty($row['editor']))
|
||||
$record .= ". ";
|
||||
|
||||
if (!empty($row['series_title'])) // if there's a series title, series information will replace the publisher & place information
|
||||
{
|
||||
$record .= $row['series_title']; // series title
|
||||
|
||||
if (!empty($row['series_volume'])||!empty($row['series_issue']))
|
||||
$record .= " ";
|
||||
|
||||
if (!empty($row['series_volume'])) // series volume
|
||||
$record .= $row['series_volume'];
|
||||
|
||||
if (!empty($row['series_issue'])) // series issue
|
||||
$record .= "(" . $row['series_issue'] . ")";
|
||||
|
||||
if (!empty($row['pages']))
|
||||
$record .= ", ";
|
||||
|
||||
}
|
||||
else // if there's NO series title available, we'll insert the publisher & place instead:
|
||||
{
|
||||
if (!empty($row['publisher'])) // publisher
|
||||
{
|
||||
$record .= $row['publisher'];
|
||||
if (!empty($row['place']))
|
||||
$record .= ", ";
|
||||
else
|
||||
{
|
||||
if (!preg_match("/,$/", $row['publisher']))
|
||||
$record .= ",";
|
||||
$record .= " ";
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($row['place'])) // place
|
||||
{
|
||||
$record .= $row['place'];
|
||||
if (!empty($row['pages']))
|
||||
{
|
||||
if (!preg_match("/,$/", $row['place']))
|
||||
$record .= ",";
|
||||
$record .= " ";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($row['pages'])) // pages
|
||||
$record .= formatPageInfo($row['pages'], $markupPatternsArray["endash"], "p. ", "pp. ", "pp"); // function 'formatPageInfo()' is defined in 'cite.inc.php'
|
||||
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// --- BEGIN TYPE = BOOK WHOLE / CONFERENCE VOLUME / JOURNAL / MANUAL / MANUSCRIPT / MAP / MISCELLANEOUS / PATENT / REPORT / SOFTWARE ---
|
||||
|
||||
else // if (preg_match("/Book Whole|Conference Volume|Journal|Manual|Manuscript|Map|Miscellaneous|Patent|Report|Software/", $row['type']))
|
||||
// note that this also serves as a fallback: unrecognized resource types will be formatted similar to whole books
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
$author = preg_replace("/[ \r\n]*\(eds?\)/i", "", $row['author']);
|
||||
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($author, // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", ", // 5.
|
||||
"/ *, */", // 6.
|
||||
", ", // 7.
|
||||
", ", // 8.
|
||||
".", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"", // 13.
|
||||
"", // 14.
|
||||
" " . $markupPatternsArray["italic-prefix"] . "and __NUMBER_OF_AUTHORS__ others" . $markupPatternsArray["italic-suffix"], // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
$record .= $author . ", ";
|
||||
}
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
$record .= $row['year'] . ". ";
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
$record .= $row['title'];
|
||||
if (!preg_match("/[?!.]$/", $row['title']))
|
||||
$record .= ".";
|
||||
$record .= " ";
|
||||
}
|
||||
|
||||
if (!empty($row['thesis'])) // thesis
|
||||
$record .= $row['thesis'] . ". ";
|
||||
|
||||
if (!empty($row['publisher'])) // publisher
|
||||
{
|
||||
$record .= $row['publisher'];
|
||||
if (!empty($row['place']))
|
||||
$record .= ", ";
|
||||
else
|
||||
{
|
||||
if (!preg_match("/[?!.]$/", $row['publisher']))
|
||||
$record .= ". ";
|
||||
else
|
||||
$record .= " ";
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($row['place'])) // place
|
||||
{
|
||||
$record .= $row['place'];
|
||||
if (!empty($row['series_title']) || !empty($row['pages']))
|
||||
{
|
||||
if (!preg_match("/,$/", $row['place']))
|
||||
$record .= ",";
|
||||
$record .= " ";
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($row['series_title'])) // series title
|
||||
{
|
||||
$record .= $row['series_title'];
|
||||
|
||||
if (!empty($row['series_volume'])) // series volume (will get appended only if there's also a series title!)
|
||||
{
|
||||
$record .= " ";
|
||||
$record .= $row['series_volume'];
|
||||
}
|
||||
|
||||
if (!empty($row['pages']))
|
||||
{
|
||||
if (!preg_match("/,$/", $row['series_volume']))
|
||||
$record .= ",";
|
||||
$record .= " ";
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($row['pages'])) // pages
|
||||
{
|
||||
// TODO: use function 'formatPageInfo()' when it can recognize & process total number of pages
|
||||
// $record .= formatPageInfo($row['pages'], $markupPatternsArray["endash"], "p. ", "pp. ", "pp"); // function 'formatPageInfo()' is defined in 'cite.inc.php'
|
||||
|
||||
if (preg_match("/\d *[$dash] *\d/$patternModifiers", $row['pages'])) // if the 'pages' field contains a page range (like: "127-132")
|
||||
// Note that we'll check for page ranges here although for whole books the 'pages' field should NOT contain a page range but the total number of pages! (like: "623 pp")
|
||||
$pagesDisplay = (preg_replace("@(\d+) *[$dash] *(\d+)@$patternModifiers", "\\1" . $markupPatternsArray["endash"] . "\\2", $row['pages']));
|
||||
else
|
||||
$pagesDisplay = $row['pages'];
|
||||
$record .= $pagesDisplay;
|
||||
}
|
||||
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// --- BEGIN POST-PROCESSING -----------------------------------------------------------------------------------------------------------
|
||||
|
||||
// do some further cleanup:
|
||||
$record = preg_replace("/[ \r\n]*$/i", "", $record); // remove whitespace at end of line
|
||||
$record = preg_replace("/([0-9]+) *pp\.$/i", "\\1pp.", $record); // remove space between (book whole) page numbers & "pp"
|
||||
|
||||
|
||||
return $record;
|
||||
}
|
||||
|
||||
// --- END CITATION STYLE ---
|
||||
?>
|
||||
691
cite/styles/cite_Harvard_1.php
Normal file
691
cite/styles/cite_Harvard_1.php
Normal file
@@ -0,0 +1,691 @@
|
||||
<?php
|
||||
// Project: Web Reference Database (refbase) <http://www.refbase.net>
|
||||
// Copyright: Matthias Steffens <mailto:refbase@extracts.de> and the file's
|
||||
// original author(s).
|
||||
//
|
||||
// This code is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY. Please see the GNU General Public
|
||||
// License for more details.
|
||||
//
|
||||
// File: ./cite/styles/cite_Harvard_1.php
|
||||
// Repository: $HeadURL$
|
||||
// Author(s): Matthias Steffens <mailto:refbase@extracts.de>
|
||||
//
|
||||
// Created: 12-Aug-08, 16:00
|
||||
// Modified: $Date: 2012-02-27 20:25:30 +0000 (Mon, 27 Feb 2012) $
|
||||
// $Author$
|
||||
// $Revision: 1337 $
|
||||
|
||||
// This is a citation style file (which must reside within the 'cite/styles/' sub-directory of your refbase root directory). It contains a
|
||||
// version of the 'citeRecord()' function that outputs a reference list from selected records according to the citation style used by
|
||||
// the Harvard referencing system
|
||||
|
||||
// This is a variant of the Harvard author/date style, modeled after this guide:
|
||||
// <http://libweb.anglia.ac.uk/referencing/harvard.htm>
|
||||
|
||||
// based on 'cite_Harvard_3.php'
|
||||
|
||||
// TODO: - abstracts, conference proceedings, magazine articles, patents, reports & software?
|
||||
// - should we shorten ending page numbers if necessary (e.g. "p. 10-8" or "p. 51-5", but "p. 19-26"), or only if numbers are >=3 digits?
|
||||
// - where to put (and how to format) series info & editors of whole books that also have an author?
|
||||
// - see also inline comments labeled with TODO (and NOTE)
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
// --- BEGIN CITATION STYLE ---
|
||||
|
||||
function citeRecord($row, $citeStyle, $citeType, $markupPatternsArray, $encodeHTML)
|
||||
{
|
||||
$record = ""; // make sure that our buffer variable is empty
|
||||
|
||||
// --- BEGIN TYPE = JOURNAL ARTICLE / MAGAZINE ARTICLE / NEWSPAPER ARTICLE --------------------------------------------------------------
|
||||
|
||||
if (preg_match("/^(Journal Article|Magazine Article|Newspaper Article)$/", $row['type']))
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($row['author'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
" " . $markupPatternsArray["ampersand"] . " ", // 5.
|
||||
"/ *, */", // 6.
|
||||
", ", // 7.
|
||||
", ", // 8.
|
||||
".", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"4", // 13.
|
||||
"1", // 14.
|
||||
" et al", // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
$record .= $author;
|
||||
}
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
{
|
||||
if (!empty($row['author']))
|
||||
$record .= ", ";
|
||||
|
||||
if (!empty($row['year']))
|
||||
$record .= $row['year'];
|
||||
}
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
if (!empty($row['author']) || !empty($row['year']))
|
||||
$record .= ". ";
|
||||
|
||||
$record .= $row['title'];
|
||||
$record .= ",";
|
||||
}
|
||||
|
||||
// From here on we'll assume that at least one of the fields 'author', 'year' or 'title' did contain some contents
|
||||
|
||||
if (!empty($row['publication'])) // publication (= journal) name
|
||||
$record .= " " . $markupPatternsArray["italic-prefix"] . $row['publication'] . $markupPatternsArray["italic-suffix"];
|
||||
|
||||
// if there's no full journal name, we'll use the abbreviated journal name instead:
|
||||
elseif (!empty($row['abbrev_journal'])) // abbreviated journal name
|
||||
$record .= " " . $markupPatternsArray["italic-prefix"] . $row['abbrev_journal'] . $markupPatternsArray["italic-suffix"];
|
||||
|
||||
if ((!empty($row['abbrev_journal']) || !empty($row['publication'])) && (!empty($row['volume']) || !empty($row['issue'])))
|
||||
$record .= ","; // NOTE: for newspaper articles, the above mentioned guide uses a dot instead of a comma ("The Times, 3 Sep. p.4-5.") but this seems incorrect/inconsistent to me
|
||||
|
||||
if ($row['online_publication'] == "yes") // this record refers to an online publication
|
||||
$record .= " [Online]";
|
||||
|
||||
if ($row['type'] == "Journal Article")
|
||||
{
|
||||
if (!empty($row['volume'])) // volume
|
||||
$record .= " " . $row['volume'];
|
||||
|
||||
if (!empty($row['issue'])) // issue
|
||||
{
|
||||
if (!empty($row['volume']))
|
||||
$record .= " ";
|
||||
|
||||
$record .= "(" . $row['issue'] . ")";
|
||||
}
|
||||
}
|
||||
|
||||
elseif (preg_match("/^(Newspaper Article|Magazine Article)$/", $row['type'])) // for newspaper and magazine articles, volume (=month) and issue (=day) information is printed without prefix
|
||||
{
|
||||
if (!empty($row['issue'])) // issue (=day)
|
||||
$record .= " " . $row['issue'];
|
||||
|
||||
if (!empty($row['volume'])) // volume (=month)
|
||||
$record .= " " . $row['volume'];
|
||||
}
|
||||
|
||||
if (!empty($row['pages'])) // pages
|
||||
{
|
||||
if (!empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])) // only add ", " if either volume, issue, abbrev_journal or publication isn't empty
|
||||
$record .= ", ";
|
||||
|
||||
$record .= formatPageInfo($row['pages'], $markupPatternsArray["endash"], "p. ", "p. "); // function 'formatPageInfo()' is defined in 'cite.inc.php' (NOTE: from the examples in the above mentioned guide it's unclear whether "p." should be followed by a space or not)
|
||||
}
|
||||
|
||||
if ($row['online_publication'] == "yes") // this record refers to an online article
|
||||
{
|
||||
// append an optional string (given in 'online_citation') plus the current date and the DOI (or URL):
|
||||
|
||||
if (!empty($row['online_citation'])) // online_citation
|
||||
{
|
||||
if (!empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])) // only add "," if either volume, issue, abbrev_journal or publication isn't empty
|
||||
$record .= ",";
|
||||
|
||||
$record .= " " . $row['online_citation'];
|
||||
}
|
||||
|
||||
if (!empty($row['doi']) || !empty($row['url'])) // doi OR url
|
||||
{
|
||||
if (!empty($row['online_citation']) OR (empty($row['online_citation']) AND (!empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])))) // only add "." if online_citation isn't empty, or else if either volume, issue, abbrev_journal or publication isn't empty
|
||||
$record .= ".";
|
||||
|
||||
$today = date("j F Y");
|
||||
|
||||
$record .= " Available at: " . $markupPatternsArray["underline-prefix"];
|
||||
|
||||
if (!empty($row['doi'])) // doi
|
||||
$uri = "http://dx.doi.org/" . $row['doi'];
|
||||
else // url
|
||||
$uri = $row['url'];
|
||||
|
||||
if ($encodeHTML)
|
||||
$record .= encodeHTML($uri);
|
||||
else
|
||||
$record .= $uri;
|
||||
|
||||
$record .= $markupPatternsArray["underline-suffix"];
|
||||
|
||||
$record .= " [accessed " . $today . "]";
|
||||
}
|
||||
}
|
||||
|
||||
if (!preg_match("/\. *$/", $record)) // if the string doesn't end with a period
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// --- BEGIN TYPE = ABSTRACT / BOOK CHAPTER / CONFERENCE ARTICLE ------------------------------------------------------------------------
|
||||
|
||||
elseif (preg_match("/^(Abstract|Book Chapter|Conference Article)$/", $row['type']))
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($row['author'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
" " . $markupPatternsArray["ampersand"] . " ", // 5.
|
||||
"/ *, */", // 6.
|
||||
", ", // 7.
|
||||
", ", // 8.
|
||||
".", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"4", // 13.
|
||||
"1", // 14.
|
||||
" et al", // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
$record .= $author;
|
||||
}
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
{
|
||||
if (!empty($row['author']))
|
||||
$record .= ", ";
|
||||
|
||||
$record .= $row['year'];
|
||||
}
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
if (!empty($row['author']) || !empty($row['year']))
|
||||
$record .= ". ";
|
||||
|
||||
$record .= $row['title'];
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// From here on we'll assume that at least one of the fields 'author', 'year' or 'title' did contain some contents
|
||||
// if this is not the case, the output string will begin with a space. However, any preceding/trailing whitespace will be removed at the cleanup stage (see below)
|
||||
|
||||
if (!empty($row['editor'])) // editor
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$editor = reArrangeAuthorContents($row['editor'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
" " . $markupPatternsArray["ampersand"] . " ", // 5.
|
||||
"/ *, */", // 6.
|
||||
" ", // 7.
|
||||
" ", // 8.
|
||||
".", // 9.
|
||||
true, // 10.
|
||||
true, // 11.
|
||||
true, // 12.
|
||||
"4", // 13.
|
||||
"1", // 14.
|
||||
" et al", // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
$record .= " In " . $editor . ", ";
|
||||
if (preg_match("/^[^;\r\n]+(;[^;\r\n]+)+$/", $row['editor'])) // there are at least two editors (separated by ';')
|
||||
$record .= "eds.";
|
||||
else // there's only one editor (or the editor field is malformed with multiple editors but missing ';' separator[s])
|
||||
$record .= "ed.";
|
||||
}
|
||||
|
||||
$publication = preg_replace("/[ \r\n]*\(Eds?:[^\)\r\n]*\)/i", "", $row['publication']);
|
||||
if (!empty($publication)) // publication
|
||||
{
|
||||
if (empty($row['editor']))
|
||||
$record .= " In";
|
||||
|
||||
$record .= " " . $markupPatternsArray["italic-prefix"] . $publication . $markupPatternsArray["italic-suffix"];
|
||||
}
|
||||
|
||||
if (!empty($row['edition']) && !preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition']) || !empty($row['volume']))
|
||||
{
|
||||
$record .= ". ";
|
||||
|
||||
if (!empty($row['edition']) && !preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition'])) // edition
|
||||
{
|
||||
if (preg_match("/^\d{1,3}$/", $row['edition'])) // if the edition field contains a number of up to three digits, we assume it's an edition number (such as "2nd ed.")
|
||||
{
|
||||
if ($row['edition'] == "2")
|
||||
$editionSuffix = "nd";
|
||||
elseif ($row['edition'] == "3")
|
||||
$editionSuffix = "rd";
|
||||
else
|
||||
$editionSuffix = "th";
|
||||
}
|
||||
else
|
||||
$editionSuffix = "";
|
||||
|
||||
if (!empty($row['edition']) && !preg_match("/( ed\.?| edition)$/i", $row['edition']))
|
||||
$editionSuffix .= " ed.";
|
||||
|
||||
$record .= $row['edition'] . $editionSuffix;
|
||||
}
|
||||
|
||||
if (!empty($row['volume'])) // volume
|
||||
{
|
||||
if (!empty($row['edition']) && !preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition']))
|
||||
$record .= ", ";
|
||||
|
||||
$record .= "vol. " . $row['volume']; // TODO: not sure whether this is correct
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($row['abbrev_series_title']) OR !empty($row['series_title'])) // if there's either a full or an abbreviated series title
|
||||
{
|
||||
$record .= ". ";
|
||||
|
||||
if (!empty($row['series_title']))
|
||||
$record .= $row['series_title']; // full series title
|
||||
|
||||
// if there's no full series title, we'll use the abbreviated series title instead:
|
||||
elseif (!empty($row['abbrev_series_title']))
|
||||
$record .= $row['abbrev_series_title']; // abbreviated series title
|
||||
|
||||
if (!empty($row['series_volume'])||!empty($row['series_issue']))
|
||||
$record .= ", ";
|
||||
|
||||
if (!empty($row['series_volume'])) // series volume (I'm not really sure if -- for this cite style -- the series volume & issue should be rather omitted here)
|
||||
$record .= "vol. " . $row['series_volume']; // TODO: not sure whether this is correct
|
||||
|
||||
if (!empty($row['series_issue'])) // series issue (see note for series volume)
|
||||
{
|
||||
if (!empty($row['series_volume']))
|
||||
$record .= ", ";
|
||||
|
||||
$record .= "no. " . $row['series_issue']; // TODO: not sure whether this is correct
|
||||
}
|
||||
}
|
||||
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
if (!empty($row['place'])) // place
|
||||
$record .= " " . $row['place'];
|
||||
|
||||
if (!empty($row['publisher'])) // publisher
|
||||
{
|
||||
if (!empty($row['place']))
|
||||
$record .= ":";
|
||||
|
||||
$record .= " " . $row['publisher'];
|
||||
}
|
||||
|
||||
if (!empty($row['pages'])) // pages
|
||||
{
|
||||
if (!empty($row['publisher']) || !empty($row['place']))
|
||||
$record .= ", ";
|
||||
|
||||
$record .= formatPageInfo($row['pages'], $markupPatternsArray["endash"], "p. ", "p. "); // function 'formatPageInfo()' is defined in 'cite.inc.php' (NOTE: from the examples in the above mentioned guide it's unclear whether "p." should be followed by a space or not)
|
||||
}
|
||||
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// --- BEGIN TYPE = BOOK WHOLE / CONFERENCE VOLUME / JOURNAL / MANUAL / MANUSCRIPT / MAP / MISCELLANEOUS / PATENT / REPORT / SOFTWARE ---
|
||||
|
||||
else // if (preg_match("/Book Whole|Conference Volume|Journal|Manual|Manuscript|Map|Miscellaneous|Patent|Report|Software/", $row['type']))
|
||||
// note that this also serves as a fallback: unrecognized resource types will be formatted similar to whole books
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
$author = preg_replace("/[ \r\n]*\(eds?\)/i", "", $row['author']);
|
||||
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($author, // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
" " . $markupPatternsArray["ampersand"] . " ", // 5.
|
||||
"/ *, */", // 6.
|
||||
", ", // 7.
|
||||
", ", // 8.
|
||||
".", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"4", // 13.
|
||||
"1", // 14.
|
||||
" et al", // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
// if the author is actually the editor of the resource we'll append ', ed' (or ', eds') to the author string:
|
||||
// [to distinguish editors from authors in the 'author' field, the 'modify.php' script does append ' (ed)' or ' (eds)' if appropriate,
|
||||
// so we're just checking for these identifier strings here. Alternatively, we could check whether the editor field matches the author field]
|
||||
if (preg_match("/[ \r\n]*\(ed\)/", $row['author'])) // single editor
|
||||
$author = $author . " ed.";
|
||||
elseif (preg_match("/[ \r\n]*\(eds\)/", $row['author'])) // multiple editors
|
||||
$author = $author . " eds.";
|
||||
|
||||
$record .= $author;
|
||||
}
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
{
|
||||
if (!empty($row['author']))
|
||||
$record .= ", ";
|
||||
|
||||
$record .= $row['year'];
|
||||
}
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
if (!empty($row['author']) || !empty($row['year']))
|
||||
$record .= ". ";
|
||||
|
||||
$record .= $markupPatternsArray["italic-prefix"] . $row['title'] . $markupPatternsArray["italic-suffix"];
|
||||
}
|
||||
|
||||
if ($row['online_publication'] == "yes") // this record refers to an online publication
|
||||
$record .= ". [Online]"; // TODO: this may not be entirely correct, since, according to the above mentioned guide, the actual type should be used: e.g. "[e-book]" or "[CD-ROM]"
|
||||
|
||||
if (!empty($row['editor']) && !preg_match("/[ \r\n]*\(eds?\)/", $row['author'])) // editor (if different from author, see note above regarding the check for ' (ed)' or ' (eds)')
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$editor = reArrangeAuthorContents($row['editor'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
" " . $markupPatternsArray["ampersand"] . " ", // 5.
|
||||
"/ *, */", // 6.
|
||||
" ", // 7.
|
||||
" ", // 8.
|
||||
".", // 9.
|
||||
true, // 10.
|
||||
true, // 11.
|
||||
true, // 12.
|
||||
"4", // 13.
|
||||
"1", // 14.
|
||||
" et al", // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
if (!empty($row['author']) || !empty($row['year']) || !empty($row['title']))
|
||||
$record .= " ";
|
||||
|
||||
$record .= " (" . $editor . ", ";
|
||||
if (preg_match("/^[^;\r\n]+(;[^;\r\n]+)+$/", $row['editor'])) // there are at least two editors (separated by ';')
|
||||
$record .= "eds.";
|
||||
else // there's only one editor (or the editor field is malformed with multiple editors but missing ';' separator[s])
|
||||
$record .= "ed.";
|
||||
$record .= ")";
|
||||
}
|
||||
|
||||
if (!empty($row['edition']) || !empty($row['volume']))
|
||||
{
|
||||
if (!empty($row['author']) || !empty($row['year']) || !empty($row['title']) || (!empty($row['editor']) && !preg_match("/[ \r\n]*\(eds?\)/", $row['author'])))
|
||||
$record .= ". ";
|
||||
|
||||
if ($row['type'] == "Software") // software edition (=version)
|
||||
{
|
||||
if (!empty($row['edition']))
|
||||
{
|
||||
$record .= "Version " . $row['edition'];
|
||||
|
||||
if (!empty($row['volume']) || !empty($row['issue']))
|
||||
$record .= ", ";
|
||||
}
|
||||
|
||||
if (!empty($row['issue'])) // issue (=day)
|
||||
$record .= " " . $row['issue'];
|
||||
|
||||
if (!empty($row['volume'])) // volume (=month)
|
||||
$record .= " " . $row['volume'];
|
||||
}
|
||||
elseif (!preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition'])) // regular edition (other than the first)
|
||||
{
|
||||
if (preg_match("/^\d{1,3}$/", $row['edition'])) // if the edition field contains a number of up to three digits, we assume it's an edition number (such as "2nd ed.")
|
||||
{
|
||||
if ($row['edition'] == "2")
|
||||
$editionSuffix = "nd";
|
||||
elseif ($row['edition'] == "3")
|
||||
$editionSuffix = "rd";
|
||||
else
|
||||
$editionSuffix = "th";
|
||||
}
|
||||
else
|
||||
$editionSuffix = "";
|
||||
|
||||
if (!empty($row['edition']) && !preg_match("/( ed\.?| edition)$/i", $row['edition']))
|
||||
$editionSuffix .= " ed.";
|
||||
|
||||
$record .= $row['edition'] . $editionSuffix;
|
||||
|
||||
if (!empty($row['volume'])) // volume
|
||||
{
|
||||
if (!empty($row['edition']) && !preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition']))
|
||||
$record .= ", ";
|
||||
|
||||
$record .= "vol. " . $row['volume']; // TODO: not sure whether this is correct
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($row['type'] == "Software") // for software, add software label
|
||||
{
|
||||
$record .= ", computer software.";
|
||||
}
|
||||
else // add series info
|
||||
{
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
if (!empty($row['abbrev_series_title']) OR !empty($row['series_title'])) // if there's either a full or an abbreviated series title
|
||||
{
|
||||
$record .= " ";
|
||||
|
||||
if (!empty($row['series_title']))
|
||||
$record .= $row['series_title']; // full series title
|
||||
|
||||
// if there's no full series title, we'll use the abbreviated series title instead:
|
||||
elseif (!empty($row['abbrev_series_title']))
|
||||
$record .= $row['abbrev_series_title']; // abbreviated series title
|
||||
|
||||
if (!empty($row['series_volume'])||!empty($row['series_issue']))
|
||||
$record .= ", ";
|
||||
|
||||
if (!empty($row['series_volume'])) // series volume (I'm not really sure if -- for this cite style -- the series volume & issue should be rather omitted here)
|
||||
$record .= "vol. " . $row['series_volume']; // TODO: not sure whether this is correct
|
||||
|
||||
if (!empty($row['series_issue'])) // series issue (see note for series volume)
|
||||
{
|
||||
if (!empty($row['series_volume']))
|
||||
$record .= ", ";
|
||||
|
||||
$record .= "no. " . $row['series_issue']; // TODO: not sure whether this is correct
|
||||
}
|
||||
|
||||
$record .= ".";
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($row['thesis'])) // thesis
|
||||
$record .= " " . $row['thesis'];
|
||||
|
||||
if (!empty($row['place']) || !empty($row['publisher']))
|
||||
{
|
||||
if (!empty($row['thesis']))
|
||||
$record .= ".";
|
||||
|
||||
if (!empty($row['place'])) // place (NOTE: should we omit the place of publication for theses?)
|
||||
$record .= " " . $row['place'];
|
||||
|
||||
if (!empty($row['publisher'])) // publisher
|
||||
{
|
||||
if (!empty($row['place']))
|
||||
$record .= ":";
|
||||
|
||||
$record .= " " . $row['publisher'];
|
||||
}
|
||||
}
|
||||
|
||||
if ($row['online_publication'] == "yes" || $row['type'] == "Software") // this record refers to an online article, or a computer program/software
|
||||
{
|
||||
if (!empty($row['online_citation'])) // online_citation
|
||||
{
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " " . $row['online_citation'];
|
||||
}
|
||||
|
||||
if (!empty($row['doi']) || !empty($row['url'])) // doi OR url
|
||||
{
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
$today = date("j F Y");
|
||||
|
||||
$record .= " Available at: " . $markupPatternsArray["underline-prefix"];
|
||||
|
||||
if (!empty($row['doi'])) // doi
|
||||
$uri = "http://dx.doi.org/" . $row['doi'];
|
||||
else // url
|
||||
$uri = $row['url'];
|
||||
|
||||
if ($encodeHTML)
|
||||
$record .= encodeHTML($uri);
|
||||
else
|
||||
$record .= $uri;
|
||||
|
||||
$record .= $markupPatternsArray["underline-suffix"];
|
||||
|
||||
$record .= " [accessed " . $today . "]";
|
||||
}
|
||||
}
|
||||
|
||||
if (!preg_match("/\. *$/", $record)) // if the string doesn't end with a period
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// --- BEGIN POST-PROCESSING -----------------------------------------------------------------------------------------------------------
|
||||
|
||||
// do some further cleanup:
|
||||
$record = trim($record); // remove any preceding or trailing whitespace
|
||||
|
||||
|
||||
return $record;
|
||||
}
|
||||
|
||||
// --- END CITATION STYLE ---
|
||||
?>
|
||||
657
cite/styles/cite_Harvard_2.php
Normal file
657
cite/styles/cite_Harvard_2.php
Normal file
@@ -0,0 +1,657 @@
|
||||
<?php
|
||||
// Project: Web Reference Database (refbase) <http://www.refbase.net>
|
||||
// Copyright: Matthias Steffens <mailto:refbase@extracts.de> and the file's
|
||||
// original author(s).
|
||||
//
|
||||
// This code is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY. Please see the GNU General Public
|
||||
// License for more details.
|
||||
//
|
||||
// File: ./cite/styles/cite_Harvard_2.php
|
||||
// Repository: $HeadURL$
|
||||
// Author(s): Matthias Steffens <mailto:refbase@extracts.de>
|
||||
//
|
||||
// Created: 12-Aug-08, 20:00
|
||||
// Modified: $Date: 2012-02-27 20:25:30 +0000 (Mon, 27 Feb 2012) $
|
||||
// $Author$
|
||||
// $Revision: 1337 $
|
||||
|
||||
// This is a citation style file (which must reside within the 'cite/styles/' sub-directory of your refbase root directory). It contains a
|
||||
// version of the 'citeRecord()' function that outputs a reference list from selected records according to the citation style used by
|
||||
// the Harvard referencing system
|
||||
|
||||
// This is a variant of the Harvard author/date style, modeled after this guide:
|
||||
// <http://skillsforlearning.leedsmet.ac.uk/harvard_2004.pdf>
|
||||
|
||||
// based on 'cite_Harvard_1.php'
|
||||
|
||||
// NOTES: - For conference proceedings, you'll currently need to add the place & date of the conference in the proceedings title field
|
||||
// (e.g. "Proceedings of the 67th IFLA Council and General Conference, August 16-25, 2001, Boston USA").
|
||||
|
||||
// TODO: - abstracts, conference proceedings, magazine articles, patents, reports & software?
|
||||
// - for references where there are more than four authors, we currently only use the first author followed by " et al"; is this correct?
|
||||
// - where to put (and how to format) series info & editors of whole books that also have an author?
|
||||
// - see also inline comments labeled with TODO (and NOTE)
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
// --- BEGIN CITATION STYLE ---
|
||||
|
||||
function citeRecord($row, $citeStyle, $citeType, $markupPatternsArray, $encodeHTML)
|
||||
{
|
||||
$record = ""; // make sure that our buffer variable is empty
|
||||
|
||||
// --- BEGIN TYPE = JOURNAL ARTICLE / MAGAZINE ARTICLE / NEWSPAPER ARTICLE --------------------------------------------------------------
|
||||
|
||||
if (preg_match("/^(Journal Article|Magazine Article|Newspaper Article)$/", $row['type']))
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($row['author'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
" " . $markupPatternsArray["ampersand"] . " ", // 5.
|
||||
"/ *, */", // 6.
|
||||
", ", // 7.
|
||||
", ", // 8.
|
||||
".", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"4", // 13.
|
||||
"1", // 14.
|
||||
" et al", // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
$record .= $author;
|
||||
}
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
$record .= " (" . $row['year'] . ")";
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
$record .= " " . $row['title'] . ".";
|
||||
|
||||
// From here on we'll assume that at least one of the fields 'author', 'year' or 'title' did contain some contents
|
||||
|
||||
if (!empty($row['publication'])) // publication (= journal) name
|
||||
$record .= " " . $markupPatternsArray["italic-prefix"] . $row['publication'] . $markupPatternsArray["italic-suffix"];
|
||||
|
||||
// if there's no full journal name, we'll use the abbreviated journal name instead:
|
||||
elseif (!empty($row['abbrev_journal'])) // abbreviated journal name
|
||||
$record .= " " . $markupPatternsArray["italic-prefix"] . $row['abbrev_journal'] . $markupPatternsArray["italic-suffix"];
|
||||
|
||||
if ($row['online_publication'] == "yes") // this record refers to an online publication
|
||||
$record .= " [Internet]";
|
||||
|
||||
if ((!empty($row['abbrev_journal']) || !empty($row['publication'])) && (!empty($row['volume']) || !empty($row['issue'])))
|
||||
$record .= ",";
|
||||
|
||||
if ($row['type'] == "Journal Article")
|
||||
{
|
||||
if (!empty($row['volume'])) // volume
|
||||
$record .= " " . $row['volume'];
|
||||
|
||||
if (!empty($row['issue'])) // issue
|
||||
{
|
||||
if (!empty($row['volume']))
|
||||
$record .= " ";
|
||||
|
||||
$record .= "(" . $row['issue'] . ")";
|
||||
}
|
||||
}
|
||||
|
||||
elseif (preg_match("/^(Newspaper Article|Magazine Article)$/", $row['type'])) // for newspaper and magazine articles, volume (=month) and issue (=day) information is printed without prefix
|
||||
{
|
||||
if (!empty($row['issue'])) // issue (=day)
|
||||
$record .= " " . $row['issue'];
|
||||
|
||||
if (!empty($row['volume'])) // volume (=month)
|
||||
$record .= " " . $row['volume'];
|
||||
}
|
||||
|
||||
if (!empty($row['pages'])) // pages
|
||||
{
|
||||
if (!empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])) // only add ", " if either volume, issue, abbrev_journal or publication isn't empty
|
||||
$record .= ", ";
|
||||
|
||||
$record .= formatPageInfo($row['pages'], $markupPatternsArray["endash"], "p.", "pp."); // function 'formatPageInfo()' is defined in 'cite.inc.php'
|
||||
}
|
||||
|
||||
if ($row['online_publication'] == "yes") // this record refers to an online article
|
||||
{
|
||||
// append an optional string (given in 'online_citation') plus the current date and the DOI (or URL):
|
||||
|
||||
if (!empty($row['online_citation'])) // online_citation
|
||||
{
|
||||
if (!empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])) // only add "," if either volume, issue, abbrev_journal or publication isn't empty
|
||||
$record .= ",";
|
||||
|
||||
$record .= " " . $row['online_citation'];
|
||||
}
|
||||
|
||||
if (!empty($row['doi']) || !empty($row['url'])) // doi OR url
|
||||
{
|
||||
if (!empty($row['online_citation']) OR (empty($row['online_citation']) AND (!empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])))) // only add "." if online_citation isn't empty, or else if either volume, issue, abbrev_journal or publication isn't empty
|
||||
$record .= ".";
|
||||
|
||||
$today = date("j F Y");
|
||||
|
||||
$record .= " Available from: ";
|
||||
|
||||
if (!empty($row['doi'])) // doi
|
||||
$uri = "http://dx.doi.org/" . $row['doi'];
|
||||
else // url
|
||||
$uri = $row['url'];
|
||||
|
||||
if ($encodeHTML)
|
||||
$record .= encodeHTML($markupPatternsArray["less-than"] . $uri . $markupPatternsArray["greater-than"]);
|
||||
else
|
||||
$record .= $markupPatternsArray["less-than"] . $uri . $markupPatternsArray["greater-than"];
|
||||
|
||||
$record .= " [Accessed " . $today . "]";
|
||||
}
|
||||
}
|
||||
|
||||
if (!preg_match("/\. *$/", $record)) // if the string doesn't end with a period
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// --- BEGIN TYPE = ABSTRACT / BOOK CHAPTER / CONFERENCE ARTICLE ------------------------------------------------------------------------
|
||||
|
||||
elseif (preg_match("/^(Abstract|Book Chapter|Conference Article)$/", $row['type']))
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($row['author'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
" " . $markupPatternsArray["ampersand"] . " ", // 5.
|
||||
"/ *, */", // 6.
|
||||
", ", // 7.
|
||||
", ", // 8.
|
||||
".", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"4", // 13.
|
||||
"1", // 14.
|
||||
" et al", // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
$record .= $author;
|
||||
}
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
$record .= " (" . $row['year'] . ")";
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
$record .= " " . $row['title'] . ".";
|
||||
|
||||
// From here on we'll assume that at least one of the fields 'author', 'year' or 'title' did contain some contents
|
||||
// if this is not the case, the output string will begin with a space. However, any preceding/trailing whitespace will be removed at the cleanup stage (see below)
|
||||
|
||||
if (!empty($row['editor'])) // editor
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$editor = reArrangeAuthorContents($row['editor'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
" " . $markupPatternsArray["ampersand"] . " ", // 5.
|
||||
"/ *, */", // 6.
|
||||
", ", // 7.
|
||||
", ", // 8.
|
||||
".", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"4", // 13.
|
||||
"1", // 14.
|
||||
" et al", // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
$record .= " In: " . $editor . " ";
|
||||
if (preg_match("/^[^;\r\n]+(;[^;\r\n]+)+$/", $row['editor'])) // there are at least two editors (separated by ';')
|
||||
$record .= "eds.";
|
||||
else // there's only one editor (or the editor field is malformed with multiple editors but missing ';' separator[s])
|
||||
$record .= "ed.";
|
||||
}
|
||||
|
||||
$publication = preg_replace("/[ \r\n]*\(Eds?:[^\)\r\n]*\)/i", "", $row['publication']);
|
||||
if (!empty($publication)) // publication
|
||||
{
|
||||
if (empty($row['editor']))
|
||||
$record .= " In:";
|
||||
|
||||
$record .= " " . $markupPatternsArray["italic-prefix"] . $publication . $markupPatternsArray["italic-suffix"];
|
||||
}
|
||||
|
||||
if (!empty($row['edition']) && !preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition']) || !empty($row['volume']))
|
||||
{
|
||||
$record .= ". ";
|
||||
|
||||
if (!empty($row['edition']) && !preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition'])) // edition
|
||||
{
|
||||
if (preg_match("/^\d{1,3}$/", $row['edition'])) // if the edition field contains a number of up to three digits, we assume it's an edition number (such as "2nd ed.")
|
||||
{
|
||||
if ($row['edition'] == "2")
|
||||
$editionSuffix = "nd";
|
||||
elseif ($row['edition'] == "3")
|
||||
$editionSuffix = "rd";
|
||||
else
|
||||
$editionSuffix = "th";
|
||||
}
|
||||
else
|
||||
$editionSuffix = "";
|
||||
|
||||
if (!empty($row['edition']) && !preg_match("/( ed\.?| edition)$/i", $row['edition']))
|
||||
$editionSuffix .= " ed.";
|
||||
|
||||
$record .= $row['edition'] . $editionSuffix;
|
||||
}
|
||||
|
||||
if (!empty($row['volume'])) // volume
|
||||
{
|
||||
if (!empty($row['edition']) && !preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition']))
|
||||
$record .= ", ";
|
||||
|
||||
$record .= "vol. " . $row['volume']; // TODO: not sure whether this is correct (should this be printed before the edition number?)
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($row['abbrev_series_title']) OR !empty($row['series_title'])) // if there's either a full or an abbreviated series title
|
||||
{
|
||||
$record .= ". ";
|
||||
|
||||
if (!empty($row['series_title']))
|
||||
$record .= $row['series_title']; // full series title
|
||||
|
||||
// if there's no full series title, we'll use the abbreviated series title instead:
|
||||
elseif (!empty($row['abbrev_series_title']))
|
||||
$record .= $row['abbrev_series_title']; // abbreviated series title
|
||||
|
||||
if (!empty($row['series_volume'])||!empty($row['series_issue']))
|
||||
$record .= ", ";
|
||||
|
||||
if (!empty($row['series_volume'])) // series volume (I'm not really sure if -- for this cite style -- the series volume & issue should be rather omitted here)
|
||||
$record .= "vol. " . $row['series_volume']; // TODO: not sure whether this is correct
|
||||
|
||||
if (!empty($row['series_issue'])) // series issue (see note for series volume)
|
||||
{
|
||||
if (!empty($row['series_volume']))
|
||||
$record .= ", ";
|
||||
|
||||
$record .= "no. " . $row['series_issue']; // TODO: not sure whether this is correct
|
||||
}
|
||||
}
|
||||
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
if (!empty($row['place'])) // place
|
||||
$record .= " " . $row['place'];
|
||||
|
||||
if (!empty($row['publisher'])) // publisher
|
||||
{
|
||||
if (!empty($row['place']))
|
||||
$record .= ",";
|
||||
|
||||
$record .= " " . $row['publisher'];
|
||||
}
|
||||
|
||||
if (!empty($row['pages'])) // pages
|
||||
{
|
||||
if (!empty($row['publisher']) || !empty($row['place']))
|
||||
$record .= ", ";
|
||||
|
||||
$record .= formatPageInfo($row['pages'], $markupPatternsArray["endash"], "p.", "pp."); // function 'formatPageInfo()' is defined in 'cite.inc.php'
|
||||
}
|
||||
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// --- BEGIN TYPE = BOOK WHOLE / CONFERENCE VOLUME / JOURNAL / MANUAL / MANUSCRIPT / MAP / MISCELLANEOUS / PATENT / REPORT / SOFTWARE ---
|
||||
|
||||
else // if (preg_match("/Book Whole|Conference Volume|Journal|Manual|Manuscript|Map|Miscellaneous|Patent|Report|Software/", $row['type']))
|
||||
// note that this also serves as a fallback: unrecognized resource types will be formatted similar to whole books
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
$author = preg_replace("/[ \r\n]*\(eds?\)/i", "", $row['author']);
|
||||
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($author, // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
" " . $markupPatternsArray["ampersand"] . " ", // 5.
|
||||
"/ *, */", // 6.
|
||||
", ", // 7.
|
||||
", ", // 8.
|
||||
".", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"4", // 13.
|
||||
"1", // 14.
|
||||
" et al", // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
// if the author is actually the editor of the resource we'll append ', ed' (or ', eds') to the author string:
|
||||
// [to distinguish editors from authors in the 'author' field, the 'modify.php' script does append ' (ed)' or ' (eds)' if appropriate,
|
||||
// so we're just checking for these identifier strings here. Alternatively, we could check whether the editor field matches the author field]
|
||||
if (preg_match("/[ \r\n]*\(ed\)/", $row['author'])) // single editor
|
||||
$author = $author . " ed.";
|
||||
elseif (preg_match("/[ \r\n]*\(eds\)/", $row['author'])) // multiple editors
|
||||
$author = $author . " eds.";
|
||||
|
||||
$record .= $author;
|
||||
}
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
$record .= " (" . $row['year'] . ")";
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
$record .= " " . $markupPatternsArray["italic-prefix"] . $row['title'] . $markupPatternsArray["italic-suffix"];
|
||||
|
||||
if ($row['online_publication'] == "yes") // this record refers to an online publication
|
||||
$record .= " [Internet]";
|
||||
|
||||
if (!empty($row['editor']) && !preg_match("/[ \r\n]*\(eds?\)/", $row['author'])) // editor (if different from author, see note above regarding the check for ' (ed)' or ' (eds)')
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$editor = reArrangeAuthorContents($row['editor'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
" " . $markupPatternsArray["ampersand"] . " ", // 5.
|
||||
"/ *, */", // 6.
|
||||
", ", // 7.
|
||||
", ", // 8.
|
||||
".", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"4", // 13.
|
||||
"1", // 14.
|
||||
" et al", // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
if (!empty($row['author']) || !empty($row['year']) || !empty($row['title']))
|
||||
$record .= " ";
|
||||
|
||||
$record .= " (" . $editor . " ";
|
||||
if (preg_match("/^[^;\r\n]+(;[^;\r\n]+)+$/", $row['editor'])) // there are at least two editors (separated by ';')
|
||||
$record .= "eds.";
|
||||
else // there's only one editor (or the editor field is malformed with multiple editors but missing ';' separator[s])
|
||||
$record .= "ed.";
|
||||
$record .= ")";
|
||||
}
|
||||
|
||||
if (!empty($row['edition']) || !empty($row['volume']))
|
||||
{
|
||||
if (!empty($row['author']) || !empty($row['year']) || !empty($row['title']) || (!empty($row['editor']) && !preg_match("/[ \r\n]*\(eds?\)/", $row['author'])))
|
||||
$record .= ". ";
|
||||
|
||||
if ($row['type'] == "Software") // software edition (=version)
|
||||
{
|
||||
if (!empty($row['edition']))
|
||||
{
|
||||
$record .= "Version " . $row['edition'];
|
||||
|
||||
if (!empty($row['volume']) || !empty($row['issue']))
|
||||
$record .= ", ";
|
||||
}
|
||||
|
||||
if (!empty($row['issue'])) // issue (=day)
|
||||
$record .= " " . $row['issue'];
|
||||
|
||||
if (!empty($row['volume'])) // volume (=month)
|
||||
$record .= " " . $row['volume'];
|
||||
}
|
||||
elseif (!preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition'])) // regular edition (other than the first)
|
||||
{
|
||||
if (preg_match("/^\d{1,3}$/", $row['edition'])) // if the edition field contains a number of up to three digits, we assume it's an edition number (such as "2nd ed.")
|
||||
{
|
||||
if ($row['edition'] == "2")
|
||||
$editionSuffix = "nd";
|
||||
elseif ($row['edition'] == "3")
|
||||
$editionSuffix = "rd";
|
||||
else
|
||||
$editionSuffix = "th";
|
||||
}
|
||||
else
|
||||
$editionSuffix = "";
|
||||
|
||||
if (!empty($row['edition']) && !preg_match("/( ed\.?| edition)$/i", $row['edition']))
|
||||
$editionSuffix .= " ed.";
|
||||
|
||||
$record .= $row['edition'] . $editionSuffix;
|
||||
|
||||
if (!empty($row['volume'])) // volume
|
||||
{
|
||||
if (!empty($row['edition']) && !preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition']))
|
||||
$record .= ", ";
|
||||
|
||||
$record .= "vol. " . $row['volume']; // TODO: not sure whether this is correct (should this be printed before the edition number?)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($row['type'] == "Software") // for software, add software label
|
||||
{
|
||||
$record .= ", computer software.";
|
||||
}
|
||||
else // add series info
|
||||
{
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
if (!empty($row['abbrev_series_title']) OR !empty($row['series_title'])) // if there's either a full or an abbreviated series title
|
||||
{
|
||||
$record .= " ";
|
||||
|
||||
if (!empty($row['series_title']))
|
||||
$record .= $row['series_title']; // full series title
|
||||
|
||||
// if there's no full series title, we'll use the abbreviated series title instead:
|
||||
elseif (!empty($row['abbrev_series_title']))
|
||||
$record .= $row['abbrev_series_title']; // abbreviated series title
|
||||
|
||||
if (!empty($row['series_volume'])||!empty($row['series_issue']))
|
||||
$record .= ", ";
|
||||
|
||||
if (!empty($row['series_volume'])) // series volume (I'm not really sure if -- for this cite style -- the series volume & issue should be rather omitted here)
|
||||
$record .= "vol. " . $row['series_volume']; // TODO: not sure whether this is correct
|
||||
|
||||
if (!empty($row['series_issue'])) // series issue (see note for series volume)
|
||||
{
|
||||
if (!empty($row['series_volume']))
|
||||
$record .= ", ";
|
||||
|
||||
$record .= "no. " . $row['series_issue']; // TODO: not sure whether this is correct
|
||||
}
|
||||
|
||||
$record .= ".";
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($row['thesis'])) // thesis
|
||||
$record .= " " . $row['thesis'];
|
||||
|
||||
if (!empty($row['place']) || !empty($row['publisher']))
|
||||
{
|
||||
if (!empty($row['thesis']))
|
||||
$record .= ",";
|
||||
|
||||
if (!empty($row['place'])) // place (NOTE: should we omit the place of publication for theses?)
|
||||
$record .= " " . $row['place'];
|
||||
|
||||
if (!empty($row['publisher'])) // publisher
|
||||
{
|
||||
if (!empty($row['place']))
|
||||
$record .= ",";
|
||||
|
||||
$record .= " " . $row['publisher'];
|
||||
}
|
||||
}
|
||||
|
||||
if ($row['online_publication'] == "yes" || $row['type'] == "Software") // this record refers to an online article, or a computer program/software
|
||||
{
|
||||
if (!empty($row['online_citation'])) // online_citation
|
||||
{
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " " . $row['online_citation'];
|
||||
}
|
||||
|
||||
if (!empty($row['doi']) || !empty($row['url'])) // doi OR url
|
||||
{
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
$today = date("j F Y");
|
||||
|
||||
$record .= " Available from: ";
|
||||
|
||||
if (!empty($row['doi'])) // doi
|
||||
$uri = "http://dx.doi.org/" . $row['doi'];
|
||||
else // url
|
||||
$uri = $row['url'];
|
||||
|
||||
if ($encodeHTML)
|
||||
$record .= encodeHTML($markupPatternsArray["less-than"] . $uri . $markupPatternsArray["greater-than"]);
|
||||
else
|
||||
$record .= $markupPatternsArray["less-than"] . $uri . $markupPatternsArray["greater-than"];
|
||||
|
||||
$record .= " [Accessed " . $today . "]";
|
||||
}
|
||||
}
|
||||
|
||||
if (!preg_match("/\. *$/", $record)) // if the string doesn't end with a period
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// --- BEGIN POST-PROCESSING -----------------------------------------------------------------------------------------------------------
|
||||
|
||||
// do some further cleanup:
|
||||
$record = trim($record); // remove any preceding or trailing whitespace
|
||||
|
||||
|
||||
return $record;
|
||||
}
|
||||
|
||||
// --- END CITATION STYLE ---
|
||||
?>
|
||||
684
cite/styles/cite_Harvard_3.php
Normal file
684
cite/styles/cite_Harvard_3.php
Normal file
@@ -0,0 +1,684 @@
|
||||
<?php
|
||||
// Project: Web Reference Database (refbase) <http://www.refbase.net>
|
||||
// Copyright: Matthias Steffens <mailto:refbase@extracts.de> and the file's
|
||||
// original author(s).
|
||||
//
|
||||
// This code is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY. Please see the GNU General Public
|
||||
// License for more details.
|
||||
//
|
||||
// File: ./cite/styles/cite_Harvard_3.php
|
||||
// Repository: $HeadURL$
|
||||
// Author(s): Matthias Steffens <mailto:refbase@extracts.de>
|
||||
//
|
||||
// Created: 01-Aug-08, 02:00
|
||||
// Modified: $Date: 2012-02-27 20:25:30 +0000 (Mon, 27 Feb 2012) $
|
||||
// $Author$
|
||||
// $Revision: 1337 $
|
||||
|
||||
// This is a citation style file (which must reside within the 'cite/styles/' sub-directory of your refbase root directory). It contains a
|
||||
// version of the 'citeRecord()' function that outputs a reference list from selected records according to the citation style used by
|
||||
// the Harvard referencing system
|
||||
|
||||
// This is a variant of the Harvard author/date style, modeled after these resources:
|
||||
// <http://library.curtin.edu.au/referencing/harvard.html> (not available anymore?)
|
||||
// <http://www.usq.edu.au/library/help/ehelp/ref_guides/harvard.htm>
|
||||
// <http://www.library.uwa.edu.au/education_training_and_support/guides/harvard_citation_style>
|
||||
// <http://www.lib.unimelb.edu.au/cite/harvard_dis/>
|
||||
|
||||
// based on 'cite_APA.php'
|
||||
|
||||
// TODO: - patents & reports?
|
||||
// - should we shorten ending page numbers if necessary (e.g. "pp. 10-8" or "pp. 51-5", but "pp. 19-26"), or only if numbers are >=3 digits?
|
||||
// - where to put (and how to format) series info & editors of whole books that also have an author?
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
// --- BEGIN CITATION STYLE ---
|
||||
|
||||
function citeRecord($row, $citeStyle, $citeType, $markupPatternsArray, $encodeHTML)
|
||||
{
|
||||
$record = ""; // make sure that our buffer variable is empty
|
||||
|
||||
// --- BEGIN TYPE = JOURNAL ARTICLE / MAGAZINE ARTICLE / NEWSPAPER ARTICLE --------------------------------------------------------------
|
||||
|
||||
if (preg_match("/^(Journal Article|Magazine Article|Newspaper Article)$/", $row['type']))
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($row['author'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
" " . $markupPatternsArray["ampersand"] . " ", // 5.
|
||||
"/ *, */", // 6.
|
||||
", ", // 7.
|
||||
", ", // 8.
|
||||
"", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"", // 13.
|
||||
"", // 14.
|
||||
" et al", // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
$record .= $author;
|
||||
}
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
{
|
||||
if (!empty($row['author']))
|
||||
$record .= " ";
|
||||
|
||||
if (!empty($row['year']))
|
||||
$record .= $row['year'];
|
||||
}
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
if (!empty($row['author']) || !empty($row['year']))
|
||||
$record .= ", ";
|
||||
|
||||
$record .= $markupPatternsArray["single-quote-left"] . $row['title'] . $markupPatternsArray["single-quote-right"];
|
||||
$record .= ",";
|
||||
}
|
||||
|
||||
// From here on we'll assume that at least one of the fields 'author', 'year' or 'title' did contain some contents
|
||||
|
||||
if (!empty($row['publication'])) // publication (= journal) name
|
||||
$record .= " " . $markupPatternsArray["italic-prefix"] . $row['publication'] . $markupPatternsArray["italic-suffix"];
|
||||
|
||||
// if there's no full journal name, we'll use the abbreviated journal name instead:
|
||||
elseif (!empty($row['abbrev_journal'])) // abbreviated journal name
|
||||
$record .= " " . $markupPatternsArray["italic-prefix"] . $row['abbrev_journal'] . $markupPatternsArray["italic-suffix"];
|
||||
|
||||
if ((!empty($row['abbrev_journal']) || !empty($row['publication'])) && (!empty($row['volume']) || !empty($row['issue'])))
|
||||
$record .= ",";
|
||||
|
||||
if ($row['type'] == "Journal Article") // for journal articles, volume (or issue) information is printed with a "vol." (or "no.") prefix
|
||||
{
|
||||
if (!empty($row['volume'])) // volume
|
||||
$record .= " vol. " . $row['volume'];
|
||||
|
||||
if (!empty($row['issue'])) // issue
|
||||
{
|
||||
if (!empty($row['volume']))
|
||||
$record .= ",";
|
||||
|
||||
$record .= " no. " . $row['issue'];
|
||||
}
|
||||
}
|
||||
|
||||
elseif (preg_match("/^(Newspaper Article|Magazine Article)$/", $row['type'])) // for newspaper and magazine articles, volume (=month) and issue (=day) information is printed without prefix
|
||||
{
|
||||
if (!empty($row['issue'])) // issue (=day)
|
||||
$record .= " " . $row['issue'];
|
||||
|
||||
if (!empty($row['volume'])) // volume (=month)
|
||||
$record .= " " . $row['volume'];
|
||||
}
|
||||
|
||||
if (!empty($row['pages'])) // pages
|
||||
{
|
||||
if (!empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])) // only add ", " if either volume, issue, abbrev_journal or publication isn't empty
|
||||
$record .= ", ";
|
||||
|
||||
$record .= formatPageInfo($row['pages'], $markupPatternsArray["endash"], "p. ", "pp. "); // function 'formatPageInfo()' is defined in 'cite.inc.php'
|
||||
}
|
||||
|
||||
if ($row['online_publication'] == "yes") // this record refers to an online article
|
||||
{
|
||||
// append an optional string (given in 'online_citation') plus the current date and the DOI (or URL):
|
||||
|
||||
if (!empty($row['online_citation'])) // online_citation
|
||||
{
|
||||
if (!empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])) // only add "," if either volume, issue, abbrev_journal or publication isn't empty
|
||||
$record .= ",";
|
||||
|
||||
$record .= " " . $row['online_citation'];
|
||||
}
|
||||
|
||||
if (!empty($row['doi']) || !empty($row['url'])) // doi OR url
|
||||
{
|
||||
if (!empty($row['online_citation']) OR (empty($row['online_citation']) AND (!empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])))) // only add "." if online_citation isn't empty, or else if either volume, issue, abbrev_journal or publication isn't empty
|
||||
$record .= ".";
|
||||
|
||||
$today = date("j F Y");
|
||||
|
||||
$record .= " Available from: "; // NOTE: some of the above mentioned resources use ", accessed 26 February 2004, from <http://...>." (or ", viewed on ...") instead
|
||||
|
||||
if (!empty($row['doi'])) // doi
|
||||
$uri = "http://dx.doi.org/" . $row['doi'];
|
||||
else // url
|
||||
$uri = $row['url'];
|
||||
|
||||
if ($encodeHTML)
|
||||
$record .= encodeHTML($markupPatternsArray["less-than"] . $uri . $markupPatternsArray["greater-than"]);
|
||||
else
|
||||
$record .= $markupPatternsArray["less-than"] . $uri . $markupPatternsArray["greater-than"];
|
||||
|
||||
$record .= " [" . $today . "]";
|
||||
}
|
||||
}
|
||||
|
||||
if (!preg_match("/\. *$/", $record)) // if the string doesn't end with a period
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// --- BEGIN TYPE = ABSTRACT / BOOK CHAPTER / CONFERENCE ARTICLE ------------------------------------------------------------------------
|
||||
|
||||
elseif (preg_match("/^(Abstract|Book Chapter|Conference Article)$/", $row['type']))
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($row['author'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
" " . $markupPatternsArray["ampersand"] . " ", // 5.
|
||||
"/ *, */", // 6.
|
||||
", ", // 7.
|
||||
", ", // 8.
|
||||
"", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"", // 13.
|
||||
"", // 14.
|
||||
" et al", // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
$record .= $author;
|
||||
}
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
{
|
||||
if (!empty($row['author']))
|
||||
$record .= " ";
|
||||
|
||||
$record .= $row['year'];
|
||||
}
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
if (!empty($row['author']) || !empty($row['year']))
|
||||
$record .= ", ";
|
||||
|
||||
$record .= $markupPatternsArray["single-quote-left"] . $row['title'] . $markupPatternsArray["single-quote-right"];
|
||||
$record .= ",";
|
||||
}
|
||||
|
||||
// From here on we'll assume that at least one of the fields 'author', 'year' or 'title' did contain some contents
|
||||
// if this is not the case, the output string will begin with a space. However, any preceding/trailing whitespace will be removed at the cleanup stage (see below)
|
||||
|
||||
if (!empty($row['editor'])) // editor
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$editor = reArrangeAuthorContents($row['editor'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
" " . $markupPatternsArray["ampersand"] . " ", // 5.
|
||||
"/ *, */", // 6.
|
||||
" ", // 7.
|
||||
" ", // 8.
|
||||
"", // 9.
|
||||
true, // 10.
|
||||
true, // 11.
|
||||
true, // 12.
|
||||
"", // 13.
|
||||
"", // 14.
|
||||
" et al", // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
$record .= " in " . $editor . " (";
|
||||
if (preg_match("/^[^;\r\n]+(;[^;\r\n]+)+$/", $row['editor'])) // there are at least two editors (separated by ';')
|
||||
$record .= "eds.";
|
||||
else // there's only one editor (or the editor field is malformed with multiple editors but missing ';' separator[s])
|
||||
$record .= "ed.";
|
||||
$record .= "),";
|
||||
}
|
||||
|
||||
$publication = preg_replace("/[ \r\n]*\(Eds?:[^\)\r\n]*\)/i", "", $row['publication']);
|
||||
if (!empty($publication)) // publication
|
||||
{
|
||||
if (empty($row['editor']))
|
||||
$record .= " in";
|
||||
|
||||
$record .= " " . $markupPatternsArray["italic-prefix"] . $publication . $markupPatternsArray["italic-suffix"];
|
||||
}
|
||||
|
||||
if (!empty($row['edition']) && !preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition']) || !empty($row['volume']))
|
||||
{
|
||||
$record .= ", ";
|
||||
|
||||
if (!empty($row['edition']) && !preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition'])) // edition
|
||||
{
|
||||
if (preg_match("/^\d{1,3}$/", $row['edition'])) // if the edition field contains a number of up to three digits, we assume it's an edition number (such as "2nd edn")
|
||||
{
|
||||
if ($row['edition'] == "2")
|
||||
$editionSuffix = "nd";
|
||||
elseif ($row['edition'] == "3")
|
||||
$editionSuffix = "rd";
|
||||
else
|
||||
$editionSuffix = "th";
|
||||
}
|
||||
else
|
||||
$editionSuffix = "";
|
||||
|
||||
if (!empty($row['edition']) && !preg_match("/( ed\.?| edition)$/i", $row['edition']))
|
||||
$editionSuffix .= " edn";
|
||||
|
||||
$record .= $row['edition'] . $editionSuffix;
|
||||
}
|
||||
|
||||
if (!empty($row['volume'])) // volume
|
||||
{
|
||||
if (!empty($row['edition']) && !preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition']))
|
||||
$record .= ", ";
|
||||
|
||||
$record .= "vol. " . $row['volume'];
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($row['abbrev_series_title']) OR !empty($row['series_title'])) // if there's either a full or an abbreviated series title
|
||||
{
|
||||
$record .= ", ";
|
||||
|
||||
if (!empty($row['series_title']))
|
||||
$record .= $row['series_title']; // full series title
|
||||
|
||||
// if there's no full series title, we'll use the abbreviated series title instead:
|
||||
elseif (!empty($row['abbrev_series_title']))
|
||||
$record .= $row['abbrev_series_title']; // abbreviated series title
|
||||
|
||||
if (!empty($row['series_volume'])||!empty($row['series_issue']))
|
||||
$record .= ", ";
|
||||
|
||||
if (!empty($row['series_volume'])) // series volume (I'm not really sure if -- for this cite style -- the series volume & issue should be rather omitted here)
|
||||
$record .= "vol. " . $row['series_volume'];
|
||||
|
||||
if (!empty($row['series_issue'])) // series issue (see note for series volume)
|
||||
{
|
||||
if (!empty($row['series_volume']))
|
||||
$record .= ", ";
|
||||
|
||||
$record .= "no. " . $row['series_issue'];
|
||||
}
|
||||
}
|
||||
|
||||
$record .= ",";
|
||||
|
||||
if (!empty($row['publisher'])) // publisher
|
||||
$record .= " " . $row['publisher'];
|
||||
|
||||
if (!empty($row['place'])) // place
|
||||
{
|
||||
if (!empty($row['publisher']))
|
||||
$record .= ",";
|
||||
|
||||
$record .= " " . $row['place'];
|
||||
}
|
||||
|
||||
if (!empty($row['pages'])) // pages
|
||||
{
|
||||
if (!empty($row['publisher']) || !empty($row['place']))
|
||||
$record .= ", ";
|
||||
|
||||
$record .= formatPageInfo($row['pages'], $markupPatternsArray["endash"], "p. ", "pp. "); // function 'formatPageInfo()' is defined in 'cite.inc.php'
|
||||
}
|
||||
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// --- BEGIN TYPE = BOOK WHOLE / CONFERENCE VOLUME / JOURNAL / MANUAL / MANUSCRIPT / MAP / MISCELLANEOUS / PATENT / REPORT / SOFTWARE ---
|
||||
|
||||
else // if (preg_match("/Book Whole|Conference Volume|Journal|Manual|Manuscript|Map|Miscellaneous|Patent|Report|Software/", $row['type']))
|
||||
// note that this also serves as a fallback: unrecognized resource types will be formatted similar to whole books
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
$author = preg_replace("/[ \r\n]*\(eds?\)/i", "", $row['author']);
|
||||
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($author, // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
" " . $markupPatternsArray["ampersand"] . " ", // 5.
|
||||
"/ *, */", // 6.
|
||||
", ", // 7.
|
||||
", ", // 8.
|
||||
"", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"", // 13.
|
||||
"", // 14.
|
||||
" et al", // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
// if the author is actually the editor of the resource we'll append ', ed' (or ', eds') to the author string:
|
||||
// [to distinguish editors from authors in the 'author' field, the 'modify.php' script does append ' (ed)' or ' (eds)' if appropriate,
|
||||
// so we're just checking for these identifier strings here. Alternatively, we could check whether the editor field matches the author field]
|
||||
if (preg_match("/[ \r\n]*\(ed\)/", $row['author'])) // single editor
|
||||
$author = $author . " (ed.)";
|
||||
elseif (preg_match("/[ \r\n]*\(eds\)/", $row['author'])) // multiple editors
|
||||
$author = $author . " (eds.)";
|
||||
|
||||
$record .= $author;
|
||||
}
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
{
|
||||
if (!empty($row['author']))
|
||||
$record .= " ";
|
||||
|
||||
$record .= $row['year'];
|
||||
}
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
if (!empty($row['author']) || !empty($row['year']))
|
||||
$record .= ", ";
|
||||
|
||||
if (!empty($row['thesis'])) // for theses, the title is printed in roman type and in quotation marks
|
||||
$record .= $markupPatternsArray["single-quote-left"] . $row['title'] . $markupPatternsArray["single-quote-right"];
|
||||
else // otherwise, the title is printed in italics
|
||||
$record .= $markupPatternsArray["italic-prefix"] . $row['title'] . $markupPatternsArray["italic-suffix"];
|
||||
}
|
||||
|
||||
if (!empty($row['editor']) && !preg_match("/[ \r\n]*\(eds?\)/", $row['author'])) // editor (if different from author, see note above regarding the check for ' (ed)' or ' (eds)')
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$editor = reArrangeAuthorContents($row['editor'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
" " . $markupPatternsArray["ampersand"] . " ", // 5.
|
||||
"/ *, */", // 6.
|
||||
" ", // 7.
|
||||
" ", // 8.
|
||||
"", // 9.
|
||||
true, // 10.
|
||||
true, // 11.
|
||||
true, // 12.
|
||||
"", // 13.
|
||||
"", // 14.
|
||||
" et al", // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
if (!empty($row['author']) || !empty($row['year']) || !empty($row['title']))
|
||||
$record .= " ";
|
||||
|
||||
$record .= " (" . $editor . ", ";
|
||||
if (preg_match("/^[^;\r\n]+(;[^;\r\n]+)+$/", $row['editor'])) // there are at least two editors (separated by ';')
|
||||
$record .= "eds.";
|
||||
else // there's only one editor (or the editor field is malformed with multiple editors but missing ';' separator[s])
|
||||
$record .= "ed.";
|
||||
$record .= ")";
|
||||
}
|
||||
|
||||
if (!empty($row['edition']) || !empty($row['volume']))
|
||||
{
|
||||
if (!empty($row['author']) || !empty($row['year']) || !empty($row['title']) || (!empty($row['editor']) && !preg_match("/[ \r\n]*\(eds?\)/", $row['author'])))
|
||||
$record .= ", ";
|
||||
|
||||
if ($row['type'] == "Software") // software edition (=version)
|
||||
{
|
||||
if (!empty($row['edition']))
|
||||
{
|
||||
$record .= "version " . $row['edition'];
|
||||
|
||||
if (!empty($row['volume']) || !empty($row['issue']))
|
||||
$record .= ", ";
|
||||
}
|
||||
|
||||
if (!empty($row['issue'])) // issue (=day)
|
||||
$record .= " " . $row['issue'];
|
||||
|
||||
if (!empty($row['volume'])) // volume (=month)
|
||||
$record .= " " . $row['volume'];
|
||||
}
|
||||
elseif (!preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition'])) // regular edition (other than the first)
|
||||
{
|
||||
if (preg_match("/^\d{1,3}$/", $row['edition'])) // if the edition field contains a number of up to three digits, we assume it's an edition number (such as "2nd edn")
|
||||
{
|
||||
if ($row['edition'] == "2")
|
||||
$editionSuffix = "nd";
|
||||
elseif ($row['edition'] == "3")
|
||||
$editionSuffix = "rd";
|
||||
else
|
||||
$editionSuffix = "th";
|
||||
}
|
||||
else
|
||||
$editionSuffix = "";
|
||||
|
||||
if (!empty($row['edition']) && !preg_match("/( ed\.?| edition)$/i", $row['edition']))
|
||||
$editionSuffix .= " edn";
|
||||
|
||||
$record .= $row['edition'] . $editionSuffix;
|
||||
|
||||
if (!empty($row['volume'])) // volume
|
||||
{
|
||||
if (!empty($row['edition']) && !preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition']))
|
||||
$record .= ", ";
|
||||
|
||||
$record .= "vol. " . $row['volume'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($row['type'] == "Software") // for software, add software label
|
||||
{
|
||||
$record .= ", computer software";
|
||||
}
|
||||
else // add series info
|
||||
{
|
||||
if (!empty($row['abbrev_series_title']) OR !empty($row['series_title'])) // if there's either a full or an abbreviated series title
|
||||
{
|
||||
if ((!empty($row['title']) && !preg_match("/[?!.]$/", $row['title'])) || (!empty($row['editor']) && !preg_match("/[ \r\n]*\(eds?\)/", $row['author'])) || !empty($row['edition']) || !empty($row['volume']))
|
||||
$record .= ",";
|
||||
|
||||
$record .= " ";
|
||||
|
||||
if (!empty($row['series_title']))
|
||||
$record .= $row['series_title']; // full series title
|
||||
|
||||
// if there's no full series title, we'll use the abbreviated series title instead:
|
||||
elseif (!empty($row['abbrev_series_title']))
|
||||
$record .= $row['abbrev_series_title']; // abbreviated series title
|
||||
|
||||
if (!empty($row['series_volume'])||!empty($row['series_issue']))
|
||||
$record .= ", ";
|
||||
|
||||
if (!empty($row['series_volume'])) // series volume (I'm not really sure if -- for this cite style -- the series volume & issue should be rather omitted here)
|
||||
$record .= "vol. " . $row['series_volume'];
|
||||
|
||||
if (!empty($row['series_issue'])) // series issue (see note for series volume)
|
||||
{
|
||||
if (!empty($row['series_volume']))
|
||||
$record .= ", ";
|
||||
|
||||
$record .= "no. " . $row['series_issue'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($row['thesis'])) // thesis
|
||||
{
|
||||
$record .= ", " . $row['thesis'];
|
||||
$record .= ", " . $row['publisher'];
|
||||
$record .= ", " . $row['place']; // NOTE: should we omit the place of publication for theses?
|
||||
}
|
||||
else // not a thesis
|
||||
{
|
||||
if (!empty($row['publisher'])) // publisher
|
||||
$record .= ", " . $row['publisher'];
|
||||
|
||||
if (!empty($row['place'])) // place
|
||||
{
|
||||
if (!empty($row['publisher']))
|
||||
$record .= ",";
|
||||
|
||||
$record .= " " . $row['place'];
|
||||
}
|
||||
}
|
||||
|
||||
if ($row['online_publication'] == "yes" || $row['type'] == "Software") // this record refers to an online article, or a computer program/software
|
||||
{
|
||||
if (!empty($row['online_citation'])) // online_citation
|
||||
{
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " " . $row['online_citation'];
|
||||
}
|
||||
|
||||
if (!empty($row['doi']) || !empty($row['url'])) // doi OR url
|
||||
{
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
$today = date("j F Y");
|
||||
|
||||
$record .= " Available from: "; // NOTE: some of the above mentioned resources use ", accessed 26 February 2004, from <http://...>." (or ", viewed on ...") instead
|
||||
|
||||
if (!empty($row['doi'])) // doi
|
||||
$uri = "http://dx.doi.org/" . $row['doi'];
|
||||
else // url
|
||||
$uri = $row['url'];
|
||||
|
||||
if ($encodeHTML)
|
||||
$record .= encodeHTML($markupPatternsArray["less-than"] . $uri . $markupPatternsArray["greater-than"]);
|
||||
else
|
||||
$record .= $markupPatternsArray["less-than"] . $uri . $markupPatternsArray["greater-than"];
|
||||
|
||||
$record .= " [" . $today . "]";
|
||||
}
|
||||
}
|
||||
|
||||
if (!preg_match("/\. *$/", $record)) // if the string doesn't end with a period
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// --- BEGIN POST-PROCESSING -----------------------------------------------------------------------------------------------------------
|
||||
|
||||
// do some further cleanup:
|
||||
$record = trim($record); // remove any preceding or trailing whitespace
|
||||
|
||||
|
||||
return $record;
|
||||
}
|
||||
|
||||
// --- END CITATION STYLE ---
|
||||
?>
|
||||
660
cite/styles/cite_MLA.php
Normal file
660
cite/styles/cite_MLA.php
Normal file
@@ -0,0 +1,660 @@
|
||||
<?php
|
||||
// Project: Web Reference Database (refbase) <http://www.refbase.net>
|
||||
// Copyright: Matthias Steffens <mailto:refbase@extracts.de> and the file's
|
||||
// original author(s).
|
||||
//
|
||||
// This code is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY. Please see the GNU General Public
|
||||
// License for more details.
|
||||
//
|
||||
// File: ./cite/styles/cite_MLA.php
|
||||
// Repository: $HeadURL: file:///svn/p/refbase/code/branches/bleeding-edge/cite/styles/cite_MLA.php $
|
||||
// Author(s): Richard Karnesky <mailto:karnesky@gmail.com> and
|
||||
// Matthias Steffens <mailto:refbase@extracts.de>
|
||||
//
|
||||
// Created: 13-Nov-06, 15:00
|
||||
// Modified: $Date: 2012-02-27 20:25:30 +0000 (Mon, 27 Feb 2012) $
|
||||
// $Author: msteffens $
|
||||
// $Revision: 1337 $
|
||||
|
||||
// This is a citation style file (which must reside within the 'cite/styles/' sub-directory of your refbase root directory). It contains a
|
||||
// version of the 'citeRecord()' function that outputs a reference list from selected records according to the citation style used by
|
||||
// the Modern Language Association (MLA)
|
||||
|
||||
// based on 'cite_APA.php'
|
||||
|
||||
// TODO: - newspaper & magazine articles, conference proceedings, manuals, patents, reports, software, published dissertation
|
||||
// - use dashes for subsequent entries when citing two or more books by the same author -> see e.g. example at: <http://web.csustan.edu/english/reuben/pal/append/AXI.HTML>
|
||||
// - don't add a dot if the abbreviated journal (or series title) ends with a dot!
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
// --- BEGIN CITATION STYLE ---
|
||||
|
||||
function citeRecord($row, $citeStyle, $citeType, $markupPatternsArray, $encodeHTML)
|
||||
{
|
||||
$record = ""; // make sure that our buffer variable is empty
|
||||
|
||||
// --- BEGIN TYPE = JOURNAL ARTICLE / MAGAZINE ARTICLE / NEWSPAPER ARTICLE --------------------------------------------------------------
|
||||
|
||||
if (preg_match("/^(Journal Article|Magazine Article|Newspaper Article)$/", $row['type']))
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($row['author'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", and ", // 5.
|
||||
"/ *, */", // 6.
|
||||
", ", // 7.
|
||||
" ", // 8.
|
||||
". ", // 9.
|
||||
false, // 10.
|
||||
true, // 11.
|
||||
false, // 12.
|
||||
"3", // 13.
|
||||
"1", // 14.
|
||||
", et al.", // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
if (!preg_match("/\. *$/", $author))
|
||||
$record .= $author . ".";
|
||||
else
|
||||
$record .= $author;
|
||||
}
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
if (!empty($row['author']))
|
||||
$record .= " ";
|
||||
|
||||
$record .= '"' . $row['title'];
|
||||
if (!preg_match("/[?!.]$/", $row['title']))
|
||||
$record .= ".";
|
||||
$record .= '"';
|
||||
}
|
||||
|
||||
// From here on we'll assume that at least either the 'author' or the 'title' field did contain some contents
|
||||
// if this is not the case, the output string will begin with a space. However, any preceding/trailing whitespace will be removed at the cleanup stage (see below)
|
||||
|
||||
if (!empty($row['abbrev_journal'])) // abbreviated journal name
|
||||
$record .= " " . $markupPatternsArray["italic-prefix"] . $row['abbrev_journal'] . $markupPatternsArray["italic-suffix"];
|
||||
|
||||
// if there's no abbreviated journal name, we'll use the full journal name
|
||||
elseif (!empty($row['publication'])) // publication (= journal) name
|
||||
$record .= " " . $markupPatternsArray["italic-prefix"] . $row['publication'] . $markupPatternsArray["italic-suffix"];
|
||||
|
||||
if (!empty($row['volume'])) // volume
|
||||
{
|
||||
if (!empty($row['abbrev_journal']) || !empty($row['publication']))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " " . $row['volume'];
|
||||
}
|
||||
|
||||
if (!empty($row['issue'])) // issue
|
||||
$record .= "." . $row['issue'];
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
{
|
||||
$record .= " (".$row['year'] . ")";
|
||||
}
|
||||
|
||||
|
||||
if ($row['online_publication'] == "yes") // this record refers to an online article
|
||||
{
|
||||
// instead of any pages info (which normally doesn't exist for online publications) we append
|
||||
// an optional string (given in 'online_citation') plus the current date and the DOI (or URL):
|
||||
|
||||
$today = date("j M. Y");
|
||||
|
||||
if (!empty($row['online_citation'])) // online_citation
|
||||
{
|
||||
if (!empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])) // only add ":" if either volume, issue, abbrev_journal or publication isn't empty
|
||||
$record .= ":";
|
||||
|
||||
$record .= " " . $row['online_citation'];
|
||||
}
|
||||
|
||||
if (!empty($row['doi'])) // doi
|
||||
{
|
||||
if (!empty($row['online_citation']) OR (empty($row['online_citation']) AND (!empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])))) // only add "." if online_citation isn't empty, or else if either volume, issue, abbrev_journal or publication isn't empty
|
||||
$record .= ".";
|
||||
|
||||
if ($encodeHTML)
|
||||
$record .= " " . $today . encodeHTML(" <http://dx.doi.org/" . $row['doi'] . ">");
|
||||
else
|
||||
$record .= " " . $today . " <http://dx.doi.org/" . $row['doi'] . ">";
|
||||
}
|
||||
elseif (!empty($row['url'])) // url
|
||||
{
|
||||
if (!empty($row['online_citation']) OR (empty($row['online_citation']) AND (!empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])))) // only add "." if online_citation isn't empty, or else if either volume, issue, abbrev_journal or publication isn't empty
|
||||
$record .= ".";
|
||||
|
||||
if ($encodeHTML)
|
||||
$record .= " " . $today . encodeHTML(" <" . $row['url'] . ">");
|
||||
else
|
||||
$record .= " " . $today . " <" . $row['url'] . ">";
|
||||
}
|
||||
|
||||
}
|
||||
else // $row['online_publication'] == "no" -> this record refers to a printed article, so we append any pages info instead:
|
||||
{
|
||||
if (!empty($row['pages'])) // pages
|
||||
{
|
||||
if (!empty($row['year']) || !empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])) // only add ": " if either volume, issue, abbrev_journal or publication isn't empty
|
||||
$record .= ": ";
|
||||
|
||||
$record .= formatPageInfo($row['pages'], $markupPatternsArray["endash"]); // function 'formatPageInfo()' is defined in 'cite.inc.php'
|
||||
}
|
||||
}
|
||||
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// --- BEGIN TYPE = ABSTRACT / BOOK CHAPTER / CONFERENCE ARTICLE ------------------------------------------------------------------------
|
||||
|
||||
elseif (preg_match("/^(Abstract|Book Chapter|Conference Article)$/", $row['type']))
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($row['author'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", and ", // 5.
|
||||
"/ *, */", // 6.
|
||||
", ", // 7.
|
||||
" ", // 8.
|
||||
". ", // 9.
|
||||
false, // 10.
|
||||
true, // 11.
|
||||
false, // 12.
|
||||
"3", // 13.
|
||||
"1", // 14.
|
||||
", et al.", // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
if (!preg_match("/\. *$/", $author))
|
||||
$record .= $author . ".";
|
||||
else
|
||||
$record .= $author;
|
||||
}
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
if (!empty($row['author']))
|
||||
$record .= " ";
|
||||
|
||||
$record .= '"' . $row['title'];
|
||||
if (!preg_match("/[?!.]$/", $row['title']))
|
||||
$record .= ".";
|
||||
$record .= '"';
|
||||
}
|
||||
|
||||
$publication = preg_replace("/[ \r\n]*\(Eds?:[^\)\r\n]*\)/i", "", $row['publication']);
|
||||
if (!empty($publication)) // publication
|
||||
$record .= " " . $markupPatternsArray["italic-prefix"] . $publication . $markupPatternsArray["italic-suffix"];
|
||||
|
||||
|
||||
// From here on we'll assume that at least either the 'author' or the 'title' field did contain some contents
|
||||
// if this is not the case, the output string will begin with a space. However, any preceding/trailing whitespace will be removed at the cleanup stage (see below)
|
||||
|
||||
if (!empty($row['editor'])) // editor
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$editor = reArrangeAuthorContents($row['editor'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", and ", // 5.
|
||||
"/ *, */", // 6.
|
||||
" ", // 7.
|
||||
" ", // 8.
|
||||
". ", // 9.
|
||||
true, // 10.
|
||||
true, // 11.
|
||||
false, // 12.
|
||||
"3", // 13.
|
||||
"1", // 14.
|
||||
", et al.", // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
if (preg_match("/^[^;\r\n]+(;[^;\r\n]+)+$/", $row['editor'])) // there are at least two editors (separated by ';')
|
||||
$record .= " Eds. " . $editor;
|
||||
else // there's only one editor (or the editor field is malformed with multiple editors but missing ';' separator[s])
|
||||
$record .= " Ed. " . $editor;
|
||||
}
|
||||
|
||||
if (!empty($row['edition']) && !preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition'])) // edition
|
||||
{
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
if (preg_match("/^\d{1,3}$/", $row['edition'])) // if the edition field contains a number of up to three digits, we assume it's an edition number (such as "2nd ed.")
|
||||
{
|
||||
if ($row['edition'] == "2")
|
||||
$editionSuffix = "nd";
|
||||
elseif ($row['edition'] == "3")
|
||||
$editionSuffix = "rd";
|
||||
else
|
||||
$editionSuffix = "th";
|
||||
}
|
||||
else
|
||||
$editionSuffix = "";
|
||||
|
||||
if (preg_match("/^(Rev\.?|Revised)( ed\.?| edition)?$/i", $row['edition']))
|
||||
$row['edition'] = "Rev.";
|
||||
|
||||
elseif (preg_match("/^(Abr\.?|Abridged)( ed\.?| edition)?$/i", $row['edition']))
|
||||
$row['edition'] = "Abr.";
|
||||
|
||||
if (!preg_match("/( ed\.?| edition)$/i", $row['edition']))
|
||||
$editionSuffix .= " ed.";
|
||||
|
||||
$record .= " " . $row['edition'] . $editionSuffix;
|
||||
}
|
||||
|
||||
if (!empty($row['volume'])) // volume
|
||||
{
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " Vol. " . $row['volume'];
|
||||
}
|
||||
|
||||
if (!empty($row['abbrev_series_title']) OR !empty($row['series_title'])) // if there's either a full or an abbreviated series title
|
||||
{
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " ";
|
||||
|
||||
if (!empty($row['abbrev_series_title']))
|
||||
$record .= $row['abbrev_series_title']; // abbreviated series title
|
||||
|
||||
// if there's no abbreviated series title, we'll use the full series title instead:
|
||||
elseif (!empty($row['series_title']))
|
||||
$record .= $row['series_title']; // full series title
|
||||
|
||||
if (!empty($row['series_volume'])||!empty($row['series_issue']))
|
||||
$record .= ", ";
|
||||
|
||||
if (!empty($row['series_volume'])) // series volume
|
||||
$record .= $row['series_volume'];
|
||||
|
||||
if (!empty($row['series_issue'])) // series issue (I'm not really sure if -- for this cite style -- the series issue should be rather omitted here)
|
||||
$record .= "." . $row['series_issue']; // is it correct to format series issues similar to journal article issues?
|
||||
}
|
||||
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
if (!empty($row['place'])) // place
|
||||
$record .= " " . $row['place'];
|
||||
|
||||
if (!empty($row['publisher'])) // publisher
|
||||
{
|
||||
if (!empty($row['place']))
|
||||
$record .= ":";
|
||||
|
||||
$record .= " " . $row['publisher'];
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
{
|
||||
$record .= ", " . $row['year'];
|
||||
}
|
||||
|
||||
if (!empty($row['pages'])) // pages
|
||||
$record .= ". " . formatPageInfo($row['pages'], $markupPatternsArray["endash"]); // function 'formatPageInfo()' is defined in 'cite.inc.php'
|
||||
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// --- BEGIN TYPE = BOOK WHOLE / CONFERENCE VOLUME / JOURNAL / MANUAL / MANUSCRIPT / MAP / MISCELLANEOUS / PATENT / REPORT / SOFTWARE ---
|
||||
|
||||
else // if (preg_match("/Book Whole|Conference Volume|Journal|Manual|Manuscript|Map|Miscellaneous|Patent|Report|Software/", $row['type']))
|
||||
// note that this also serves as a fallback: unrecognized resource types will be formatted similar to whole books
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
$author = preg_replace("/[ \r\n]*\(eds?\)/i", "", $row['author']);
|
||||
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($author, // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", and ", // 5.
|
||||
"/ *, */", // 6.
|
||||
", ", // 7.
|
||||
" ", // 8.
|
||||
". ", // 9.
|
||||
false, // 10.
|
||||
true, // 11.
|
||||
false, // 12.
|
||||
"3", // 13.
|
||||
"1", // 14.
|
||||
", et al.", // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
// if the author is actually the editor of the resource we'll append ', ed' (or ', eds') to the author string:
|
||||
// [to distinguish editors from authors in the 'author' field, the 'modify.php' script does append ' (ed)' or ' (eds)' if appropriate,
|
||||
// so we're just checking for these identifier strings here. Alternatively, we could check whether the editor field matches the author field]
|
||||
if (preg_match("/[ \r\n]*\(ed\)/", $row['author'])) // single editor
|
||||
$author = $author . ", " . "ed";
|
||||
elseif (preg_match("/[ \r\n]*\(eds\)/", $row['author'])) // multiple editors
|
||||
$author = $author . ", " . "eds";
|
||||
|
||||
if (!preg_match("/\. *$/", $author))
|
||||
$record .= $author . ".";
|
||||
else
|
||||
$record .= $author;
|
||||
}
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
if (!empty($row['author']))
|
||||
$record .= " ";
|
||||
|
||||
if (!empty($row['thesis'])) // thesis
|
||||
{
|
||||
$record .= '"' . $row['title'];
|
||||
if (!preg_match("/[?!.]$/", $row['title']))
|
||||
$record .= ".";
|
||||
$record .= '"';
|
||||
}
|
||||
else // not a thesis
|
||||
$record .= $markupPatternsArray["italic-prefix"] . $row['title'] . $markupPatternsArray["italic-suffix"];
|
||||
}
|
||||
|
||||
if (!empty($row['editor']) && !preg_match("/[ \r\n]*\(eds?\)/", $row['author'])) // editor (if different from author, see note above regarding the check for ' (ed)' or ' (eds)')
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$editor = reArrangeAuthorContents($row['editor'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", and ", // 5.
|
||||
"/ *, */", // 6.
|
||||
" ", // 7.
|
||||
" ", // 8.
|
||||
". ", // 9.
|
||||
true, // 10.
|
||||
true, // 11.
|
||||
false, // 12.
|
||||
"3", // 13.
|
||||
"1", // 14.
|
||||
", et al.", // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
if (preg_match("/^[^;\r\n]+(;[^;\r\n]+)+$/", $row['editor'])) // there are at least two editors (separated by ';')
|
||||
$record .= " Eds. " . $editor;
|
||||
else // there's only one editor (or the editor field is malformed with multiple editors but missing ';' separator[s])
|
||||
$record .= " Ed. " . $editor;
|
||||
}
|
||||
|
||||
if (!empty($row['edition']) && !preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition'])) // edition
|
||||
{
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
if (preg_match("/^\d{1,3}$/", $row['edition'])) // if the edition field contains a number of up to three digits, we assume it's an edition number (such as "2nd ed.")
|
||||
{
|
||||
if ($row['edition'] == "2")
|
||||
$editionSuffix = "nd";
|
||||
elseif ($row['edition'] == "3")
|
||||
$editionSuffix = "rd";
|
||||
else
|
||||
$editionSuffix = "th";
|
||||
}
|
||||
else
|
||||
$editionSuffix = "";
|
||||
|
||||
if (preg_match("/^(Rev\.?|Revised)( ed\.?| edition)?$/i", $row['edition']))
|
||||
$row['edition'] = "Rev.";
|
||||
|
||||
elseif (preg_match("/^(Abr\.?|Abridged)( ed\.?| edition)?$/i", $row['edition']))
|
||||
$row['edition'] = "Abr.";
|
||||
|
||||
if (!preg_match("/( ed\.?| edition)$/i", $row['edition']))
|
||||
$editionSuffix .= " ed.";
|
||||
|
||||
$record .= " " . $row['edition'] . $editionSuffix;
|
||||
}
|
||||
|
||||
if (!empty($row['volume'])) // volume
|
||||
{
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " Vol. " . $row['volume'];
|
||||
}
|
||||
|
||||
if (!empty($row['abbrev_series_title']) OR !empty($row['series_title'])) // if there's either a full or an abbreviated series title
|
||||
{
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " ";
|
||||
|
||||
if (!empty($row['abbrev_series_title']))
|
||||
$record .= $row['abbrev_series_title']; // abbreviated series title
|
||||
|
||||
// if there's no abbreviated series title, we'll use the full series title instead:
|
||||
elseif (!empty($row['series_title']))
|
||||
$record .= $row['series_title']; // full series title
|
||||
|
||||
if (!empty($row['series_volume'])||!empty($row['series_issue']))
|
||||
$record .= ", ";
|
||||
|
||||
if (!empty($row['series_volume'])) // series volume
|
||||
$record .= $row['series_volume'];
|
||||
|
||||
if (!empty($row['series_issue'])) // series issue (I'm not really sure if -- for this cite style -- the series issue should be rather omitted here)
|
||||
$record .= "." . $row['series_issue']; // is it correct to format series issues similar to journal article issues?
|
||||
}
|
||||
|
||||
if (!empty($row['thesis'])) // thesis (unpublished dissertation)
|
||||
{
|
||||
// TODO: a published dissertation needs to be formatted differently!
|
||||
// see e.g. example at: <http://web.csustan.edu/english/reuben/pal/append/AXI.HTML>
|
||||
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
// TODO: I've also seen MLA examples that separate thesis name, name of institution and year by dots. ?:-|
|
||||
// Also, do we need to use the abbreviation "Diss." instead of "Ph.D. thesis"? What about other thesis types then?
|
||||
// see e.g. <http://www.english.uiuc.edu/cws/wworkshop/writer_resources/citation_styles/mla/unpublished_diss.htm>
|
||||
$record .= " " . $row['thesis'];
|
||||
$record .= ", " . $row['publisher'];
|
||||
}
|
||||
else // not a thesis
|
||||
{
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
if (!empty($row['place'])) // place
|
||||
$record .= " " . $row['place'];
|
||||
|
||||
if (!empty($row['publisher'])) // publisher
|
||||
{
|
||||
if (!empty($row['place']))
|
||||
$record .= ":";
|
||||
|
||||
$record .= " " . $row['publisher'];
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
$record .= ", ".$row['year'];
|
||||
|
||||
if ($row['online_publication'] == "yes") // this record refers to an online article
|
||||
{
|
||||
$today = date("j M. Y");
|
||||
|
||||
if (!empty($row['online_citation'])) // online_citation
|
||||
{
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " " . $row['online_citation'];
|
||||
}
|
||||
|
||||
if (!empty($row['doi'])) // doi
|
||||
{
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
if ($encodeHTML)
|
||||
$record .= " " . $today . encodeHTML(" <http://dx.doi.org/" . $row['doi'] . ">");
|
||||
else
|
||||
$record .= " " . $today . " <http://dx.doi.org/" . $row['doi'] . ">";
|
||||
}
|
||||
elseif (!empty($row['url'])) // url
|
||||
{
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
if ($encodeHTML)
|
||||
$record .= " " . $today . encodeHTML(" <" . $row['url'] . ">");
|
||||
else
|
||||
$record .= " " . $today . " <" . $row['url'] . ">";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// --- BEGIN POST-PROCESSING -----------------------------------------------------------------------------------------------------------
|
||||
|
||||
// do some further cleanup:
|
||||
$record = trim($record); // remove any preceding or trailing whitespace
|
||||
|
||||
|
||||
return $record;
|
||||
}
|
||||
|
||||
// --- END CITATION STYLE ---
|
||||
?>
|
||||
442
cite/styles/cite_PolarBiol_MarBiol_MEPS.php
Normal file
442
cite/styles/cite_PolarBiol_MarBiol_MEPS.php
Normal file
@@ -0,0 +1,442 @@
|
||||
<?php
|
||||
// Project: Web Reference Database (refbase) <http://www.refbase.net>
|
||||
// Copyright: Matthias Steffens <mailto:refbase@extracts.de> and the file's
|
||||
// original author(s).
|
||||
//
|
||||
// This code is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY. Please see the GNU General Public
|
||||
// License for more details.
|
||||
//
|
||||
// File: ./cite/styles/cite_PolarBiol_MarBiol_MEPS.php
|
||||
// Repository: $HeadURL: file:///svn/p/refbase/code/branches/bleeding-edge/cite/styles/cite_PolarBiol_MarBiol_MEPS.php $
|
||||
// Author(s): Matthias Steffens <mailto:refbase@extracts.de>
|
||||
//
|
||||
// Created: 28-Sep-04, 22:14
|
||||
// Modified: $Date: 2012-02-27 20:25:30 +0000 (Mon, 27 Feb 2012) $
|
||||
// $Author: msteffens $
|
||||
// $Revision: 1337 $
|
||||
|
||||
// This is a citation style file (which must reside within the 'cite/styles/' sub-directory of your refbase root directory). It contains a
|
||||
// version of the 'citeRecord()' function that outputs a reference list from selected records according to the citation style used by
|
||||
// the journals "Polar Biology", "Marine Biology" (both Springer-Verlag, springeronline.com) and "MEPS" (Inter-Research, int-res.com).
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
// --- BEGIN CITATION STYLE ---
|
||||
|
||||
function citeRecord($row, $citeStyle, $citeType, $markupPatternsArray, $encodeHTML)
|
||||
{
|
||||
global $alnum, $alpha, $cntrl, $dash, $digit, $graph, $lower, $print, $punct, $space, $upper, $word, $patternModifiers; // defined in 'transtab_unicode_charset.inc.php' and 'transtab_latin1_charset.inc.php'
|
||||
|
||||
$record = ""; // make sure that our buffer variable is empty
|
||||
|
||||
// --- BEGIN TYPE = JOURNAL ARTICLE / MAGAZINE ARTICLE / NEWSPAPER ARTICLE --------------------------------------------------------------
|
||||
|
||||
if (preg_match("/^(Journal Article|Magazine Article|Newspaper Article)$/", $row['type']))
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($row['author'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", ", // 5.
|
||||
"/ *, */", // 6.
|
||||
" ", // 7.
|
||||
" ", // 8.
|
||||
"", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"", // 13.
|
||||
"", // 14.
|
||||
" " . $markupPatternsArray["italic-prefix"] . "and __NUMBER_OF_AUTHORS__ others" . $markupPatternsArray["italic-suffix"], // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
$record .= $author . " ";
|
||||
}
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
$record .= "(" . $row['year'] . ") ";
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
$record .= $row['title'];
|
||||
if (!preg_match("/[?!.]$/", $row['title']))
|
||||
$record .= ".";
|
||||
$record .= " ";
|
||||
}
|
||||
|
||||
if (!empty($row['abbrev_journal'])) // abbreviated journal name
|
||||
$record .= $row['abbrev_journal'] . " ";
|
||||
|
||||
// if there's no abbreviated journal name, we'll use the full journal name
|
||||
elseif (!empty($row['publication'])) // publication (= journal) name
|
||||
$record .= $row['publication'] . " ";
|
||||
|
||||
if (!empty($row['volume'])) // volume
|
||||
$record .= $row['volume'];
|
||||
|
||||
if (!empty($row['issue'])) // issue
|
||||
$record .= "(" . $row['issue'] . ")";
|
||||
|
||||
if ($row['online_publication'] == "yes") // this record refers to an online article
|
||||
{
|
||||
// instead of any pages info (which normally doesn't exist for online publications) we append
|
||||
// an optional string (given in 'online_citation') plus the DOI:
|
||||
|
||||
if (!empty($row['online_citation'])) // online_citation
|
||||
{
|
||||
if (!empty($row['volume'])||!empty($row['issue'])) // only add ":" if either volume or issue isn't empty
|
||||
$record .= ":";
|
||||
|
||||
$record .= " " . $row['online_citation'];
|
||||
}
|
||||
|
||||
if (!empty($row['doi'])) // doi
|
||||
$record .= " doi:" . $row['doi'];
|
||||
}
|
||||
else // $row['online_publication'] == "no" -> this record refers to a printed article, so we append any pages info instead:
|
||||
{
|
||||
if (!empty($row['pages'])) // pages
|
||||
{
|
||||
if (!empty($row['volume'])||!empty($row['issue'])) // only add ":" if either volume or issue isn't empty
|
||||
$record .= ":";
|
||||
|
||||
$record .= formatPageInfo($row['pages'], $markupPatternsArray["endash"], "", "", " pp"); // function 'formatPageInfo()' is defined in 'cite.inc.php'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// --- BEGIN TYPE = ABSTRACT / BOOK CHAPTER / CONFERENCE ARTICLE ------------------------------------------------------------------------
|
||||
|
||||
elseif (preg_match("/^(Abstract|Book Chapter|Conference Article)$/", $row['type']))
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($row['author'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", ", // 5.
|
||||
"/ *, */", // 6.
|
||||
" ", // 7.
|
||||
" ", // 8.
|
||||
"", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"", // 13.
|
||||
"", // 14.
|
||||
" " . $markupPatternsArray["italic-prefix"] . "and __NUMBER_OF_AUTHORS__ others" . $markupPatternsArray["italic-suffix"], // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
$record .= $author . " ";
|
||||
}
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
$record .= "(" . $row['year'] . ") ";
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
$record .= $row['title'];
|
||||
if (!preg_match("/[?!.]$/", $row['title']))
|
||||
$record .= ".";
|
||||
$record .= " ";
|
||||
}
|
||||
|
||||
if (!empty($row['editor'])) // editor
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$editor = reArrangeAuthorContents($row['editor'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", ", // 5.
|
||||
"/ *, */", // 6.
|
||||
" ", // 7.
|
||||
" ", // 8.
|
||||
"", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"", // 13.
|
||||
"", // 14.
|
||||
" " . $markupPatternsArray["italic-prefix"] . "and __NUMBER_OF_AUTHORS__ others" . $markupPatternsArray["italic-suffix"], // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
$record .= "In: " . $editor;
|
||||
if (preg_match("/^[^;\r\n]+(;[^;\r\n]+)+$/", $row['editor'])) // there are at least two editors (separated by ';')
|
||||
$record .= " (eds)";
|
||||
else // there's only one editor (or the editor field is malformed with multiple editors but missing ';' separator[s])
|
||||
$record .= " (ed)";
|
||||
}
|
||||
|
||||
$publication = preg_replace("/[ \r\n]*\(Eds?:[^\)\r\n]*\)/i", "", $row['publication']);
|
||||
if (!empty($publication)) // publication
|
||||
$record .= " " . $publication . ". ";
|
||||
else
|
||||
if (!empty($row['editor']))
|
||||
$record .= ". ";
|
||||
|
||||
if (!empty($row['abbrev_series_title']) OR !empty($row['series_title'])) // if there's either a full or an abbreviated series title, series information will replace the publisher & place information
|
||||
{
|
||||
if (!empty($row['abbrev_series_title']))
|
||||
$record .= $row['abbrev_series_title']; // abbreviated series title
|
||||
|
||||
// if there's no abbreviated series title, we'll use the full series title instead:
|
||||
elseif (!empty($row['series_title']))
|
||||
$record .= $row['series_title']; // full series title
|
||||
|
||||
if (!empty($row['series_volume'])||!empty($row['series_issue']))
|
||||
$record .= " ";
|
||||
|
||||
if (!empty($row['series_volume'])) // series volume
|
||||
$record .= $row['series_volume'];
|
||||
|
||||
if (!empty($row['series_issue'])) // series issue
|
||||
$record .= "(" . $row['series_issue'] . ")";
|
||||
|
||||
if (!empty($row['pages']))
|
||||
$record .= ", ";
|
||||
|
||||
}
|
||||
else // if there's NO series title at all (neither full nor abbreviated), we'll insert the publisher & place instead:
|
||||
{
|
||||
if (!empty($row['publisher'])) // publisher
|
||||
{
|
||||
$record .= $row['publisher'];
|
||||
if (!empty($row['place']))
|
||||
$record .= ", ";
|
||||
else
|
||||
{
|
||||
if (!preg_match("/,$/", $row['publisher']))
|
||||
$record .= ",";
|
||||
$record .= " ";
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($row['place'])) // place
|
||||
{
|
||||
$record .= $row['place'];
|
||||
if (!empty($row['pages']))
|
||||
{
|
||||
if (!preg_match("/,$/", $row['place']))
|
||||
$record .= ",";
|
||||
$record .= " ";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($row['pages'])) // pages
|
||||
$record .= formatPageInfo($row['pages'], $markupPatternsArray["endash"], "p ", "pp ", " pp"); // function 'formatPageInfo()' is defined in 'cite.inc.php'
|
||||
}
|
||||
|
||||
// --- BEGIN TYPE = BOOK WHOLE / CONFERENCE VOLUME / JOURNAL / MANUAL / MANUSCRIPT / MAP / MISCELLANEOUS / PATENT / REPORT / SOFTWARE ---
|
||||
|
||||
else // if (preg_match("/Book Whole|Conference Volume|Journal|Manual|Manuscript|Map|Miscellaneous|Patent|Report|Software/", $row['type']))
|
||||
// note that this also serves as a fallback: unrecognized resource types will be formatted similar to whole books
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
$author = preg_replace("/[ \r\n]*\(eds?\)/i", "", $row['author']);
|
||||
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($author, // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", ", // 5.
|
||||
"/ *, */", // 6.
|
||||
" ", // 7.
|
||||
" ", // 8.
|
||||
"", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"", // 13.
|
||||
"", // 14.
|
||||
" " . $markupPatternsArray["italic-prefix"] . "and __NUMBER_OF_AUTHORS__ others" . $markupPatternsArray["italic-suffix"], // 15.
|
||||
$encodeHTML); // 16.
|
||||
|
||||
$record .= $author . " ";
|
||||
}
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
$record .= "(" . $row['year'] . ") ";
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
$record .= $row['title'];
|
||||
if (!preg_match("/[?!.]$/", $row['title']))
|
||||
$record .= ".";
|
||||
$record .= " ";
|
||||
}
|
||||
|
||||
if (!empty($row['thesis'])) // thesis
|
||||
$record .= $row['thesis'] . ". ";
|
||||
|
||||
if (!empty($row['publisher'])) // publisher
|
||||
{
|
||||
$record .= $row['publisher'];
|
||||
if (!empty($row['place']))
|
||||
$record .= ", ";
|
||||
else
|
||||
{
|
||||
if (!preg_match("/,$/", $row['publisher']))
|
||||
$record .= ",";
|
||||
$record .= " ";
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($row['place'])) // place
|
||||
{
|
||||
$record .= $row['place'];
|
||||
if (!empty($row['abbrev_series_title']) || !empty($row['series_title']) || !empty($row['pages']))
|
||||
{
|
||||
if (!preg_match("/,$/", $row['place']))
|
||||
$record .= ",";
|
||||
$record .= " ";
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($row['abbrev_series_title']) OR !empty($row['series_title'])) // add either abbreviated or full series title
|
||||
{
|
||||
if (!empty($row['abbrev_series_title']))
|
||||
$record .= $row['abbrev_series_title']; // abbreviated series title
|
||||
|
||||
// if there's no abbreviated series title, we'll use the full series title instead:
|
||||
elseif (!empty($row['series_title']))
|
||||
$record .= $row['series_title']; // full series title
|
||||
|
||||
// series volume & series issue will get appended only if there's also either the full or an abbreviated series title(!):
|
||||
if (!empty($row['series_volume'])||!empty($row['series_issue']))
|
||||
$record .= " ";
|
||||
|
||||
if (!empty($row['series_volume'])) // series volume
|
||||
$record .= $row['series_volume'];
|
||||
|
||||
if (!empty($row['series_issue'])) // series issue
|
||||
$record .= "(" . $row['series_issue'] . ")";
|
||||
|
||||
if (!empty($row['pages']))
|
||||
{
|
||||
if (!preg_match("/,$/", $row['series_volume']))
|
||||
$record .= ",";
|
||||
$record .= " ";
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($row['pages'])) // pages
|
||||
{
|
||||
// TODO: use function 'formatPageInfo()' when it can recognize & process total number of pages
|
||||
// $record .= formatPageInfo($row['pages'], $markupPatternsArray["endash"], "p ", "pp ", " pp"); // function 'formatPageInfo()' is defined in 'cite.inc.php'
|
||||
|
||||
if (preg_match("/\d *[$dash] *\d/$patternModifiers", $row['pages'])) // if the 'pages' field contains a page range (like: "127-132")
|
||||
// Note that we'll check for page ranges here although for whole books the 'pages' field should NOT contain a page range but the total number of pages! (like: "623 pp")
|
||||
$pagesDisplay = (preg_replace("@(\d+) *[$dash] *(\d+)@$patternModifiers", "\\1" . $markupPatternsArray["endash"] . "\\2", $row['pages']));
|
||||
else
|
||||
$pagesDisplay = $row['pages'];
|
||||
$record .= $pagesDisplay;
|
||||
}
|
||||
}
|
||||
|
||||
// --- BEGIN POST-PROCESSING -----------------------------------------------------------------------------------------------------------
|
||||
|
||||
// do some further cleanup:
|
||||
$record = preg_replace("/[.,][ \r\n]*$/i", "", $record); // remove '.' or ',' at end of line
|
||||
if ($citeStyle == "MEPS") // if '$citeStyle' = 'MEPS' ...
|
||||
$record = preg_replace("/pp ([0-9]+)/i", "p \\1", $record); // ... replace 'pp' with 'p' in front of (book chapter) page numbers
|
||||
|
||||
|
||||
return $record;
|
||||
}
|
||||
|
||||
// --- END CITATION STYLE ---
|
||||
?>
|
||||
69
cite/styles/cite_TextCitation.php
Normal file
69
cite/styles/cite_TextCitation.php
Normal file
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
// Project: Web Reference Database (refbase) <http://www.refbase.net>
|
||||
// Copyright: Matthias Steffens <mailto:refbase@extracts.de> and the file's
|
||||
// original author(s).
|
||||
//
|
||||
// This code is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY. Please see the GNU General Public
|
||||
// License for more details.
|
||||
//
|
||||
// File: ./cite/styles/cite_TextCitation.php
|
||||
// Repository: $HeadURL: file:///svn/p/refbase/code/branches/bleeding-edge/cite/styles/cite_TextCitation.php $
|
||||
// Author(s): Matthias Steffens <mailto:refbase@extracts.de>
|
||||
//
|
||||
// Created: 28-Sep-04, 23:46
|
||||
// Modified: $Date: 2012-02-27 20:25:30 +0000 (Mon, 27 Feb 2012) $
|
||||
// $Author: msteffens $
|
||||
// $Revision: 1337 $
|
||||
|
||||
// This is a citation style file (which must reside within the 'cite/styles/' sub-directory of your refbase root directory). It contains a
|
||||
// version of the 'citeRecord()' function that outputs a reference list from selected records according to the citation style defined
|
||||
// by a user's custom text citation format (or by the default format given in '$defaultTextCitationFormat' in 'ini.inc.php').
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
// --- BEGIN CITATION STYLE ---
|
||||
|
||||
function citeRecord($row, $citeStyle, $citeType, $markupPatternsArray, $encodeHTML)
|
||||
{
|
||||
global $defaultTextCitationFormat; // defined in 'ini.inc.php'
|
||||
global $userOptionsArray; // '$userOptionsArray' is made globally available by function 'generateCitations()' in 'search.php'
|
||||
|
||||
// output records suitable for citation within a text, e.g., like: "Ambrose 1991 {3735}", "Ambrose & Renaud 1995 {3243}" or "Ambrose et al. 2001 {4774}"
|
||||
|
||||
|
||||
if (!empty($userOptionsArray) AND ($userOptionsArray['use_custom_text_citation_format'] == "yes")) // if the user wants to use a custom text citation format
|
||||
$textCitationFormat = $userOptionsArray['text_citation_format'];
|
||||
|
||||
else // use the default text citation format that was specified by the admin in 'ini.inc.php'
|
||||
$textCitationFormat = $defaultTextCitationFormat;
|
||||
|
||||
// this is a stupid hack that maps the names of the '$row' array keys to those used
|
||||
// by the '$formVars' array (which is required by function 'parsePlaceholderString()')
|
||||
// (eventually, the '$formVars' array should use the MySQL field names as names for its array keys)
|
||||
$formVars = buildFormVarsArray($row); // function 'buildFormVarsArray()' is defined in 'include.inc.php'
|
||||
|
||||
if (preg_match("/RTF|LaTeX/i", $citeType))
|
||||
{
|
||||
$textCitationFormat = preg_replace("/([{}])/i", "\\\\1", $textCitationFormat); // in case of RTF or LaTeX output we need to escape braces in placeholder strings
|
||||
|
||||
$fallbackPlaceholderString = "<:authors[2| & | et al.]:>< :year:>< \{:recordIdentifier:\}>";
|
||||
}
|
||||
else
|
||||
$fallbackPlaceholderString = "<:authors[2| & | et al.]:>< :year:>< {:recordIdentifier:}>";
|
||||
|
||||
// generate a text citation according to the given naming scheme:
|
||||
$record = parsePlaceholderString($formVars, $textCitationFormat, $fallbackPlaceholderString); // function 'parsePlaceholderString()' is defined in 'include.inc.php'
|
||||
|
||||
|
||||
// Perform search & replace actions on the text:
|
||||
$searchReplaceActionsArray["(et +al\.)"] = $markupPatternsArray["italic-prefix"] . "\\1" . $markupPatternsArray["italic-suffix"]; // print 'et al.' in italic
|
||||
|
||||
$record = searchReplaceText($searchReplaceActionsArray, $record, false); // function 'searchReplaceText()' is defined in 'include.inc.php'
|
||||
|
||||
|
||||
return $record;
|
||||
}
|
||||
|
||||
// --- END CITATION STYLE ---
|
||||
?>
|
||||
714
cite/styles/cite_Vancouver.php
Normal file
714
cite/styles/cite_Vancouver.php
Normal file
@@ -0,0 +1,714 @@
|
||||
<?php
|
||||
// Project: Web Reference Database (refbase) <http://www.refbase.net>
|
||||
// Copyright: Matthias Steffens <mailto:refbase@extracts.de> and the file's
|
||||
// original author(s).
|
||||
//
|
||||
// This code is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY. Please see the GNU General Public
|
||||
// License for more details.
|
||||
//
|
||||
// File: ./cite/styles/cite_Vancouver.php
|
||||
// Repository: $HeadURL$
|
||||
// Author(s): Matthias Steffens <mailto:refbase@extracts.de>
|
||||
//
|
||||
// Created: 04-Aug-08, 12:00
|
||||
// Modified: $Date: 2012-02-27 20:25:30 +0000 (Mon, 27 Feb 2012) $
|
||||
// $Author$
|
||||
// $Revision: 1337 $
|
||||
|
||||
// This is a citation style file (which must reside within the 'cite/styles/' sub-directory of your refbase root directory). It contains a
|
||||
// version of the 'citeRecord()' function that outputs a reference list from selected records according to the citation style used by
|
||||
// the Vancouver referencing system (also known as "Uniform Requirements for Manuscripts Submitted to Biomedical Journals")
|
||||
|
||||
// This Vancouver style was modeled after these resources:
|
||||
// <http://www.library.uq.edu.au/training/citation/vancouv.pdf>
|
||||
// <http://library.curtin.edu.au/research_and_information_skills/referencing/vancouver.pdf>
|
||||
// <http://www.icmje.org/index.html> citing: <http://www.nlm.nih.gov/citingmedicine/>
|
||||
// <http://www.nlm.nih.gov/bsd/uniform_requirements.html>
|
||||
// <http://library.sun.ac.za//eng/help/infolit2002/bibvancouver.htm>
|
||||
|
||||
// based on 'cite_AMA.php'
|
||||
|
||||
// NOTES: - In the Vancouver style, the reference list is arranged numerically in the order in which references are cited in the text.
|
||||
// This isn't currently handled by this style (it needs to be implemented in the 'cite/formats/cite_*.php' files).
|
||||
// - For conference proceedings, you'll currently need to add the place & date of the conference in the proceedings title field
|
||||
// (e.g. "Proceedings of the 5th Germ Cell Tumour Conference; 2001 Sep 13-15; Leeds, UK").
|
||||
|
||||
// TODO: - abstracts, newspaper/magazine articles, patents & reports?
|
||||
// - arrange references numerically
|
||||
// - for newspaper articles, only the beginning page number of an article should be included (see: <http://www.ncbi.nlm.nih.gov/books/bv.fcgi?rid=citmed.section.41496#41607>)
|
||||
// - where to put (and how to format) editors of whole books that also have an author?
|
||||
// - see also inline comments labeled with TODO (and NOTE)
|
||||
|
||||
// --------------------------------------------------------------------
|
||||
|
||||
// --- BEGIN CITATION STYLE ---
|
||||
|
||||
function citeRecord($row, $citeStyle, $citeType, $markupPatternsArray, $encodeHTML)
|
||||
{
|
||||
global $alnum, $alpha, $cntrl, $dash, $digit, $graph, $lower, $print, $punct, $space, $upper, $word, $patternModifiers; // defined in 'transtab_unicode_charset.inc.php' and 'transtab_latin1_charset.inc.php'
|
||||
|
||||
static $uspsStateAbbreviations;
|
||||
|
||||
// Official USPS state abbreviations:
|
||||
// see <http://www.usps.com/ncsc/lookups/usps_abbreviations.htm>
|
||||
$uspsStateAbbreviations = "AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|"
|
||||
. "NE|NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|TX|UT|VT|VI|VA|WA|WV|WI|WY";
|
||||
|
||||
$record = ""; // make sure that our buffer variable is empty
|
||||
|
||||
// --- BEGIN TYPE = JOURNAL ARTICLE / MAGAZINE ARTICLE / NEWSPAPER ARTICLE --------------------------------------------------------------
|
||||
|
||||
if (preg_match("/^(Journal Article|Magazine Article|Newspaper Article)$/", $row['type']))
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($row['author'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", ", // 5.
|
||||
"/ *, */", // 6.
|
||||
" ", // 7.
|
||||
" ", // 8.
|
||||
"", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"6", // 13.
|
||||
"6", // 14.
|
||||
", et al.", // 15.
|
||||
$encodeHTML // 16.
|
||||
);
|
||||
|
||||
if (!preg_match("/\. *$/", $author))
|
||||
$record .= $author . ".";
|
||||
else
|
||||
$record .= $author;
|
||||
}
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
if (!empty($row['author']))
|
||||
$record .= " ";
|
||||
|
||||
$record .= $row['title'];
|
||||
}
|
||||
|
||||
// From here on we'll assume that at least either the 'author' or the 'title' field did contain some contents
|
||||
// if this is not the case, the output string will begin with a space. However, any preceding/trailing whitespace will be removed at the cleanup stage (see below)
|
||||
|
||||
if (!preg_match("/[?!.] *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
if (!empty($row['abbrev_journal'])) // abbreviated journal name
|
||||
$record .= " " . preg_replace("/\./", "", $row['abbrev_journal']); // no punctuation marks are used in the abbreviated journal name, just spaces (TODO: smarten regex pattern)
|
||||
|
||||
// if there's no abbreviated journal name, we'll use the full journal name instead:
|
||||
elseif (!empty($row['publication'])) // publication (= journal) name
|
||||
$record .= " " . $row['publication'];
|
||||
|
||||
if ($row['online_publication'] == "yes") // this record refers to an online publication
|
||||
$record .= " [Internet]"; // NOTE: some of the above mentioned resources use "[serial online]", "[serial on the Internet]" or just "[online]" instead
|
||||
|
||||
// NOTE: the formatting of year/volume/issue is meant for journal articles (TODO: newspaper/magazine articles)
|
||||
if (!empty($row['year'])) // year
|
||||
$record .= ". " . $row['year'];
|
||||
|
||||
if ($row['online_publication'] == "yes") // append the current date if this record refers to an online publication
|
||||
$record .= " [cited " . date("Y M j") . "]";
|
||||
|
||||
if (!empty($row['volume']) || !empty($row['issue']))
|
||||
$record .= ";";
|
||||
|
||||
if (!empty($row['volume'])) // volume (=month)
|
||||
$record .= $row['volume'];
|
||||
|
||||
if (!empty($row['issue'])) // issue (=day)
|
||||
$record .= "(" . $row['issue'] . ")";
|
||||
|
||||
if (!empty($row['pages'])) // pages
|
||||
{
|
||||
if (!empty($row['year']) || !empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])) // only add ": " if either year, volume, issue, abbrev_journal or publication isn't empty
|
||||
$record .= ":";
|
||||
|
||||
$record .= formatPageInfo($row['pages'], $markupPatternsArray["endash"], "", "", "", "", "", "", true); // function 'formatPageInfo()' is defined in 'cite.inc.php'
|
||||
}
|
||||
|
||||
if ($row['online_publication'] == "yes") // this record refers to an online publication
|
||||
{
|
||||
// append an optional string (given in 'online_citation') plus the DOI (or URL):
|
||||
|
||||
if (!empty($row['online_citation'])) // online_citation
|
||||
{
|
||||
if (!empty($row['year']) || !empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])) // only add ":" or "," if either year, volume, issue, abbrev_journal or publication isn't empty
|
||||
{
|
||||
if (empty($row['pages']))
|
||||
$record .= ":"; // print instead of pages
|
||||
else
|
||||
$record .= ";"; // append to pages (TODO: not sure whether this is correct)
|
||||
}
|
||||
|
||||
$record .= $row['online_citation'];
|
||||
}
|
||||
|
||||
if (!empty($row['doi']) || !empty($row['url'])) // doi OR url
|
||||
{
|
||||
if (!empty($row['online_citation']) OR (empty($row['online_citation']) AND (!empty($row['year']) || !empty($row['volume']) || !empty($row['issue']) || !empty($row['abbrev_journal']) || !empty($row['publication'])))) // only add "." if online_citation isn't empty, or else if either year, volume, issue, abbrev_journal or publication isn't empty
|
||||
$record .= ".";
|
||||
|
||||
$record .= " Available from: " . $markupPatternsArray["underline-prefix"]; // NOTE: some of the above mentioned resources use "Available from: URL:http://..." instead
|
||||
|
||||
if (!empty($row['doi'])) // doi
|
||||
$uri = "http://dx.doi.org/" . $row['doi'];
|
||||
else // url
|
||||
$uri = $row['url'];
|
||||
|
||||
if ($encodeHTML)
|
||||
$record .= encodeHTML($uri);
|
||||
else
|
||||
$record .= $uri;
|
||||
|
||||
$record .= $markupPatternsArray["underline-suffix"];
|
||||
}
|
||||
}
|
||||
|
||||
if (!preg_match("/\. *$/", $record) AND ($row['online_publication'] != "yes"))
|
||||
$record .= "."; // NOTE: the examples in the above mentioned resources differ wildly w.r.t. whether the closing period should be omitted for online publications
|
||||
}
|
||||
|
||||
// --- BEGIN TYPE = ABSTRACT / BOOK CHAPTER / CONFERENCE ARTICLE ------------------------------------------------------------------------
|
||||
|
||||
elseif (preg_match("/^(Abstract|Book Chapter|Conference Article)$/", $row['type']))
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($row['author'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", ", // 5.
|
||||
"/ *, */", // 6.
|
||||
" ", // 7.
|
||||
" ", // 8.
|
||||
"", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"6", // 13.
|
||||
"6", // 14.
|
||||
", et al.", // 15.
|
||||
$encodeHTML // 16.
|
||||
);
|
||||
|
||||
if (!preg_match("/\. *$/", $author))
|
||||
$record .= $author . ".";
|
||||
else
|
||||
$record .= $author;
|
||||
}
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
if (!empty($row['author']))
|
||||
$record .= " ";
|
||||
|
||||
$record .= $row['title'];
|
||||
}
|
||||
|
||||
if ($row['type'] == "Abstract") // for abstracts, add "[abstract]" label
|
||||
$record .= " [abstract]";
|
||||
|
||||
|
||||
// From here on we'll assume that at least either the 'author' or the 'title' field did contain some contents
|
||||
// if this is not the case, the output string will begin with a space. However, any preceding/trailing whitespace will be removed at the cleanup stage (see below)
|
||||
|
||||
if (!empty($row['editor'])) // editor
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$editor = reArrangeAuthorContents($row['editor'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", ", // 5.
|
||||
"/ *, */", // 6.
|
||||
" ", // 7.
|
||||
" ", // 8.
|
||||
"", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"6", // 13.
|
||||
"6", // 14.
|
||||
", et al.", // 15.
|
||||
$encodeHTML // 16.
|
||||
);
|
||||
|
||||
if (!preg_match("/[?!.] *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " In: " . $editor . ", ";
|
||||
if (preg_match("/^[^;\r\n]+(;[^;\r\n]+)+$/", $row['editor'])) // there are at least two editors (separated by ';')
|
||||
$record .= "editors";
|
||||
else // there's only one editor (or the editor field is malformed with multiple editors but missing ';' separator[s])
|
||||
$record .= "editor";
|
||||
}
|
||||
|
||||
$publication = preg_replace("/[ \r\n]*\(Eds?:[^\)\r\n]*\)/i", "", $row['publication']);
|
||||
if (!empty($publication)) // publication
|
||||
{
|
||||
if (!preg_match("/[?!.] *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
if (empty($row['editor']))
|
||||
$record .= " In:";
|
||||
|
||||
$record .= " " . $publication;
|
||||
}
|
||||
|
||||
if (!empty($row['volume'])) // volume
|
||||
{
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " Vol " . $row['volume']; // TODO: not sure whether this is correct
|
||||
}
|
||||
|
||||
if (!empty($row['edition']) && !preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition'])) // edition
|
||||
{
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
if (preg_match("/^\d{1,3}$/", $row['edition'])) // if the edition field contains a number of up to three digits, we assume it's an edition number (such as "2nd ed.")
|
||||
{
|
||||
if ($row['edition'] == "2")
|
||||
$editionSuffix = "nd";
|
||||
elseif ($row['edition'] == "3")
|
||||
$editionSuffix = "rd";
|
||||
else
|
||||
$editionSuffix = "th";
|
||||
}
|
||||
else
|
||||
$editionSuffix = "";
|
||||
|
||||
if (!preg_match("/( ed\.?| edition)$/i", $row['edition']))
|
||||
$editionSuffix .= " ed.";
|
||||
|
||||
$record .= " " . $row['edition'] . $editionSuffix;
|
||||
}
|
||||
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
if (!empty($row['place'])) // place
|
||||
{
|
||||
// for places in the USA, format any two-letter postal code for the state (i.e. ensure upper case & wrap in parens, eg. "Boca Raton (FL)"):
|
||||
if (preg_match("/(.+?)[$punct$space]+($uspsStateAbbreviations)[$punct$space]*$/i$patternModifiers", $row['place']))
|
||||
$record .= " " . preg_replace("/(.+?)[$punct$space]+($uspsStateAbbreviations)[$punct$space]*$/ie$patternModifiers", "'\\1 ('.strtoupper('\\2').')'", $row['place']);
|
||||
else
|
||||
$record .= " " . $row['place'];
|
||||
}
|
||||
|
||||
if (!empty($row['publisher'])) // publisher
|
||||
{
|
||||
if (!empty($row['place']))
|
||||
$record .= ":";
|
||||
|
||||
$record .= " " . $row['publisher'];
|
||||
}
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
$record .= "; " . $row['year'];
|
||||
|
||||
if (!empty($row['pages'])) // pages
|
||||
$record .= ". " . formatPageInfo($row['pages'], $markupPatternsArray["endash"], "p. ", "p. ", "", "", "", "", true); // function 'formatPageInfo()' is defined in 'cite.inc.php'
|
||||
|
||||
if (!empty($row['abbrev_series_title']) OR !empty($row['series_title'])) // if there's either a full or an abbreviated series title
|
||||
{
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " (";
|
||||
|
||||
if (!empty($row['abbrev_series_title'])) // abbreviated series title
|
||||
$record .= preg_replace("/\./", "", $row['abbrev_series_title']); // no punctuation marks are used in the abbreviated series title, just spaces (TODO: smarten regex pattern)
|
||||
|
||||
// if there's no abbreviated series title, we'll use the full series title instead:
|
||||
elseif (!empty($row['series_title'])) // full series title
|
||||
$record .= $row['series_title'];
|
||||
|
||||
if (!empty($row['series_volume'])||!empty($row['series_issue']))
|
||||
$record .= "; ";
|
||||
|
||||
if (!empty($row['series_volume'])) // series volume
|
||||
$record .= "vol " . $row['series_volume'];
|
||||
|
||||
if (!empty($row['series_volume']) && !empty($row['series_issue']))
|
||||
$record .= "; "; // TODO: not sure whether this is correct
|
||||
|
||||
if (!empty($row['series_issue'])) // series issue (I'm not really sure if -- for this cite style -- the series issue should be rather omitted here)
|
||||
$record .= "no " . $row['series_issue']; // since a series volume should be prefixed with "vol", is it correct to prefix series issues with "no"?
|
||||
|
||||
$record .= ")";
|
||||
}
|
||||
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
}
|
||||
|
||||
// --- BEGIN TYPE = BOOK WHOLE / CONFERENCE VOLUME / JOURNAL / MANUAL / MANUSCRIPT / MAP / MISCELLANEOUS / PATENT / REPORT / SOFTWARE ---
|
||||
|
||||
else // if (preg_match("/Book Whole|Conference Volume|Journal|Manual|Manuscript|Map|Miscellaneous|Patent|Report|Software/", $row['type']))
|
||||
// note that this also serves as a fallback: unrecognized resource types will be formatted similar to whole books
|
||||
{
|
||||
if (!empty($row['author'])) // author
|
||||
{
|
||||
$author = preg_replace("/[ \r\n]*\(eds?\)/i", "", $row['author']);
|
||||
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$author = reArrangeAuthorContents($author, // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", ", // 5.
|
||||
"/ *, */", // 6.
|
||||
" ", // 7.
|
||||
" ", // 8.
|
||||
"", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"6", // 13.
|
||||
"6", // 14.
|
||||
", et al.", // 15.
|
||||
$encodeHTML // 16.
|
||||
);
|
||||
|
||||
// if the author is actually the editor of the resource we'll append ', ed' (or ', eds') to the author string:
|
||||
// [to distinguish editors from authors in the 'author' field, the 'modify.php' script does append ' (ed)' or ' (eds)' if appropriate,
|
||||
// so we're just checking for these identifier strings here. Alternatively, we could check whether the editor field matches the author field]
|
||||
if (preg_match("/[ \r\n]*\(ed\)/", $row['author'])) // single editor
|
||||
$author = $author . ", editor";
|
||||
elseif (preg_match("/[ \r\n]*\(eds\)/", $row['author'])) // multiple editors
|
||||
$author = $author . ", editors";
|
||||
|
||||
if (!preg_match("/\. *$/", $author))
|
||||
$record .= $author . ".";
|
||||
else
|
||||
$record .= $author;
|
||||
}
|
||||
|
||||
if (!empty($row['title'])) // title
|
||||
{
|
||||
if (!empty($row['author']))
|
||||
$record .= " ";
|
||||
|
||||
$record .= $row['title'];
|
||||
}
|
||||
|
||||
if ($row['type'] == "Software") // for software, add software label
|
||||
$record .= " [computer program]";
|
||||
|
||||
if (($row['online_publication'] == "yes") AND empty($row['thesis'])) // this record refers to an online publication (online theses will be handled further down below)
|
||||
$record .= " [Internet]"; // NOTE: some of the above mentioned resources use "[monograph online]", "[monograph on the Internet]" or just "[online]" instead
|
||||
|
||||
if (!empty($row['volume']) AND ($row['type'] != "Software")) // volume
|
||||
{
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " Vol " . $row['volume']; // TODO: not sure whether this is correct
|
||||
}
|
||||
|
||||
if (!empty($row['edition'])) // edition
|
||||
{
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
if ($row['type'] == "Software") // software edition (=version)
|
||||
{
|
||||
$record .= " Version " . $row['edition'];
|
||||
}
|
||||
elseif (!preg_match("/^(1|1st|first|one)( ed\.?| edition)?$/i", $row['edition'])) // edition
|
||||
{
|
||||
if (preg_match("/^\d{1,3}$/", $row['edition'])) // if the edition field contains a number of up to three digits, we assume it's an edition number (such as "2nd ed.")
|
||||
{
|
||||
if ($row['edition'] == "2")
|
||||
$editionSuffix = "nd";
|
||||
elseif ($row['edition'] == "3")
|
||||
$editionSuffix = "rd";
|
||||
else
|
||||
$editionSuffix = "th";
|
||||
}
|
||||
else
|
||||
$editionSuffix = "";
|
||||
|
||||
if (!preg_match("/( ed\.?| edition)$/i", $row['edition']))
|
||||
$editionSuffix .= " ed.";
|
||||
|
||||
$record .= " " . $row['edition'] . $editionSuffix;
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($row['editor']) && !preg_match("/[ \r\n]*\(eds?\)/", $row['author'])) // editor (if different from author, see note above regarding the check for ' (ed)' or ' (eds)')
|
||||
{
|
||||
// Call the 'reArrangeAuthorContents()' function (defined in 'include.inc.php') in order to re-order contents of the author field. Required Parameters:
|
||||
// 1. input: contents of the author field
|
||||
// 2. input: boolean value that specifies whether the author's family name comes first (within one author) in the source string
|
||||
// ('true' means that the family name is followed by the given name (or initials), 'false' if it's the other way around)
|
||||
//
|
||||
// 3. input: pattern describing old delimiter that separates different authors
|
||||
// 4. output: for all authors except the last author: new delimiter that separates different authors
|
||||
// 5. output: for the last author: new delimiter that separates the last author from all other authors
|
||||
//
|
||||
// 6. input: pattern describing old delimiter that separates author name & initials (within one author)
|
||||
// 7. output: for the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 8. output: for all authors except the first author: new delimiter that separates author name & initials (within one author)
|
||||
// 9. output: new delimiter that separates multiple initials (within one author)
|
||||
// 10. output: for the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 11. output: for all authors except the first author: boolean value that specifies if initials go *before* the author's name ['true'], or *after* the author's name ['false'] (which is the default in the db)
|
||||
// 12. output: boolean value that specifies whether an author's full given name(s) shall be shortened to initial(s)
|
||||
//
|
||||
// 13. output: if the total number of authors is greater than the given number (integer >= 1), only the number of authors given in (14) will be included in the citation along with the string given in (15); keep empty if all authors shall be returned
|
||||
// 14. output: number of authors (integer >= 1) that is included in the citation if the total number of authors is greater than the number given in (13); keep empty if not applicable
|
||||
// 15. output: string that's appended to the number of authors given in (14) if the total number of authors is greater than the number given in (13); the actual number of authors can be printed by including '__NUMBER_OF_AUTHORS__' (without quotes) within the string
|
||||
//
|
||||
// 16. output: boolean value that specifies whether the re-ordered string shall be returned with higher ASCII chars HTML encoded
|
||||
$editor = reArrangeAuthorContents($row['editor'], // 1.
|
||||
true, // 2.
|
||||
"/ *; */", // 3.
|
||||
", ", // 4.
|
||||
", ", // 5.
|
||||
"/ *, */", // 6.
|
||||
" ", // 7.
|
||||
" ", // 8.
|
||||
"", // 9.
|
||||
false, // 10.
|
||||
false, // 11.
|
||||
true, // 12.
|
||||
"6", // 13.
|
||||
"6", // 14.
|
||||
", et al.", // 15.
|
||||
$encodeHTML // 16.
|
||||
);
|
||||
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " " . $editor;
|
||||
if (preg_match("/^[^;\r\n]+(;[^;\r\n]+)+$/", $row['editor'])) // there are at least two editors (separated by ';')
|
||||
$record .= ", editors";
|
||||
else // there's only one editor (or the editor field is malformed with multiple editors but missing ';' separator[s])
|
||||
$record .= ", editor";
|
||||
}
|
||||
|
||||
if (!empty($row['thesis'])) // thesis
|
||||
{
|
||||
// TODO: do we need to use the term "[dissertation]" instead of "[Ph.D. thesis]", etc? What about other thesis types then?
|
||||
$record .= " [" . $row['thesis'];
|
||||
|
||||
if ($row['online_publication'] == "yes") // this record refers to an online thesis
|
||||
$record .= " on the Internet]";
|
||||
else
|
||||
$record .= "]";
|
||||
}
|
||||
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
if (!empty($row['place'])) // place
|
||||
{
|
||||
// for places in the USA, format any two-letter postal code for the state (i.e. ensure upper case & wrap in parentheses, eg. "Boca Raton (FL)"):
|
||||
if (preg_match("/(.+?)[$punct$space]+($uspsStateAbbreviations)[$punct$space]*$/i$patternModifiers", $row['place']))
|
||||
$record .= " " . preg_replace("/(.+?)[$punct$space]+($uspsStateAbbreviations)[$punct$space]*$/ie$patternModifiers", "'\\1 ('.strtoupper('\\2').')'", $row['place']);
|
||||
else
|
||||
$record .= " " . $row['place'];
|
||||
}
|
||||
|
||||
if (!empty($row['publisher'])) // publisher
|
||||
{
|
||||
if (!empty($row['place']))
|
||||
$record .= ":";
|
||||
|
||||
$record .= " " . $row['publisher'];
|
||||
}
|
||||
|
||||
$record .= ";";
|
||||
|
||||
if (!empty($row['year'])) // year
|
||||
$record .= " " . $row['year'];
|
||||
|
||||
if ($row['type'] == "Software") // for software, volume (=month) and issue (=day) information is printed after the year (TODO: not sure whether this is correct)
|
||||
{
|
||||
if (!empty($row['volume'])) // volume (=month)
|
||||
$record .= " " . $row['volume'];
|
||||
|
||||
if (!empty($row['issue'])) // issue (=day)
|
||||
$record .= " " . $row['issue'];
|
||||
}
|
||||
|
||||
if ($row['online_publication'] == "yes") // append the current date if this record refers to an online publication
|
||||
$record .= " [cited " . date("Y M j") . "]";
|
||||
|
||||
if (!empty($row['abbrev_series_title']) OR !empty($row['series_title'])) // if there's either a full or an abbreviated series title
|
||||
{
|
||||
if (!preg_match("@[?!.][ \"" . $markupPatternsArray["italic-suffix"] . "]*$@", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " (";
|
||||
|
||||
if (!empty($row['abbrev_series_title'])) // abbreviated series title
|
||||
$record .= preg_replace("/\./", "", $row['abbrev_series_title']); // no punctuation marks are used in the abbreviated series title, just spaces (TODO: smarten regex pattern)
|
||||
|
||||
// if there's no abbreviated series title, we'll use the full series title instead:
|
||||
elseif (!empty($row['series_title'])) // full series title
|
||||
$record .= $row['series_title'];
|
||||
|
||||
if (!empty($row['series_volume'])||!empty($row['series_issue']))
|
||||
$record .= "; ";
|
||||
|
||||
if (!empty($row['series_volume'])) // series volume
|
||||
$record .= "vol " . $row['series_volume'];
|
||||
|
||||
if (!empty($row['series_volume']) && !empty($row['series_issue']))
|
||||
$record .= "; "; // TODO: not sure whether this is correct
|
||||
|
||||
if (!empty($row['series_issue'])) // series issue (I'm not really sure if -- for this cite style -- the series issue should be rather omitted here)
|
||||
$record .= "no " . $row['series_issue']; // since a series volume should be prefixed with "vol", is it correct to prefix series issues with "no"?
|
||||
|
||||
$record .= ")";
|
||||
}
|
||||
|
||||
if ($row['online_publication'] == "yes" || $row['type'] == "Software") // this record refers to an online publication, or a computer program/software
|
||||
{
|
||||
// append an optional string (given in 'online_citation') plus the DOI (or URL):
|
||||
|
||||
if (!empty($row['online_citation'])) // online_citation
|
||||
{
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= $row['online_citation'];
|
||||
}
|
||||
|
||||
if (!empty($row['doi']) || !empty($row['url'])) // doi OR url
|
||||
{
|
||||
if (!preg_match("/\. *$/", $record))
|
||||
$record .= ".";
|
||||
|
||||
$record .= " Available from: " . $markupPatternsArray["underline-prefix"]; // NOTE: some of the above mentioned resources use "Available from: URL:http://..." instead
|
||||
|
||||
if (!empty($row['doi'])) // doi
|
||||
$uri = "http://dx.doi.org/" . $row['doi'];
|
||||
else // url
|
||||
$uri = $row['url'];
|
||||
|
||||
if ($encodeHTML)
|
||||
$record .= encodeHTML($uri);
|
||||
else
|
||||
$record .= $uri;
|
||||
|
||||
$record .= $markupPatternsArray["underline-suffix"];
|
||||
}
|
||||
}
|
||||
|
||||
if (!preg_match("/\. *$/", $record) AND ($row['online_publication'] != "yes") AND ($row['type'] != "Software"))
|
||||
$record .= "."; // NOTE: the examples in the above mentioned resources differ wildly w.r.t. whether the closing period should be omitted for online publications
|
||||
}
|
||||
|
||||
// --- BEGIN POST-PROCESSING -----------------------------------------------------------------------------------------------------------
|
||||
|
||||
// do some further cleanup:
|
||||
$record = trim($record); // remove any preceding or trailing whitespace
|
||||
|
||||
|
||||
return $record;
|
||||
}
|
||||
|
||||
// --- END CITATION STYLE ---
|
||||
?>
|
||||
Reference in New Issue
Block a user