+ // File IO Flags
+ private boolean ReplaceUnderscores = false;
+
+ private boolean printRootInfo = true;
+
+ private static final int REGEX_PERL_NODE_REQUIRE_QUOTE = 0;
+
+ private static final int REGEX_PERL_NODE_ESCAPE_QUOTE = 1;
+
+ private static final int REGEX_PERL_NODE_UNQUOTED_WHITESPACE = 2;
+
+ private static final int REGEX_MAJOR_SYMS = 3;
+
+ private static final int REGEX_QNODE_NAME = 4;
+
+ private static final int REGEX_COMMENT = 5;
+
+ private static final int REGEX_UQNODE_NAME = 6;
+
+ private static final int REGEX_NBOOTSTRAP = 7;
+
+ private static final int REGEX_NDIST = 8;
+
+ private static final int REGEX_NO_LINES = 9;
+
+ private static final int REGEX_PERL_EXPAND_QUOTES = 10;
+
+ private static final int REGEX_MAX = 11;
+
+ private static final Regex[] REGEX = new Regex[REGEX_MAX];
+
+ private static Regex getRegex(int id)
+ {
+ if (REGEX[id] == null)
+ {
+ String code = null;
+ String code2 = null;
+ String codePerl = null;
+ switch (id)
+ {
+ case REGEX_PERL_NODE_REQUIRE_QUOTE:
+ codePerl = "m/[\\[,:'()]/";
+ break;
+ case REGEX_PERL_NODE_ESCAPE_QUOTE:
+ codePerl = "s/'/''/";
+ break;
+ case REGEX_PERL_NODE_UNQUOTED_WHITESPACE:
+ codePerl = "s/\\/w/_/";
+ break;
+ case REGEX_PERL_EXPAND_QUOTES:
+ codePerl = "s/''/'/";
+ break;
+ case REGEX_MAJOR_SYMS:
+ code = "[(\\['),;]";
+ break;
+ case REGEX_QNODE_NAME:
+ code = "'([^']|'')+'";
+ break;
+ case REGEX_COMMENT:
+ code = "]";
+ break;
+ case REGEX_UQNODE_NAME:
+ code = "\\b([^' :;\\](),]+)";
+ break;
+ case REGEX_NBOOTSTRAP:
+ code = "\\s*([0-9+]+)\\s*:";
+ break;
+ case REGEX_NDIST:
+ code = ":([-0-9Ee.+]+)";
+ break;
+ case REGEX_NO_LINES:
+ code = "\n+";
+ code2 = "";
+ break;
+ default:
+ return null;
+ }
+ return codePerl == null ? Platform.newRegex(code, code2)
+ : Platform.newRegexPerl(codePerl);
+ }
+ return REGEX[id];
+ }
+
+
+ private char quoteChar = '\'';
+
+ /**
+ * Creates a new NewickFile object.
+ *
+ * @param inStr
+ * DOCUMENT ME!
+ *
+ * @throws IOException
+ * DOCUMENT ME!
+ */
+ public NewickFile(String inStr) throws IOException
+ {
+ super(inStr, DataSourceType.PASTE);
+ }
+
+ /**
+ * Creates a new NewickFile object.
+ *
+ * @param inFile
+ * DOCUMENT ME!
+ * @param protocol
+ * DOCUMENT ME!
+ *
+ * @throws IOException
+ * DOCUMENT ME!
+ */
+ public NewickFile(String inFile, DataSourceType protocol)
+ throws IOException
+ {
+ super(inFile, protocol);
+ }
+
+ public NewickFile(FileParse source) throws IOException
+ {
+ super(source);
+ }
+
+ /**
+ * Creates a new NewickFile object.
+ *
+ * @param newtree
+ * DOCUMENT ME!
+ */
+ public NewickFile(SequenceNode newtree)
+ {
+ root = newtree;
+ }
+
+ /**
+ * Creates a new NewickFile object.
+ *
+ * @param newtree
+ * DOCUMENT ME!
+ * @param bootstrap
+ * DOCUMENT ME!
+ */
+ public NewickFile(SequenceNode newtree, boolean bootstrap)
+ {
+ HasBootstrap = bootstrap;
+ root = newtree;
+ }
+
+ /**
+ * Creates a new NewickFile object.
+ *
+ * @param newtree
+ * DOCUMENT ME!
+ * @param bootstrap
+ * DOCUMENT ME!
+ * @param distances
+ * DOCUMENT ME!
+ */
+ public NewickFile(SequenceNode newtree, boolean bootstrap,
+ boolean distances)
+ {
+ root = newtree;
+ HasBootstrap = bootstrap;
+ HasDistances = distances;
+ }
+
+ /**
+ * Creates a new NewickFile object.
+ *
+ * @param newtree
+ * DOCUMENT ME!
+ * @param bootstrap
+ * DOCUMENT ME!
+ * @param distances
+ * DOCUMENT ME!
+ * @param rootdistance
+ * DOCUMENT ME!
+ */
+ public NewickFile(SequenceNode newtree, boolean bootstrap,
+ boolean distances, boolean rootdistance)
+ {
+ root = newtree;
+ HasBootstrap = bootstrap;
+ HasDistances = distances;
+ RootHasDistance = rootdistance;
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @param Error
+ * DOCUMENT ME!
+ * @param Er
+ * DOCUMENT ME!
+ * @param r
+ * DOCUMENT ME!
+ * @param p
+ * DOCUMENT ME!
+ * @param s
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ private String ErrorStringrange(String Error, String Er, int r, int p,
+ String s)
+ {
+ return ((Error == null) ? "" : Error) + Er + " at position " + p + " ( "
+ + s.substring(((p - r) < 0) ? 0 : (p - r),
+ ((p + r) > s.length()) ? s.length() : (p + r))
+ + " )\n";