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

Reply via email to