Revision: 5128
Author: hansonr
Date: 2006-05-17 06:17:27 -0700 (Wed, 17 May 2006)
ViewCVS: http://svn.sourceforge.net/jmol/?rev=5128&view=rev
Log Message:
-----------
bob200603 two CIF reader bugs corrected (NEEDED IN TRUNK STILL)
for incorrect reading of loop data and for neglecting semicolon-quoted strings
Modified Paths:
--------------
branches/bob200603/Jmol/src/org/jmol/adapter/smarter/CifReader.java
Modified: branches/bob200603/Jmol/src/org/jmol/adapter/smarter/CifReader.java
===================================================================
--- branches/bob200603/Jmol/src/org/jmol/adapter/smarter/CifReader.java
2006-05-16 16:57:38 UTC (rev 5127)
+++ branches/bob200603/Jmol/src/org/jmol/adapter/smarter/CifReader.java
2006-05-17 13:17:27 UTC (rev 5128)
@@ -96,8 +96,14 @@
modelNumber = 0;
boolean skipping = false;
boolean iHaveDesiredModel = false;
-
+ boolean inSemicolonString = false;
while (line != null) {
+ if (line.startsWith(";"))
+ inSemicolonString = ! inSemicolonString;
+ if (inSemicolonString) {
+ line = reader.readLine();
+ continue;
+ }
if (line.startsWith("loop_")) {
if (!skipping) {
processLoopBlock();
@@ -268,7 +274,8 @@
char ch;
while (line != null && (line = line.trim()).length() > 0
&& (ch = line.charAt(0)) != '_' && ch != '#'
- && !line.startsWith("loop_") && !line.startsWith("data_")) {
+ && !line.startsWith("loop_") && !line.startsWith("data_")
+ || line.length() == 0) {
// logger.log("skipLoopData just discarded:" + line);
line = reader.readLine();
}
@@ -370,17 +377,15 @@
}
// logger.log("line:" + line);
// logger.log("of length = " + line.length());
- if (line.length() == 1)
- System.out.println("char value is " + (chFirst + 0));
tokenizer.setString(line);
// logger.log("reading an atom");
Atom atom = new Atom();
out: for (int i = 0; i < fieldCount; ++i) {
if (!tokenizer.hasMoreTokens())
- tokenizer.setString(reader.readLine());
+ tokenizer.setStringNextLine(reader);
String field = tokenizer.nextToken();
if (field == null)
- System.out.println("field == null!");
+ logger.log("field == null!");
switch (fieldTypes[i]) {
case NONE:
break;
@@ -548,7 +553,7 @@
String symmetry = null;
for (int i = 0; i < fieldCount; ++i) {
if (!tokenizer.hasMoreTokens())
- tokenizer.setString(reader.readLine());
+ tokenizer.setStringNextLine(reader);
String field = tokenizer.nextToken();
switch (fieldTypes[i]) {
case NONE:
@@ -618,10 +623,9 @@
&& line.charAt(0) != '#'; line = reader.readLine()) {
tokenizer.setString(line);
Structure structure = new Structure();
-
for (int i = 0; i < fieldCount; ++i) {
if (!tokenizer.hasMoreTokens())
- tokenizer.setString(reader.readLine());
+ tokenizer.setStringNextLine(reader);
String field = tokenizer.nextToken();
char firstChar = field.charAt(0);
switch (fieldTypes[i]) {
@@ -705,7 +709,7 @@
for (int i = 0; i < fieldCount; ++i) {
if (!tokenizer.hasMoreTokens())
- tokenizer.setString(reader.readLine());
+ tokenizer.setStringNextLine(reader);
String field = tokenizer.nextToken();
char firstChar = field.charAt(0);
switch (fieldTypes[i]) {
@@ -785,10 +789,10 @@
for (int i = 0; i < fieldCount; ++i) {
if (!tokenizer.hasMoreTokens())
- tokenizer.setString(reader.readLine());
+ tokenizer.setStringNextLine(reader);
String field = tokenizer.nextToken();
if (field == null)
- System.out.println("field == null!");
+ logger.log("field == null!");
switch (fieldTypes[i]) {
case SYMOP_XYZ:
case SYM_EQUIV_XYZ:
@@ -870,6 +874,27 @@
ich = 0;
}
+ void setStringNextLine(BufferedReader reader) throws Exception {
+ String str = reader.readLine();
+ if (str == null)
+ str = "";
+
+ if (str.length() > 0 && str.charAt(0) == ';') {
+
+ String newline = '\1'+str.substring(1);
+ str = "";
+ while (newline != null) {
+ if (newline.startsWith(";")) {
+ str += newline.substring(1) + '\1';
+ break;
+ }
+ str += newline + "\n";
+ newline = reader.readLine();
+ }
+ }
+ setString(str);
+ }
+
boolean hasMoreTokens() {
char ch;
while (ich < cch && ((ch = str.charAt(ich)) == ' ' || ch == '\t'))
@@ -885,7 +910,7 @@
return null;
int ichStart = ich;
char ch = str.charAt(ichStart);
- if (ch != '\'' && ch != '"') {
+ if (ch != '\'' && ch != '"' && ch != '\1') {
while (ich < cch && (ch = str.charAt(ich)) != ' ' && ch != '\t')
++ich;
return str.substring(ichStart, ich);
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Jmol-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jmol-commits