diff --git a/bibtexbrowser.php b/bibtexbrowser.php
index 45f7513..05a650a 100644
--- a/bibtexbrowser.php
+++ b/bibtexbrowser.php
@@ -3,6 +3,7 @@
URL: http://www.monperrus.net/martin/bibtexbrowser/
Feedback & Bug Reports: martin.monperrus@gmail.com
+(C) 2013 Matthieu Guillaumin
(C) 2006-2012 Martin Monperrus
(C) 2005-2006 The University of Texas at El Paso / Joel Garcia, Leonardo Ruiz, and Yoonsik Cheon
This program is free software; you can redistribute it and/or
@@ -117,6 +118,8 @@ define('BIBTEXBROWSER','v20121205');
@define('METADATA_DC',true);
@define('METADATA_EPRINTS',false);
+@define('LAYOUT','table'); // may be table/list/deflist. defines the HTML rendering options (
, /, , resp.). 'list' only works with 'ABBRV_TYPE'='index' (ordered list) and 'none' (unordered list, the default if another choice than 'list' is made).
+
// in embedded mode, we still need a URL for displaying bibtex entries alone
// this is usually resolved to bibtexbrowser.php
// but can be overridden in bibtexbrowser.local.php
@@ -240,7 +243,7 @@ function _zetDB($bibtex_filenames) {
&& is_readable($compiledbib)
&& filesize($compiledbib)>0
) {
- $f = fopen($compiledbib,'r');
+ $f = fopen($compiledbib,'r+'); // my Unix seems to consider flock as a writing operation
//we use a lock to avoid that a call to bibbtexbrowser made while we write the object loads an incorrect object
if (flock($f,LOCK_EX)) {
$s = filesize($compiledbib);
@@ -1243,21 +1246,29 @@ class BibEntry {
}
/** Returns the abbreviation. */
- function getAbbrv() {
+ function getRawAbbrv() {
if (ABBRV_TYPE == 'index') return $this->index;
if (ABBRV_TYPE == 'none') return '';
- if (ABBRV_TYPE == 'key') return '['.$this->getKey().']';
- if (ABBRV_TYPE == 'year') return '['.$this->getYear().']';
+ if (ABBRV_TYPE == 'key') return $this->getKey();
+ if (ABBRV_TYPE == 'year') return $this->getYear();
if (ABBRV_TYPE == 'x-abbrv') {
if ($this->hasField('x-abbrv')) {return $this->getField('x-abbrv');}
return $this->abbrv;
}
-
// otherwise it is a user-defined function in bibtexbrowser.local.php
$f = ABBRV_TYPE;
return $f($this);
}
+ /** Returns the abbreviation. */
+ function getAbbrv() {
+ $abbrv = $this->getRawAbbrv();
+ if ( ABBRV_TYPE == 'key' || ABBRV_TYPE == 'year' || ( ABBRV_TYPE == 'index' && LAYOUT != 'list' ) ) {
+ $abbrv = '['.$abbrv.']';
+ }
+ return $abbrv;
+ }
+
/** Sets the abbreviation (e.g. [OOPSLA] or [1]) */
function setAbbrv($abbrv) {
@@ -1296,37 +1307,45 @@ class BibEntry {
}
- /** Outputs an HTML line ()with two TDS inside
- */
- function toTR() {
- echo '
';
- echo '';
- //echo '';
-
- echo $this->getAbbrv().' | ';
- echo '';
- echo bib2html($this);
-
- $href = 'href="'.$this->getURL().'"';
-
- if (BIBTEXBROWSER_BIBTEX_LINKS) {
- // we add biburl and title to be able to retrieve this important information
- // using Xpath expressions on the XHTML source
- echo " getKey()."\" {$href}>[bibtex]";
- }
-
- // returns an empty string if no url present
- echo $this->getUrlLink();
+ /** Outputs HTML line according to layout */
+ function toHTML() {
+ switch(LAYOUT) { // open row
+ case 'list':
+ echo '- ';
+ break;
+ case 'table':
+ echo '
';
+ break;
+ case 'deflist':
+ echo '- '; break;
+ }
+ $this->anchor();
+ switch(LAYOUT) { // close bibref and open bibitem
+ case 'table':
+ echo $this->getAbbrv().'
| ';
+ break;
+ case 'deflist':
+ echo $this->getAbbrv().'- ';
+ break;
+ }
+ echo bib2html($this);
+ echo bib2links($this);
+ switch(LAYOUT) { // close row
+ case 'list':
+ echo '';
+ break;
+ case 'table':
+ echo '
| ';
+ break;
+ case 'deflist':
+ echo '';
+ break;
+ }
+ }
- if ($this->hasField('doi')) {
- echo ' [doi]';
- }
-
- // Google Scholar ID
- if ($this->hasField('gsid')) {
- echo ' [cites]';
- }
- echo " |
\n";
+ /** Create the entry anchor */
+ function anchor() {
+ echo '';
}
/** Outputs an coins URL: see http://ocoins.info/cobg.html
@@ -1436,12 +1455,63 @@ class BibEntry {
}
+function layoutHeaderHTML() {
+ $tag = '';
+ switch(LAYOUT) { /* switch for different layouts */
+ case 'list':
+ if (ABBRV_TYPE=='index') {
+ $tag='ol';
+ } else { // assume none
+ $tag='ul';
+ }
+ break;
+ case 'table':
+ $tag = 'table';
+ break;
+ case 'deflist':
+ $tag = 'div';
+ break;
+ default:
+ die('Unknown LAYOUT');
+ }
+ echo '<' . $tag . ' class="result">';
+ return $tag;
+}
+
+function layoutFooterHTML($tag) {
+ echo '' . $tag . '>';
+}
+
/** this function encapsulates the user-defined name for bib to HTML*/
function bib2html(&$bibentry) {
$function = BIBLIOGRAPHYSTYLE;
return $function($bibentry);
}
+function bib2links(&$bibentry) {
+ $href = 'href="'.$bibentry->getURL().'"';
+
+ 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 .= " getKey()."\" {$href}>[bibtex]";
+ }
+
+ // returns an empty string if no url present
+ $str .= $bibentry->getUrlLink();
+
+ if ($bibentry->hasField('doi')) {
+ $str .= ' [doi]';
+ }
+
+ // Google Scholar ID
+ if ($bibentry->hasField('gsid')) {
+ $str .= ' [cites]';
+ }
+
+ return $str;
+}
+
/** encapsulates the user-defined sections. @nodoc */
function _DefaultBibliographySections() {
$function = BIBLIOGRAPHYSECTIONS;
@@ -2301,21 +2371,19 @@ class SimpleDisplay {
echo 'Options: '.@implode(',',$this->options).'
';
}
- ?>
+ $tag = layoutHeaderHTML();
-
- entries);
$i=0;
foreach ($this->entries as $bib) {
- // by default, index are in decrasing order
+ // by default, index are in decreasing order
// so that when you add a publicaton recent , the indices of preceding publications don't change
- $bib->setIndex('['.($count-($i++)).']');
- $bib->toTR();
+ $bib->setIndex($count-($i++));
+ $bib->toHTML();
} // end foreach
- ?>
-
- 0) {
echo "\n".''."\n";
- echo ''."\n";
+ $tag = layoutHeaderHTML();
- // by default the abbreviation is incermented over all
- // searches
+ // by default the abbreviation is incremented over all searches
// since we don't know before hand all section, we can not index in decreasing order
static $count;
if ($count == NULL) { $count = 1; } // init
$id = $count;
foreach ($entries as $bib) {
- $bib->setIndex('['.($id++).']');
- $bib->toTR();
+ $bib->setIndex($id++);
+ $bib->toHTML();
} // end foreach
$count = @$count + count($entries);
- echo '
';
+ layoutFooterHTML($tag);
}
}
@@ -2397,7 +2464,7 @@ class AcademicDisplay {
foreach (_DefaultBibliographySections() as $section) {
$this->search2html($section['query'],$section['title']);
- }
+ }
}
}
@@ -3176,18 +3243,18 @@ class PagedDisplay {
}
$this->menu($less, $more);
- echo '';
+ $tag = layoutHeaderHTML();
for ($i = 0; $i < PAGE_SIZE; $i++) {
$index = ($this->page-1)*PAGE_SIZE + $i;
if (isset($this->entries[$index])) {
$bib = $this->entries[$index];
- $bib->toTR();
+ $bib->toHTML();
} else {
//break;
}
} // end foreach
- echo '
';
+ layoutFooterHTML($tag);
$this->menu($less, $more);
}
@@ -3478,7 +3545,7 @@ class Dispatcher {
function keywords() { $this->query[Q_TAG]=$_GET[Q_TAG]; }
- function author() {
+ function author() {
// Friday, October 29 2010
// changed from 'author' to '_author'
// in order to search at the same time "Joe Dupont" an "Dupont, Joe"
@@ -3573,4 +3640,4 @@ class Dispatcher {
$class = BIBTEXBROWSER_MAIN;// extension point
$main = new $class();
$main->main();
-?>
\ No newline at end of file
+?>