JAL-2805 file identifying lines are turned to lowercase before matching
[jalview.git] / src / jalview / io / IdentifyFile.java
index 7ad8fcd..a7ed592 100755 (executable)
@@ -275,6 +275,11 @@ public class IdentifyFile
           // read as a FASTA (probably)
           break;
         }
+        if (data.indexOf("{\"") > -1)
+        {
+          reply = FileFormat.Json;
+          break;
+        }
         int lessThan = data.indexOf("<");
         if ((lessThan > -1)) // possible Markup Language data i.e HTML,
                              // RNAML, XML
@@ -292,11 +297,6 @@ public class IdentifyFile
           }
         }
 
-        if (data.indexOf("{\"") > -1)
-        {
-          reply = FileFormat.Json;
-          break;
-        }
         if ((data.length() < 1) || (data.indexOf("#") == 0))
         {
           lineswereskipped = true;
@@ -334,15 +334,31 @@ public class IdentifyFile
           reply = FileFormat.Phylip;
           break;
         }
-        else
+        else if (!lineswereskipped && looksLikeJnetData(data))
         {
-          if (!lineswereskipped && looksLikeJnetData(data))
-          {
             reply = FileFormat.Jnet;
             break;
+
+        }
+        else // phylogenetic file
+        {
+          String identifier = data.toLowerCase();
+          String secondLine = source.nextLine().toLowerCase();
+          if (identifier.startsWith("<phyloxml")
+                  || secondLine.startsWith("<phyloxml"))
+          {
+            reply = FileFormat.PhyloXML;
+            break;
           }
+          else if (((identifier.startsWith("nexus"))
+                  || (identifier.startsWith("#nexus"))
+                  || (identifier.startsWith("# nexus"))
+                  || (identifier.startsWith("begin"))))
+          {
+          reply = FileFormat.Nexus;      
+           break;
+        }
         }
-
         lineswereskipped = true; // this means there was some junk before any
         // key file signature
       }