Browse Source

bib2links is now encapsulated to allow user-defined functions to be used via bibtexbrowser.local.php

pull/13/merge^2
Matthieu Guillaumin 11 years ago
parent
commit
1b7c6cceb4
  1. 149
      bibtexbrowser.php

149
bibtexbrowser.php

@ -87,6 +87,8 @@ function bibtexbrowser_configure($key, $value) {
@define('BIBTEXBROWSER_NO_DEFAULT', false);
// BIBTEXBROWSER_LINK_STYLE defines which function to use to display the links of a bibtex entry
@define('BIBTEXBROWSER_LINK_STYLE','bib2links_default');
// do we add [bibtex] links ?
// suggested by Sascha Schnepp
@define('BIBTEXBROWSER_BIBTEX_LINKS',true);
@ -1053,12 +1055,75 @@ class BibEntry {
return BIBTEXBROWSER_URL.'?'.createQueryString(array(Q_KEY=>$this->getKey(), Q_FILE=>$this->filename));
}
/** returns a "[pdf]" link if relevant */
/** Read the bibtex field $bibfield and return a link with icon or text
* e.g. given the bibtex entry: @article{myarticle, pdf={myarticle.pdf}},
* $bibtexentry->getLink('pdf') creates a link to myarticle.pdf using the text '[pdf]'.
* $bibtexentry->getLink($bibfield,$icon,$def) specifies the icon url $icon and default text $def.
*/
function getLink($bibfield,$iconurl=NULL,$def=NULL) {
$show = true;
if ( $bibfield === 'pdf' || $bibfield === 'url' ) { $show = BIBTEXBROWSER_PDF_LINKS; };
if ($def==NULL) { $def=$bibfield; }
$str = $this->getIconOrTxt($def,$iconurl);
if ( $show && $this->hasField($bibfield)) {
return ' <a'.(BIBTEXBROWSER_BIB_IN_NEW_WINDOW?' target="_blank" ':'').' href="'.$this->getField($bibfield).'">'.$str.'</a>';
}
return '';
}
/* a few specializations of getLink */
/** returns a "[url]" link if relevant. modified to exploit the new method, while keeping backward compatibility */
function getUrlLink() {
if ($this->hasField('url')) return ' <a'.(BIBTEXBROWSER_BIB_IN_NEW_WINDOW?' target="_blank" ':'').' href="'.$this->getField('url').'">[pdf]</a>';
return $this->getLink('url');
}
/** returns a "[bib]" link if relevant */
function getBibLink($iconurl=NULL) {
if (BIBTEXBROWSER_BIBTEX_LINKS) {
$bibstr = $this->getIconOrTxt('bibtex',$iconurl);
$href = 'href="'.$this->getURL().'"';
$link = "<a".(BIBTEXBROWSER_BIB_IN_NEW_WINDOW?' target="_blank" ':'')." class=\"biburl\" title=\"".$this->getKey()."\" {$href}>$bibstr</a>";
return $link;
} else {
return '';
}
}
/** DOI are a special kind of links, where the url depends on the doi */
function getDoiLink($iconurl=NULL) {
$str = $this->getIconOrTxt('doi',$iconurl);
if (BIBTEXBROWSER_DOI_LINKS && $this->hasField('doi')) {
return ' <a href="http://dx.doi.org/'.$this->getField('doi').'">'.$str.'</a>';
}
return '';
}
/** GS are a special kind of links, where the url depends on the google scholar id */
function getGSLink($iconurl=NULL) {
$str = $this->getIconOrTxt('cites',$iconurl);
// Google Scholar ID
if (BIBTEXBROWSER_GSID_LINKS && $this->hasField('gsid')) {
return ' <a href="http://scholar.google.com/scholar?cites='.$this->getField("gsid").'">'.$str.'</a>';
}
return '';
}
/** replace [$ext] with an icon whose url is defined in a string
* e.g. getIconOrTxt('pdf') will print '[pdf]'
* or getIconOrTxt('pdf','http://link/to/icon.png') will use the icon linked by the url, or print '[pdf']
* if the url does not point to a valid file (using the "alt" property of the "img" html tag)
*/
function getIconOrTxt($txt,$iconurl=NULL) {
if ( $iconurl==NULL ) {
$str='['.$txt.']';
} else {
$str='<img class="icon" src="'.$iconurl.'" alt="['.$txt.']" title="'.$txt.'"/>';
}
return $str;
}
/** Reruns the abstract */
function getAbstract() {
if ($this->hasField('abstract')) return $this->getField('abstract');
@ -1236,6 +1301,16 @@ class BibEntry {
return $this->formatAuthor($authors[0]) . $etal;
}
/**
* Returns a compacted string form of author names by throwing away
* all author names except for the first one and appending ", et al."
*/
function getVeryCompactedAuthors(){
$authors = $this->getRawAuthors();
$etal = count($authors) > 1 ? ', et al.' : '';
list($firstname, $lastname) = splitFullName($authors[0]);
return $lastname . $etal;
}
/** add the link to the homepage if it is defined in a string
* e.g. @string{hp_MartinMonperrus="http://www.monperrus.net/martin"}
@ -1391,7 +1466,7 @@ class BibEntry {
break;
}
$result .= bib2html($this);
$result .= $this->bib2links();
$result .= bib2links($this);
switch(BIBTEXBROWSER_LAYOUT) { // close row
case 'list':
$result .= '</li>'."\n";
@ -1476,37 +1551,6 @@ class BibEntry {
return '<a name="'.$this->getRawAbbrv().'"></a>';
}
/** returns a collection of links for the given bibtex entry
* e.g. [bibtex] [doi][pdf]
*/
function bib2links() {
$href = 'href="'.$this->getURL().'"';
$str = '';
if (BIBTEXBROWSER_BIBTEX_LINKS) {
// we add biburl and title to be able to retrieve this important information
// using Xpath expressions on the XHTML source
$str .= " <a".(BIBTEXBROWSER_BIB_IN_NEW_WINDOW?' target="_blank" ':'')." class=\"biburl\" title=\"".$this->getKey()."\" {$href}>[bibtex]</a>";
}
if (BIBTEXBROWSER_PDF_LINKS) {
// returns an empty string if no url present
$str .= $this->getUrlLink();
}
if (BIBTEXBROWSER_DOI_LINKS && $this->hasField('doi')) {
$str .= ' <a href="http://dx.doi.org/'.$this->getField("doi").'">[doi]</a>';
}
// Google Scholar ID
if (BIBTEXBROWSER_GSID_LINKS && $this->hasField('gsid')) {
$str .= ' <a href="http://scholar.google.com/scholar?cites='.$this->getField("gsid").'">[cites]</a>';
}
return $str;
}
/**
@ -1581,6 +1625,37 @@ function get_HTML_tag_for_layout() {
return $tag;
}
/** returns a collection of links for the given bibtex entry
* e.g. [bibtex] [doi][pdf]
*/
function bib2links_default(&$bibentry) {
$href = 'href="'.$bibentry->getURL().'"';
$str = '';
if (BIBTEXBROWSER_BIBTEX_LINKS) {
// we add biburl and title to be able to retrieve this important information
// using Xpath expressions on the XHTML source
$str .= " <a".(BIBTEXBROWSER_BIB_IN_NEW_WINDOW?' target="_blank" ':'')." class=\"biburl\" title=\"".$bibentry->getKey()."\" {$href}>[bibtex]</a>";
}
if (BIBTEXBROWSER_PDF_LINKS) {
// returns an empty string if no url present
$str .= $bibentry->getUrlLink();
}
if (BIBTEXBROWSER_DOI_LINKS && $bibentry->hasField('doi')) {
$str .= ' <a href="http://dx.doi.org/'.$bibentry->getField("doi").'">[doi]</a>';
}
// Google Scholar ID
if (BIBTEXBROWSER_GSID_LINKS && $bibentry->hasField('gsid')) {
$str .= ' <a href="http://scholar.google.com/scholar?cites='.$bibentry->getField("gsid").'">[cites]</a>';
}
return $str;
}
/** prints the header of a layouted HTML, depending on BIBTEXBROWSER_LAYOUT e.g. <TABLE> */
function print_header_layout() {
@ -1598,6 +1673,12 @@ function bib2html(&$bibentry) {
return $function($bibentry);
}
/** this function encapsulates the user-defined name for bib2links */
function bib2links(&$bibentry) {
$function = BIBTEXBROWSER_LINK_STYLE;
return $function($bibentry);
}
/** encapsulates the user-defined sections. @nodoc */
function _DefaultBibliographySections() {
$function = BIBLIOGRAPHYSECTIONS;

Loading…
Cancel
Save