/* Copyright (C) 2003-2011 JabRef contributors.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package net.sf.jabref.imports;
import java.io.BufferedReader;
import java.io.FilterReader;
import java.io.IOException;
import java.io.Reader;
/**
*
* Warning -- it is not a generic filter, only read is implemented!
*
* @author Fedor Bezrukov
*
* @version $Id$
*
* TODO: Fix grammar in bibtex entries -- it ma return invalid bibkeys (with space)
*
*/
public class SPIRESBibtexFilterReader extends FilterReader {
protected BufferedReader in;
private String line;
private int pos;
private boolean pre;
SPIRESBibtexFilterReader(Reader _in) {
super(_in);
in = new BufferedReader(_in);
pos=-1;
pre=false;
}
private String readpreLine() throws IOException {
String l;
do {
l=in.readLine();
if (l==null)
return null;
if (l.equals("<pre>")) {
pre = true;
l=in.readLine();
}
if (l.equals("</pre>"))
pre = false;
} while (!pre);
return l;
}
private String fixBibkey(String in) {
if (in== null)
return null;
//System.out.println(in);
if ( in.matches("@Article\\{.*,") ) {
//System.out.println(in.replace(' ','_'));
return in.replace(' ', '_');
} else
return in;
}
public int read() throws IOException {
if ( pos<0 ) {
line=fixBibkey(readpreLine());
pos=0;
if ( line == null )
return -1;
}
if ( pos>=line.length() ) {
pos=-1;
return '\n';
}
return line.charAt(pos++);
}
}