public class CifDataReader
extends java.lang.Object
Modifier and Type | Field and Description |
---|---|
(package private) java.util.Map<java.lang.String,java.lang.Object> |
allData |
private java.io.BufferedReader |
br |
int |
cch |
(package private) java.util.Map<java.lang.String,java.lang.Object> |
data |
int |
fieldCount |
java.lang.StringBuffer |
fileHeader |
int |
ich |
int |
ichPeeked |
private boolean |
isHeader |
private java.lang.String |
line |
java.lang.String[] |
loopData |
private JmolLineReader |
reader
A special tokenizer class for dealing with quoted strings in CIF files.
|
java.lang.String |
str |
java.lang.String |
strPeeked |
boolean |
wasUnQuoted |
Constructor and Description |
---|
CifDataReader(java.io.BufferedReader br) |
CifDataReader(JmolLineReader reader) |
Modifier and Type | Method and Description |
---|---|
java.lang.String |
fullTrim(java.lang.String str)
specially for names that might be multiline
|
private java.util.Map<java.lang.String,java.lang.Object> |
getAllCifData()
reads all Cif Data for a reader defined in the constructor
|
private void |
getCifLoopData() |
boolean |
getData()
general reader for loop data
fills loopData with fieldCount fields
|
java.lang.String |
getFileHeader() |
java.lang.String |
getNextDataToken()
first checks to see if the next token is an unquoted
control code, and if so, returns null
|
java.lang.String |
getNextToken() |
java.lang.String |
getTokenPeeked() |
private boolean |
hasMoreTokens() |
private java.lang.String |
nextToken()
assume that hasMoreTokens() has been called and that
ich is pointing at a non-white character.
|
java.lang.String |
peekToken()
just look at the next token.
|
static java.util.Map<java.lang.String,java.lang.Object> |
readCifData(java.io.BufferedReader br) |
java.lang.String |
readLine() |
private void |
setString(java.lang.String str)
sets a string to be parsed from the beginning
|
private java.lang.String |
setStringNextLine()
sets the string for parsing to be from the next line
when the token buffer is empty, and if ';' is at the
beginning of that line, extends the string to include
that full multiline string.
|
private JmolLineReader reader
regarding the treatment of single quotes vs. primes in cif file, PMR wrote:
* There is a formal grammar for CIF (see http://www.iucr.org/iucr-top/cif/index.html) which confirms this. The textual explanation is
14. Matching single or double quote characters (' or ") may be used to bound a string representing a non-simple data value provided the string does not extend over more than one line.
15. Because data values are invariably separated from other
tokens in the file by white space, such a quote-delimited
character string may contain instances of the character used
to delimit the string provided they are not followed by white
space. For example, the data item
_example 'a dog's life'
is legal; the data value is a dog's life.
[PMR - the terminating character(s) are quote+whitespace.
That would mean that:
_example 'Jones' life'
would be an error
The CIF format was developed in that late 1980's under the aegis of the International Union of Crystallography (I am a consultant to the COMCIFs committee). It was ratified by the Union and there have been several workshops. mmCIF is an extension of CIF which includes a relational structure. The formal publications are:
Hall, S. R. (1991). "The STAR File: A New Format for Electronic Data Transfer and Archiving", J. Chem. Inform. Comp. Sci., 31, 326-333. Hall, S. R., Allen, F. H. and Brown, I. D. (1991). "The Crystallographic Information File (CIF): A New Standard Archive File for Crystallography", Acta Cryst., A47, 655-685. Hall, S.R. & Spadaccini, N. (1994). "The STAR File: Detailed Specifications," J. Chem. Info. Comp. Sci., 34, 505-508.
private java.io.BufferedReader br
private java.lang.String line
public java.lang.String str
public int ich
public int cch
public boolean wasUnQuoted
public java.lang.String strPeeked
public int ichPeeked
public int fieldCount
public java.lang.String[] loopData
public java.lang.StringBuffer fileHeader
private boolean isHeader
java.util.Map<java.lang.String,java.lang.Object> data
java.util.Map<java.lang.String,java.lang.Object> allData
public CifDataReader(JmolLineReader reader)
public CifDataReader(java.io.BufferedReader br)
public java.lang.String getFileHeader()
public static java.util.Map<java.lang.String,java.lang.Object> readCifData(java.io.BufferedReader br)
private java.util.Map<java.lang.String,java.lang.Object> getAllCifData()
public java.lang.String readLine()
public boolean getData() throws java.lang.Exception
java.lang.Exception
public java.lang.String getNextToken() throws java.lang.Exception
java.lang.Exception
private void setString(java.lang.String str)
str
- private java.lang.String setStringNextLine() throws java.lang.Exception
java.lang.Exception
private boolean hasMoreTokens()
private java.lang.String nextToken()
public java.lang.String getNextDataToken() throws java.lang.Exception
java.lang.Exception
public java.lang.String peekToken() throws java.lang.Exception
java.lang.Exception
public java.lang.String getTokenPeeked()
public java.lang.String fullTrim(java.lang.String str)
str
- private void getCifLoopData() throws java.lang.Exception
java.lang.Exception