Browse Source

*** empty log message ***

replace/c24a8d1de403113542ba0936e844151de2785013
Martin Monperrus 18 years ago
parent
commit
ae69f3744d
  1. 74
      bibtexbrowser.php

74
bibtexbrowser.php

@ -3,9 +3,10 @@
* of the University of Texas at El Paso. * of the University of Texas at El Paso.
* Demonstration site: https://www.ensieta.fr/~monperma/bibtexbrowser.php * Demonstration site: https://www.ensieta.fr/~monperma/bibtexbrowser.php
* Version : __VERSION__ * Version : __VERSION__
* Don't hesitate to contact me :-)
* *
* (C) 2005-2006 The University of Texas at El Paso / Joel Garcia, Leonardo Ruiz, and Yoonsik Cheon * (C) 2005-2006 The University of Texas at El Paso / Joel Garcia, Leonardo Ruiz, and Yoonsik Cheon
* (C) 2006-2007 Martin Monperrus
* (C) 2006-2007-2008 Martin Monperrus
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the * published by the Free Software Foundation; either version 2 of the
@ -19,41 +20,31 @@
* and you can search any string in it. * and you can search any string in it.
* *
* "PHP BibTeX Database Manager", bibadmin * "PHP BibTeX Database Manager", bibadmin
* Unlike them, bibtexbrowser does not need a MySQL database. Furthermore, they are made for
* managing bibliographies and not only browsing them.
* Unlike them, bibtexbrowser does not need a MySQL database.
* *
* SimplyBibtex has the same spirit, makes different architectural and presentation choices, has
* editing features
* SimplyBibtex has the same spirit and makes different architectural and presentation choices
* but bibtexbroswer is much more lightweight (just one file!!)
* *
* Misc: a matlab script is similar !! http://www.sat.ltu.se/publications/publications.m * Misc: a matlab script is similar !! http://www.sat.ltu.se/publications/publications.m
* *
*
* Warning : the parser has some limitations
* please follow the best practices for bib entries
* @book{discours-de-la-methode,
* author = "René Descartes", %% one attribute per line
* title = "Discours de la M{\'{e}}thode",
* } %% closed with a } alone on a line
* The next release will be based on a regular, comprehensive parser
*
* USAGE: * USAGE:
* *
* <URL-to-directory>/bibtexbrowser.php
* /bibtexbrowser.php
* displays the menu and all entries without filtering from the $filename hardcoded in the script * displays the menu and all entries without filtering from the $filename hardcoded in the script
* *
* <URL-to-directory>/bibtexbrowser.php?bib=bibfile.bib
* /bibtexbrowser.php?bib=bibfile.bib
* displays the menu and all entries without filtering from the file bibfile.bib * displays the menu and all entries without filtering from the file bibfile.bib
* *
* <URL-to-directory>/bibtexbrowser.php?bib=bibfile.bib&all
* /bibtexbrowser.php?bib=bibfile.bib&all
* displays all entries * displays all entries
* *
* <URL-to-directory>/bibtexbrowser.php?bib=bibfile.bib&year=2004
* /bibtexbrowser.php?bib=bibfile.bib&year=2004
* displays all entries from year 2004 * displays all entries from year 2004
* *
* <URL-to-directory>/bibtexbrowser.php?bib=bibfile.bib&author="James+Russel"
* /bibtexbrowser.php?bib=bibfile.bib&author="James+Russel"
* displays all entries from author James Russel * displays all entries from author James Russel
* *
* <URL-to-directory>/bibtexbrowser.php?bib=bibfile.bib&tag=france
* /bibtexbrowser.php?bib=bibfile.bib&tag=france
* displays all entries with the keyword france * displays all entries with the keyword france
* @book{discours-de-la-methode, * @book{discours-de-la-methode,
* author = "René Descartes", * author = "René Descartes",
@ -86,6 +77,7 @@ define('Q_TYPE_PAGE', 'type_page');
define('Q_ALL', 'all'); define('Q_ALL', 'all');
define('Q_ENTRY', 'entry'); define('Q_ENTRY', 'entry');
define('Q_KEY', 'key');
define('Q_SEARCH', 'search'); define('Q_SEARCH', 'search');
define('Q_RESULT', 'result'); define('Q_RESULT', 'result');
@ -147,7 +139,7 @@ class BibParser {
$file = fopen($filename, 'r'); $file = fopen($filename, 'r');
$entry =$this->parseEntry($file); $entry =$this->parseEntry($file);
while ($entry) { while ($entry) {
$this->bibdb[$entry->getId()] = $entry;
$this->bibdb[$entry->getKey()] = $entry;
//if ($entry->getId() >= 500) { return; } // !FIXME! //if ($entry->getId() >= 500) { return; } // !FIXME!
$entry =$this->parseEntry($file); $entry =$this->parseEntry($file);
//print_r($entry); //print_r($entry);
@ -172,10 +164,11 @@ class BibParser {
return NULL; return NULL;
} }
$line = trim($raw_line); $line = trim($raw_line);
if (ereg("^@.*{", $line)) {
//echo 'NEW: ' . $line . "\n";
if (ereg("^[[:space:]]*@.*{[[:space:]]*([^,]*)", $line,$regs)) {
//echo 'NEW: ' . $regs[1] . "\n";
$type = trim(substr($line, 1, strpos($line,'{') - 1)); $type = trim(substr($line, 1, strpos($line,'{') - 1));
$fields = array(); $fields = array();
$fields['key']= $regs[1];
$raw_bib = $raw_line; $raw_bib = $raw_line;
break; break;
} }
@ -347,6 +340,11 @@ class BibEntry {
return 'Unknown'; return 'Unknown';
} }
/** Returns the key of this entry */
function getKey() {
return $this->getField('key');
}
/** Returns the title of this entry? */ /** Returns the title of this entry? */
function getTitle() { function getTitle() {
return $this->getField('title'); return $this->getField('title');
@ -371,8 +369,8 @@ class BibEntry {
return $this->id; return $this->id;
} }
/** Returns the verbatim text of this bib entry. */
function getText() { function getText() {
/** Returns the verbatim text of this bib entry. */
return $this->text; return $this->text;
} }
@ -564,6 +562,10 @@ else $page = 1;
$result = new SingleResultDisplay( $result = new SingleResultDisplay(
$this->db->getEntry( $this->db->getEntry(
$_GET[Q_ENTRY])); $_GET[Q_ENTRY]));
} else if (isset($_GET[Q_KEY])){
$result = new SingleResultDisplay(
$this->db->getEntryByKey(
urldecode($_GET[Q_KEY])));
} else if (isset($_GET[Q_SEARCH])){ // search? } else if (isset($_GET[Q_SEARCH])){ // search?
$to_find = $_GET[Q_SEARCH]; $to_find = $_GET[Q_SEARCH];
$searched = $this->db->search($to_find); $searched = $this->db->search($to_find);
@ -802,9 +804,10 @@ class ResultDisplay {
if ($index >= $startIndex && $index < $endIndex) { if ($index >= $startIndex && $index < $endIndex) {
$author = compactAuthor($bib->getAuthor()); $author = compactAuthor($bib->getAuthor());
$id = $bib->getId(); $id = $bib->getId();
$key = $bib->getKey();
$title = $bib->getField(TITLE); $title = $bib->getField(TITLE);
$type = $bib->getType(); $type = $bib->getType();
$href = makeHref(array(Q_ENTRY => $id));
$href = makeHref(array(Q_KEY => urlencode($key)));
?> ?>
<tr> <tr>
<td class="a_name"> <td class="a_name">
@ -986,11 +989,6 @@ class BibDataBase {
return $result; return $result;
} }
/** Given its ID, return the bib entry. */
function getEntry($id) {
return $this->bibdb[$id];
}
/** Returns an array containing all the bib types (strings). */ /** Returns an array containing all the bib types (strings). */
function getTypes() { function getTypes() {
$result = array(); $result = array();
@ -1050,6 +1048,20 @@ class BibDataBase {
return $result; return $result;
} }
/** Given its ID, return the bib entry. */
function getEntry($id){
foreach($this->bibdb as $bib) {
if($bib->getId() == $id)
return $bib;
}
return null;
}
/** Given its key, return the bib entry. */
function getEntryByKey($key) {
return $this->bibdb[$key];
}
/** /**
* Returns an array containing all bib entries matching the given * Returns an array containing all bib entries matching the given
* type. * type.
@ -1195,7 +1207,7 @@ $result = $_SESSION['main']->mainVC();
<title> <title>
<? <?
if ($result != null) echo $result->header.' in '.$filename; if ($result != null) echo $result->header.' in '.$filename;
else echo 'You are browsing '.$filename.' with bibtexbrowser v__VERSION__';
else echo 'You are browsing '.$filename.' with bibtexbrowser';
?> ?>
</title> </title>

Loading…
Cancel
Save